diff --git a/adb/commandline.c b/adb/commandline.c
index 6603452..411bb82 100644
--- a/adb/commandline.c
+++ b/adb/commandline.c
@@ -929,7 +929,7 @@
 
     if(!strcmp(argv[0], "remount") || !strcmp(argv[0], "reboot")
             || !strcmp(argv[0], "tcpip") || !strcmp(argv[0], "usb")
-            || !strcmp(argv[0], "root") || !strcmp(argv[0], "bugreport")) {
+            || !strcmp(argv[0], "root")) {
         char command[100];
         if (argc > 1)
             snprintf(command, sizeof(command), "%s:%s", argv[0], argv[1]);
@@ -945,6 +945,14 @@
         return 1;
     }
 
+    if(!strcmp(argv[0], "bugreport")) {
+        if (argc != 1) {
+            return 1;
+        }
+        do_cmd(ttype, serial, "shell", "dumpstate", "-", 0);
+        return 0;
+    }
+
     /* adb_command() wrapper commands */
 
     if(!strncmp(argv[0], "wait-for-", strlen("wait-for-"))) {
diff --git a/adb/services.c b/adb/services.c
index 447c11b..2864ac9 100644
--- a/adb/services.c
+++ b/adb/services.c
@@ -188,43 +188,6 @@
     adb_close(fd);
 }
 
-void bugreport_service(int fd, void *cookie)
-{
-    char    buffer[MAX_PAYLOAD];
-    int i, s;
-
-    /* start the dumpstate service */
-    property_set("ctl.start", "dumpstate");
-
-    /* socket will not be available until service starts */
-    for (i = 0; i < 10; i++) {
-        s = socket_local_client("dumpstate",
-                             ANDROID_SOCKET_NAMESPACE_RESERVED,
-                             SOCK_STREAM);
-        if (s >= 0)
-            break;
-        /* try again in 1 second */
-        sleep(1);
-    }
-
-    if (s < 0) {
-        const char* failed = "Failed to connect to dumpstate service\n";
-        writex(fd, failed, strlen(failed));
-        adb_close(fd);
-        return;
-    }
-
-    while (1) {
-        int length = adb_read(s, buffer, sizeof(buffer));
-        if (length <= 0)
-            break;
-        if (adb_write(fd, buffer, length) <= 0)
-            break;
-    }
-    adb_close(s);
-    adb_close(fd);
-}
-
 #endif
 
 #if 0
@@ -506,8 +469,6 @@
         ret = create_service_thread(restart_tcp_service, (void *)port);
     } else if(!strncmp(name, "usb:", 4)) {
         ret = create_service_thread(restart_usb_service, NULL);
-    } else if(!strncmp(name, "bugreport:", 10)) {
-        ret = create_service_thread(bugreport_service, NULL);
 #endif
 #if 0
     } else if(!strncmp(name, "echo:", 5)){
