diff --git a/package/Config.in b/package/Config.in
index f68ac9e021c99c3cc360166d187dff115f559107..941c144f84fcd9cfe3b5e0ce1c206d0f5dc5e9ef 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -101,6 +101,7 @@ source "package/radvd/Config.in"
 source "package/rarpd/Config.in"
 source "package/reaim/Config.in"
 source "package/robocfg/Config.in"
+source "package/rrs/Config.in"
 source "package/rsync/Config.in"
 source "package/samba/Config.in"
 source "package/ser/Config.in"
diff --git a/package/Makefile b/package/Makefile
index 0c4d04831080861e81e464a94ee2c51170ac0c1b..e061e2bdfe9e03c57ee886e82b9fdee11f0337bb 100644
--- a/package/Makefile
+++ b/package/Makefile
@@ -152,6 +152,7 @@ package-$(BR2_COMPILE_RP_PPPOE) += rp-pppoe
 package-$(BR2_PACKAGE_RRDCOLLECT) += rrdcollect
 package-$(BR2_COMPILE_RRDTOOL) += rrdtool
 package-$(BR2_COMPILE_RRDTOOL1) += rrdtool1
+package-$(BR2_COMPILE_RRS) += rrs
 package-$(BR2_PACKAGE_RSYNC) += rsync
 package-$(BR2_PACKAGE_SABLEVM) += sablevm
 package-$(BR2_PACKAGE_SABLEVM_CLASSPATH) += sablevm-classpath
@@ -378,6 +379,11 @@ ifneq ($(BR2_PACKAGE_PMACCT_PGSQL),)
 pmacct-compile: postgresql-compile
 endif
 
+rrs-compile: uclibc++-compile
+ifneq ($(BR2_PACKAGE_RRS),)
+rrs-compile: openssl-compile
+endif
+
 snort-compile: libnet-compile libpcap-compile pcre-compile
 ifeq ($(BR2_PACKAGE_SNORT_MYSQL),y)
 snort-compile: mysql-compile
diff --git a/package/rrs/Config.in b/package/rrs/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..8c9ab8205b0163fb7c9e4b84ffa32766bfd5e659
--- /dev/null
+++ b/package/rrs/Config.in
@@ -0,0 +1,28 @@
+config BR2_COMPILE_RRS
+	bool
+	default n
+	depends BR2_PACKAGE_RRS || BR2_PACKAGE_RRS_NOSSL
+
+config BR2_PACKAGE_RRS
+	tristate "rrs - A reverse (connecting) remote shell, with SSL support"
+	default m if CONFIG_DEVEL
+	select BR2_COMPILE_RRS
+	select BR2_PACKAGE_UCLIBCXX
+	select BR2_PACKAGE_LIBOPENSSL
+	help
+	  A reverse (connecting) remote shell, built with SSL support.
+	  
+	  http://www.cycom.se/dl/rrs/
+	  
+
+config BR2_PACKAGE_RRS_NOSSL
+	tristate "rrs-nossl - A reverse (connecting) remote shell, without SSL support"
+	default m if CONFIG_DEVEL
+	select BR2_COMPILE_RRS
+	select BR2_PACKAGE_UCLIBCXX
+	help
+	  A reverse (connecting) remote shell, built without SSL support.
+	  
+	  http://www.cycom.se/dl/rrs/
+	  
+
diff --git a/package/rrs/Makefile b/package/rrs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f7b2d5f223de445f9f27b3ffa6d94013352b1fb0
--- /dev/null
+++ b/package/rrs/Makefile
@@ -0,0 +1,58 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=rrs
+PKG_VERSION:=1.70
+PKG_RELEASE:=1
+PKG_MD5SUM:=b400d03c0e39e3e78a7327ba78f789f0 
+
+PKG_SOURCE_URL:=http://www.cycom.se/uploads/36/19 
+
+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,RRS,rrs,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+$(eval $(call PKG_template,RRS_NOSSL,rrs-nossl,$(PKG_VERSION)-$(PKG_RELEASE),$(ARCH)))
+
+$(PKG_BUILD_DIR)/.configured: $(PKG_BUILD_DIR)/.prepared
+	touch $@
+
+$(PKG_BUILD_DIR)/.built:
+ifneq ($(BR2_PACKAGE_RRS),)
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		CC="$(TARGET_CC)" \
+		CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -fno-builtin -nostdinc++" \
+		LDFLAGS="-nodefaultlibs -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib -luClibc++ -lc -lm -lutil -lssl -lcrypto" \
+		generic
+	( cd $(PKG_BUILD_DIR); mv rrs rrs-ssl; )
+	-$(MAKE) -C $(PKG_BUILD_DIR) \
+		clean
+endif
+ifneq ($(BR2_PACKAGE_RRS_NOSSL),)
+	$(MAKE) -C $(PKG_BUILD_DIR) \
+		CC="$(TARGET_CC)" \
+		CFLAGS="$(TARGET_CFLAGS) -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include -fno-builtin -nostdinc++" \
+		LDFLAGSNOSSL="-nodefaultlibs -L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib -luClibc++ -lc -lm -lutil" \
+		generic-nossl
+	( cd $(PKG_BUILD_DIR); mv rrs rrs-nossl; )
+endif
+	touch $@
+
+$(IPKG_RRS):
+	install -d -m0755 $(IDIR_RRS)/usr/bin
+	install -m0755 $(PKG_BUILD_DIR)/rrs-ssl $(IDIR_RRS)/usr/bin/rrs
+	$(RSTRIP) $(IDIR_RRS)
+	$(IPKG_BUILD) $(IDIR_RRS) $(PACKAGE_DIR)
+
+$(IPKG_RRS_NOSSL):
+	install -d -m0755 $(IDIR_RRS_NOSSL)/usr/bin
+	install -m0755 $(PKG_BUILD_DIR)/rrs-nossl $(IDIR_RRS_NOSSL)/usr/bin/rrs
+	$(RSTRIP) $(IDIR_RRS_NOSSL)
+	$(IPKG_BUILD) $(IDIR_RRS_NOSSL) $(PACKAGE_DIR)
+
+mostlyclean:
+	-$(MAKE) -C $(PKG_BUILD_DIR) clean
+	rm -f $(PKG_BUILD_DIR)/.built
diff --git a/package/rrs/ipkg/rrs-nossl.control b/package/rrs/ipkg/rrs-nossl.control
new file mode 100644
index 0000000000000000000000000000000000000000..0407e8ffcb9c2d68a1b6d004f361a5f258833951
--- /dev/null
+++ b/package/rrs/ipkg/rrs-nossl.control
@@ -0,0 +1,8 @@
+Package: rrs-nossl
+Priority: optional
+Section: net
+Maintainer: OpenWrt Developers Team <openwrt-devel@openwrt.org>, putman
+Source: http://openwrt.org/cgi-bin/viewcvs.cgi/openwrt/package/rrs/
+Depends: uclibc++
+Description: A reverse (connecting) remote shell, without SSL support.
+
diff --git a/package/rrs/ipkg/rrs.control b/package/rrs/ipkg/rrs.control
new file mode 100644
index 0000000000000000000000000000000000000000..a6366f716568d6675b73201f39b0ef5ab4719a01
--- /dev/null
+++ b/package/rrs/ipkg/rrs.control
@@ -0,0 +1,8 @@
+Package: rrs
+Priority: optional
+Section: net
+Maintainer: OpenWrt Developers Team <openwrt-devel@openwrt.org>
+Source: http://openwrt.org/cgi-bin/viewcvs.cgi/openwrt/package/rrs/
+Depends: uclibc++, libopenssl
+Description: A reverse (connecting) remote shell, with SSL support.
+
diff --git a/package/rrs/patches/rrs-1.70-shell.patch b/package/rrs/patches/rrs-1.70-shell.patch
new file mode 100644
index 0000000000000000000000000000000000000000..822ce7c18e60771928f1b5d721bf87f0e1796c12
--- /dev/null
+++ b/package/rrs/patches/rrs-1.70-shell.patch
@@ -0,0 +1,12 @@
+diff -ruN rrs-1.70-old/rrs.c rrs-1.70-new/rrs.c
+--- rrs-1.70-old/rrs.c	2004-05-30 02:32:03.000000000 +0200
++++ rrs-1.70-new/rrs.c	2005-10-12 12:41:24.000000000 +0200
+@@ -920,7 +920,7 @@
+         close(slave_fd);
+         signal(SIGHUP, SIG_DFL);
+         signal(SIGCHLD, SIG_DFL);
+-        execl("/bin/sh", "", NULL);
++        execl("/bin/sh", "/bin/sh", NULL);
+         /* should not return */
+         exit(1);
+     } else if (pid > 0) {