diff --git a/Makefile.dep b/Makefile.dep
index 601eea3eebde373a228f59bcb3bedc1450e010c1..89f4d4125f0dfe21f3f45965900ec35aff196861 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -357,6 +357,23 @@ ifneq (,$(filter posix_semaphore,$(USEMODULE)))
   USEMODULE += xtimer
 endif
 
+ifneq (,$(filter emb6_%,$(USEMODULE)))
+  USEMODULE += emb6
+endif
+
+ifneq (,$(filter emb6,$(USEMODULE)))
+  USEPKG += emb6
+  USEMODULE += emb6_bsp
+  USEMODULE += emb6_common
+  USEMODULE += emb6_ipv6
+  USEMODULE += emb6_ipv6_multicast
+  USEMODULE += emb6_llsec
+  USEMODULE += emb6_mac
+  USEMODULE += emb6_rpl
+  USEMODULE += emb6_sicslowpan
+  USEMODULE += emb6_utils
+endif
+
 ifneq (,$(filter lwip_sixlowpan,$(USEMODULE)))
   USEMODULE += lwip_ipv6_autoconfig
 endif
diff --git a/Makefile.pseudomodules b/Makefile.pseudomodules
index 685d7767cf7dca08dc09f9a81869c5660b29b6ee..e2281166f3ec073f7d474039be49f8aecd6e1a82 100644
--- a/Makefile.pseudomodules
+++ b/Makefile.pseudomodules
@@ -3,6 +3,7 @@ PSEUDOMODULES += conn_ip
 PSEUDOMODULES += conn_tcp
 PSEUDOMODULES += conn_udp
 PSEUDOMODULES += core_thread_flags
+PSEUDOMODULES += emb6_router
 PSEUDOMODULES += gnrc_netdev_default
 PSEUDOMODULES += gnrc_ipv6_default
 PSEUDOMODULES += gnrc_ipv6_router
diff --git a/pkg/emb6/Makefile b/pkg/emb6/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..40d3bfaf07eb5957707c1ad51a82bcf68cbfd0fe
--- /dev/null
+++ b/pkg/emb6/Makefile
@@ -0,0 +1,11 @@
+PKG_NAME=emb6
+PKG_URL=https://github.com/hso-esk/emb6.git
+PKG_VERSION=14e4a3cfff01644e078870e14e16a1fe60dcc895
+PKG_BUILDDIR ?= $(BINDIRBASE)/pkg/$(BOARD)/$(PKG_NAME)
+
+.PHONY: all
+
+all: git-download
+	"$(MAKE)" -C $(PKG_BUILDDIR)
+
+include $(RIOTBASE)/pkg/pkg.mk
diff --git a/pkg/emb6/Makefile.include b/pkg/emb6/Makefile.include
new file mode 100644
index 0000000000000000000000000000000000000000..505f6e26989b67371c85edce178e36ae05ff66dd
--- /dev/null
+++ b/pkg/emb6/Makefile.include
@@ -0,0 +1,57 @@
+PKG_BUILDDIR ?= $(BINDIRBASE)/pkg/$(BOARD)/emb6
+EMB6_DIR := $(PKG_BUILDDIR)
+
+INCLUDES += -I$(EMB6_DIR)/target
+
+ifeq (,$(filter emb6_router,$(USEMODULE)))
+  CFLAGS += -DEMB6_CONF_ROUTER=FALSE
+endif
+
+ifneq (,$(filter emb6_bsp,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/target/bsp
+endif
+
+ifneq (,$(filter emb6_common,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6
+  INCLUDES += -I$(EMB6_DIR)/emb6
+endif
+
+ifneq (,$(filter emb6_ipv6,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/net/ipv6
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/net/ipv6
+endif
+
+ifneq (,$(filter emb6_ipv6_multicast,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/net/ipv6/multicast
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/net/ipv6/multicast
+endif
+
+ifneq (,$(filter emb6_llsec,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/mac/llsec
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/mac/llsec
+endif
+
+ifneq (,$(filter emb6_mac,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/mac
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/mac
+endif
+
+ifneq (,$(filter emb6_rpl,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/net/rpl
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/net/rpl
+endif
+
+ifneq (,$(filter emb6_sicslowpan,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/net/sicslowpan
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/net/sicslowpan
+endif
+
+ifneq (,$(filter emb6_sock,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/emb6/src/tport
+  INCLUDES += -I$(EMB6_DIR)/emb6/inc/tport
+endif
+
+ifneq (,$(filter emb6_utils,$(USEMODULE)))
+  DIRS += $(EMB6_DIR)/utils/src
+  INCLUDES += -I$(EMB6_DIR)/utils/inc
+endif
diff --git a/pkg/emb6/doc.txt b/pkg/emb6/doc.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8afb9ee9db05debcf5081a1b51223710b5a300f7
--- /dev/null
+++ b/pkg/emb6/doc.txt
@@ -0,0 +1,9 @@
+/**
+ * @defgroup pkg_emb6 emb6 network stack
+ * @ingroup pkg
+ * @brief   emb6 network stack
+ * @see     https://github.com/hso-esk/emb6/raw/develop/doc/pdf/emb6.pdf
+ *
+ * emb6 is a fork of Contiki's uIP network stack without its usage of
+ * proto-threads. It uses periodic event polling instead.
+ */
diff --git a/pkg/emb6/patches/0001-Add-RIOT-Makefiles.patch b/pkg/emb6/patches/0001-Add-RIOT-Makefiles.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7f92930002684c0c5f05740b1d91469f09d9f540
Binary files /dev/null and b/pkg/emb6/patches/0001-Add-RIOT-Makefiles.patch differ
diff --git a/pkg/emb6/patches/0002-Rename-colliding-files-and-functions.patch b/pkg/emb6/patches/0002-Rename-colliding-files-and-functions.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5dfcfd962655f49f0be870ff2dbce066f41ddb3a
Binary files /dev/null and b/pkg/emb6/patches/0002-Rename-colliding-files-and-functions.patch differ
diff --git a/pkg/emb6/patches/0003-Fix-warnings.patch b/pkg/emb6/patches/0003-Fix-warnings.patch
new file mode 100644
index 0000000000000000000000000000000000000000..dfa59d43821b2bce8fb816fbc97422c39f9aeb0d
Binary files /dev/null and b/pkg/emb6/patches/0003-Fix-warnings.patch differ
diff --git a/pkg/emb6/patches/0004-Provide-event-type-for-RIOT-s-conn_.-_send.patch b/pkg/emb6/patches/0004-Provide-event-type-for-RIOT-s-conn_.-_send.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ba76384872852942319836a2fde16d572ccb1d9c
Binary files /dev/null and b/pkg/emb6/patches/0004-Provide-event-type-for-RIOT-s-conn_.-_send.patch differ