diff --git a/Makefile.dep b/Makefile.dep
index 5ddbbb837f85d8a952da2380cf6a60d0de9e5c71..e8732e8e13c281c57e46304c4627ea97f394d2c9 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -273,6 +273,7 @@ endif
 ifneq (,$(filter gnrc_icmpv6,$(USEMODULE)))
   USEMODULE += inet_csum
   USEMODULE += gnrc_ipv6
+  USEMODULE += icmpv6
 endif
 
 ifneq (,$(filter gnrc_rpl_srh,$(USEMODULE)))
diff --git a/sys/Makefile b/sys/Makefile
index 7245192bf7e2b646ba460004f1ee07aa83de7c14..75102da22901f9496c001986ea06323099b6edad 100644
--- a/sys/Makefile
+++ b/sys/Makefile
@@ -28,6 +28,9 @@ endif
 ifneq (,$(filter netdev2_test,$(USEMODULE)))
     DIRS += net/netdev2_test
 endif
+ifneq (,$(filter icmpv6,$(USEMODULE)))
+    DIRS += net/network_layer/icmpv6
+endif
 ifneq (,$(filter ipv4_addr,$(USEMODULE)))
     DIRS += net/network_layer/ipv4/addr
 endif
diff --git a/sys/include/net/icmpv6.h b/sys/include/net/icmpv6.h
index 19342af92acc4adb012ba75bf972707307419275..76cb52ba479cf606376505d13b60c2b9c4a7b90a 100644
--- a/sys/include/net/icmpv6.h
+++ b/sys/include/net/icmpv6.h
@@ -217,6 +217,13 @@ typedef struct __attribute__((packed)) {
     network_uint16_t seq;   /**< Sequence number */
 } icmpv6_echo_t;
 
+/**
+ * @brief   Print the given ICMPv6 header to STDOUT
+ *
+ * @param[in] hdr           ICMPv6 header to print
+ */
+void icmpv6_hdr_print(icmpv6_hdr_t *hdr);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sys/net/gnrc/pktdump/gnrc_pktdump.c b/sys/net/gnrc/pktdump/gnrc_pktdump.c
index 251ea167ef0a1d018a19ff095f0f89ec8cab4a85..bf20e197b70579caa4b989510bbf320d094c5242 100644
--- a/sys/net/gnrc/pktdump/gnrc_pktdump.c
+++ b/sys/net/gnrc/pktdump/gnrc_pktdump.c
@@ -27,6 +27,7 @@
 #include "msg.h"
 #include "net/gnrc/pktdump.h"
 #include "net/gnrc.h"
+#include "net/icmpv6.h"
 #include "net/ipv6/addr.h"
 #include "net/ipv6/hdr.h"
 #include "net/udp.h"
@@ -71,6 +72,7 @@ static void _dump_snip(gnrc_pktsnip_t *pkt)
 #ifdef MODULE_GNRC_ICMPV6
         case GNRC_NETTYPE_ICMPV6:
             printf("NETTYPE_ICMPV6 (%i)\n", pkt->type);
+            icmpv6_hdr_print(pkt->data);
             break;
 #endif
 #ifdef MODULE_GNRC_TCP
diff --git a/sys/net/network_layer/icmpv6/Makefile b/sys/net/network_layer/icmpv6/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..48422e909a47d7cd428d10fa73825060ccc8d8c2
--- /dev/null
+++ b/sys/net/network_layer/icmpv6/Makefile
@@ -0,0 +1 @@
+include $(RIOTBASE)/Makefile.base
diff --git a/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c b/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c
new file mode 100644
index 0000000000000000000000000000000000000000..867e42fb8ea97531adbbcb1b381f3fe524ed807a
--- /dev/null
+++ b/sys/net/network_layer/icmpv6/icmpv6_hdr_print.c
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2017 HAW Hamburg
+ *
+ * This file is subject to the terms and conditions of the GNU Lesser
+ * General Public License v2.1. See the file LICENSE in the top level
+ * directory for more details.
+ */
+
+/**
+ * @{
+ *
+ * @file
+ *
+ * @author smlng <s@mlng.net>
+ */
+
+#include <stdio.h>
+#include <inttypes.h>
+
+#include "net/icmpv6.h"
+
+void icmpv6_hdr_print(icmpv6_hdr_t *hdr)
+{
+    printf("   type: %3" PRIu8 "  code: %3" PRIu8 "\n", hdr->type, hdr->code);
+    printf("   cksum: 0x4%" PRIx16 "\n", byteorder_ntohs(hdr->csum));
+}
+/** @} */