diff --git a/wire/util.go b/wire/util.go
index 89c7bb6..b65a881 100644
--- a/wire/util.go
+++ b/wire/util.go
@@ -3,6 +3,7 @@ package wire
 import (
 	"fmt"
 	"io"
+	"regexp"
 
 	"github.com/zach-klippenstein/goadb/util"
 )
@@ -13,6 +14,13 @@ type ErrorResponseDetails struct {
 	ServerMsg string
 }
 
+// deviceNotFoundMessagePattern matches all possible error messages returned by adb servers to
+// report that a matching device was not found. Used to set the util.DeviceNotFound error code on
+// error values.
+//
+// Old servers send "device not found", and newer ones "device 'serial' not found".
+var deviceNotFoundMessagePattern = regexp.MustCompile(`device( '.*')? not found`)
+
 // Reads the status, and if failure, reads the message and returns it as an error.
 // If the status is success, doesn't read the message.
 // req is just used to populate the AdbError, and can be nil.
@@ -44,7 +52,7 @@ func adbServerError(request string, serverMsg string) error {
 	}
 
 	errCode := util.AdbError
-	if serverMsg == "device not found" {
+	if deviceNotFoundMessagePattern.MatchString(serverMsg) {
 		errCode = util.DeviceNotFound
 	}
 
diff --git a/wire/util_test.go b/wire/util_test.go
new file mode 100644
index 0000000..9e4fdb4
--- /dev/null
+++ b/wire/util_test.go
@@ -0,0 +1,56 @@
+package wire
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+	"github.com/zach-klippenstein/goadb/util"
+)
+
+func TestAdbServerError_NoRequest(t *testing.T) {
+	err := adbServerError("", "fail")
+	assert.Equal(t, util.Err{
+		Code:    util.AdbError,
+		Message: "server error: fail",
+		Details: ErrorResponseDetails{
+			Request:   "",
+			ServerMsg: "fail",
+		},
+	}, *(err.(*util.Err)))
+}
+
+func TestAdbServerError_WithRequest(t *testing.T) {
+	err := adbServerError("polite", "fail")
+	assert.Equal(t, util.Err{
+		Code:    util.AdbError,
+		Message: "server error for polite request: fail",
+		Details: ErrorResponseDetails{
+			Request:   "polite",
+			ServerMsg: "fail",
+		},
+	}, *(err.(*util.Err)))
+}
+
+func TestAdbServerError_DeviceNotFound(t *testing.T) {
+	err := adbServerError("", "device not found")
+	assert.Equal(t, util.Err{
+		Code:    util.DeviceNotFound,
+		Message: "server error: device not found",
+		Details: ErrorResponseDetails{
+			Request:   "",
+			ServerMsg: "device not found",
+		},
+	}, *(err.(*util.Err)))
+}
+
+func TestAdbServerError_DeviceSerialNotFound(t *testing.T) {
+	err := adbServerError("", "device 'LGV4801c74eccd' not found")
+	assert.Equal(t, util.Err{
+		Code:    util.DeviceNotFound,
+		Message: "server error: device 'LGV4801c74eccd' not found",
+		Details: ErrorResponseDetails{
+			Request:   "",
+			ServerMsg: "device 'LGV4801c74eccd' not found",
+		},
+	}, *(err.(*util.Err)))
+}