diff --git a/gps/gps_qemu.c b/gps/gps_qemu.c
index 67737c1..7296f22 100644
--- a/gps/gps_qemu.c
+++ b/gps/gps_qemu.c
@@ -1,7 +1,7 @@
 
 #include <errno.h>
 #include <pthread.h>
-#include <termios.h>
+#include "qemu.h"
 #include <fcntl.h>
 #include <sys/epoll.h>
 #include <math.h>
@@ -10,11 +10,10 @@
 #define  LOG_TAG  "gps_qemu"
 #include <cutils/log.h>
 #include <cutils/sockets.h>
-#include <cutils/properties.h>
 #include <hardware/gps.h>
 
 /* the name of the qemud-controlled socket */
-#define  QEMUD_SOCKET_NAME  "qemud_gps"
+#define  QEMU_CHANNEL_NAME  "gps"
 
 #define  GPS_DEBUG  0
 
@@ -549,7 +548,7 @@
     GpsCallbacks            callbacks;
     pthread_t               thread;
     int                     control[2];
-
+    QemuChannel             channel;
 } GpsState;
 
 static GpsState  _gps_state[1];
@@ -739,68 +738,22 @@
 static void
 gps_state_init( GpsState*  state )
 {
-    char   prop[PROPERTY_VALUE_MAX];
-    char   device[256];
-    int    ret;
-    int    done = 0;
-
     state->init       = 1;
     state->control[0] = -1;
     state->control[1] = -1;
     state->fd         = -1;
 
-    // try to connect to the qemud socket
-    do {
-        state->fd = socket_local_client( QEMUD_SOCKET_NAME,
-                                         ANDROID_SOCKET_NAMESPACE_RESERVED,
-                                         SOCK_STREAM );
-        if (state->fd < 0) {
-            D("no '%s' control socket available: %s", QEMUD_SOCKET_NAME, strerror(errno));
-            break;
-        }
-        snprintf( device, sizeof(device), "/dev/socket/%s", QEMUD_SOCKET_NAME );
-        done = 1;
+    state->fd = qemu_channel_open( &state->channel,
+                                   QEMU_CHANNEL_NAME,
+                                   O_RDONLY );
 
-    } while (0);
-
-    // otherwise, look for a kernel-provided device name
-    if (!done) do {
-        if (property_get("ro.kernel.android.gps",prop,"") == 0) {
-            D("no kernel-provided gps device name");
-            break;
-        }
-        if ( snprintf(device, sizeof(device), "/dev/%s", prop) >= (int)sizeof(device) ) {
-            LOGE("gps serial device name too long: '%s'", prop);
-            break;
-        }
-
-        do {
-            state->fd = open( device, O_RDWR );
-        } while (state->fd < 0 && errno == EINTR);
-
-        if (state->fd < 0) {
-            LOGE("could not open gps serial device %s: %s", device, strerror(errno) );
-            break;
-        }
-        done = 1;
-
-    } while (0);
-
-    if (!done) {
+    if (state->fd < 0) {
         D("no gps emulation detected");
         return;
     }
 
     D("gps emulation will read from %s", device);
 
-    // disable echo on serial lines
-    if ( !memcmp( device, "/dev/ttyS", 9 ) ) {
-        struct termios  ios;
-        tcgetattr( state->fd, &ios );
-        ios.c_lflag = 0;  /* disable ECHO, ICANON, etc... */
-        tcsetattr( state->fd, TCSANOW, &ios );
-    }
-
     if ( socketpair( AF_LOCAL, SOCK_STREAM, 0, state->control ) < 0 ) {
         LOGE("could not create thread control socket pair: %s", strerror(errno));
         goto Fail;
@@ -893,7 +846,7 @@
 
     if (!s->init) {
         D("%s: called with uninitialized state !!", __FUNCTION__);
-        return -1;
+        return;
     }
 
     D("%s: called", __FUNCTION__);
