diff --git a/src/host/layer23/src/common/gps.c b/src/host/layer23/src/common/gps.c
index 38aae2c..9eec380 100644
--- a/src/host/layer23/src/common/gps.c
+++ b/src/host/layer23/src/common/gps.c
@@ -30,6 +30,7 @@
 
 #ifdef _HAVE_GPSD
 #include <gps.h>
+#define GPSD_WAIT_TIMEOUT 2000
 #endif
 
 #include <osmocom/core/utils.h>
@@ -70,12 +71,19 @@ int osmo_gpsd_cb(struct osmo_fd *bfd, unsigned int what)
 	    goto gps_not_ready;
 
 	/* gps has no data */
+#ifdef GPSD_WAIT1
 	if (gps_waiting(gdata))
 	    goto gps_not_ready;
+#else
+	if (gps_waiting(gdata,GPSD_WAIT_TIMEOUT))
+	    goto gps_not_ready;
+#endif
 
+#ifdef GPSD_HAVE_GPS_POOL
 	/* polling returned an error */
 	if (gps_poll(gdata))
 	    goto gps_not_ready;
+#endif
 
 	/* data are valid */
 	if (gdata->set & LATLON_SET) {
@@ -110,9 +118,14 @@ int osmo_gpsd_open(void)
 	gps_bfd.data = NULL;
 	gps_bfd.when = BSC_FD_READ;
 	gps_bfd.cb = osmo_gpsd_cb;
+	int rval;
 
-	gdata = gps_open(g.gpsd_host, g.gpsd_port);
-	if (gdata == NULL) {
+#ifdef GPSD_GPS_OPEN2
+	rval = gps_open(g.gpsd_host, g.gpsd_port);
+#else
+	rval = gps_open(g.gpsd_host, g.gpsd_port, gdata);
+#endif
+	if (rval == -1 ) {
 		LOGP(DGPS, LOGL_ERROR, "Can't connect to gpsd\n");
 		return -1;
 	}
