diff --git a/openwrt/package/Config.in b/openwrt/package/Config.in
index 70565604b47d77dff20906c808c7b163217203eb..b5a8e49ebbe147bdcd2a68648e1106926baf25dd 100644
--- a/openwrt/package/Config.in
+++ b/openwrt/package/Config.in
@@ -12,6 +12,7 @@ source "package/mtd/Config.in"
 
 comment "Applications"
 source "package/deco/Config.in"
+source "package/gpsd/Config.in"
 source "package/haserl/Config.in"
 source "package/lcd4linux/Config.in"
 source "package/less/Config.in"
diff --git a/openwrt/package/Makefile b/openwrt/package/Makefile
index 3e157f9cbfce4da9b9ff47d26f8228c76b996fb8..7779c055614e145294c4ccd649ac81c0dbab4cb8 100644
--- a/openwrt/package/Makefile
+++ b/openwrt/package/Makefile
@@ -50,6 +50,7 @@ package-$(BR2_PACKAGE_GLIB) += glib
 package-$(BR2_PACKAGE_GMEDIASERVER) += gmediaserver
 package-$(BR2_PACKAGE_GMP) += gmp
 package-$(BR2_COMPILE_GNUTLS) += gnutls
+package-$(BR2_PACKAGE_GPSD) += gpsd
 package-$(BR2_PACKAGE_HASERL) += haserl
 package-$(BR2_PACKAGE_HOSTAPD) += hostapd
 package-$(BR2_PACKAGE_HOWL) += howl
@@ -235,6 +236,7 @@ fprobe-compile: libpcap-compile
 gdbserver-compile: ncurses-compile
 gmediaserver-compile: id3lib-compile libupnp-compile
 gnutls-compile: libgcrypt-compile opencdk-compile libtasn1-compile
+gpsd-compile: uclibc++-compile
 icecast-compile: curl-compile libvorbisidec-compile libxml2-compile libxslt-compile
 id3lib-compile: uclibc++-compile zlib-compile
 irssi-compile: glib-compile ncurses-compile
diff --git a/openwrt/package/gpsd/Config.in b/openwrt/package/gpsd/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..6cf31d51a4145248a9b56395aea60f0878963709
--- /dev/null
+++ b/openwrt/package/gpsd/Config.in
@@ -0,0 +1,17 @@
+config BR2_PACKAGE_GPSD
+	tristate "gpsd - An interface daemon for GPS receivers"
+	default m if CONFIG_DEVEL
+	select BR2_PACKAGE_LIBPTHREAD
+	select BR2_PACKAGE_UCLIBCXX
+	help
+	  gpsd is a monitor daemon that watches a TCP/IP port (2947 by default), 
+	  waiting for applications to request information from GPSes or 
+	  differential-GPS radios attached to the host machine. Each GPS or 
+	  radio is expected to be direct-connected to the host via a USB or 
+	  RS232C serial port. The port may be specified to gpsd at startup, or 
+	  it may be set via a command shipped down a local control socket (e.g. 
+	  by a USB hotplug script). Given a GPS device by either means, gpsd 
+	  discovers the correct port speed and protocol for it.
+	  
+	  http://gpsd.berlios.de/
+	  
diff --git a/openwrt/package/gpsd/Makefile b/openwrt/package/gpsd/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..56c562d342d177d4ee6f72259c86ba8f8bb00abd
--- /dev/null
+++ b/openwrt/package/gpsd/Makefile
@@ -0,0 +1,89 @@
+# $Id$
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=gpsd
+PKG_VERSION:=2.30
+PKG_RELEASE:=1
+PKG_MD5SUM:=dde177174878e8ae6db15f8010da46dd
+
+PKG_SOURCE_URL:=http://download.berlios.de/gpsd/
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_CAT:=zcat
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(TOPDIR)/package/rules.mk
+
+$(eval $(call PKG_template,GPSD,gpsd,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured:
+	( cd $(PKG_BUILD_DIR); rm -rf config.{cache,status}; \
+		$(TARGET_CONFIGURE_OPTS) \
+		CFLAGS="$(TARGET_CFLAGS)" \
+		CXXFLAGS="$(TARGET_CFLAGS) -fno-builtin -nostdinc++"  \
+		CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \
+		LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \
+		LIBS="-nodefaultlibs -luClibc++ -lc -lm -lnotimpl" \
+		./configure \
+			--target=$(GNU_TARGET_NAME) \
+			--host=$(GNU_TARGET_NAME) \
+			--build=$(GNU_HOST_NAME) \
+			--program-prefix="" \
+			--program-suffix="" \
+			--prefix=/usr \
+			--exec-prefix=/usr \
+			--bindir=/usr/bin \
+			--datadir=/usr/share \
+			--includedir=/usr/include \
+			--infodir=/usr/share/info \
+			--libdir=/usr/lib \
+			--libexecdir=/usr/lib \
+			--localstatedir=/var \
+			--mandir=/usr/share/man \
+			--sbindir=/usr/sbin \
+			--sysconfdir=/etc \
+			$(DISABLE_LARGEFILE) \
+			$(DISABLE_NLS) \
+			--enable-shared \
+			--enable-static \
+			--with-gnu-ld \
+	);
+	touch $@
+
+$(PKG_BUILD_DIR)/.built:
+	rm -rf $(PKG_INSTALL_DIR)
+	mkdir -p $(PKG_INSTALL_DIR)
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		CXXLINK="\$$(LINK)" \
+		DESTDIR="$(PKG_INSTALL_DIR)" \
+		all install
+	touch $@
+
+$(IPKG_GPSD):
+	install -d -m0755 $(IDIR_GPSD)/usr/lib
+	cp -fpR $(PKG_INSTALL_DIR)/usr/lib/libgps.so.* $(IDIR_GPSD)/usr/lib/
+	install -d -m0755 $(IDIR_GPSD)/usr/sbin
+	cp -fpR $(PKG_INSTALL_DIR)/usr/sbin/gpsd $(IDIR_GPSD)/usr/sbin/
+	$(RSTRIP) $(IDIR_GPSD)
+	$(IPKG_BUILD) $(IDIR_GPSD) $(PACKAGE_DIR)
+
+$(STAGING_DIR)/usr/lib/libgps.so: $(PKG_BUILD_DIR)/.built
+	mkdir -p $(STAGING_DIR)/usr/include
+	cp -fpR $(PKG_INSTALL_DIR)/usr/include/gps{,d}.h $(STAGING_DIR)/usr/include/
+	cp -fpR $(PKG_INSTALL_DIR)/usr/include/libgpsmm.h $(STAGING_DIR)/usr/include/
+	mkdir -p $(STAGING_DIR)/usr/lib
+	cp -fpR $(PKG_INSTALL_DIR)/usr/lib/libgps.{a,so*} $(STAGING_DIR)/usr/lib/
+	touch $@
+
+install-dev: $(STAGING_DIR)/usr/lib/libgps.so
+
+uninstall-dev:
+	rm -rf \
+		$(STAGING_DIR)/usr/include/gps{,d}.h \
+		$(STAGING_DIR)/usr/include/libgpsmm.h \
+		$(STAGING_DIR)/usr/lib/libgps.{a,so*} \
+
+compile: install-dev
+clean: uninstall-dev
diff --git a/openwrt/package/gpsd/ipkg/gpsd.control b/openwrt/package/gpsd/ipkg/gpsd.control
new file mode 100644
index 0000000000000000000000000000000000000000..f9664de12f5600e72b344353248fa667fb84f14f
--- /dev/null
+++ b/openwrt/package/gpsd/ipkg/gpsd.control
@@ -0,0 +1,9 @@
+Package: gpsd
+Priority: optional
+Section: net
+Version: [TBDL]
+Architecture: [TBDL]
+Maintainer: OpenWrt Developers Team <openwrt-devel@openwrt.org>
+Source: buildroot internal
+Depends: libpthread, uclibc++
+Description: An interface daemon for GPS receivers.