diff --git a/drivers/include/xbee.h b/drivers/include/xbee.h
index 94a863ad0259cf297894593ed9f3efa5757157ee..29ed80f60561440e973a9688d98b4bc4f6e23174 100644
--- a/drivers/include/xbee.h
+++ b/drivers/include/xbee.h
@@ -155,6 +155,18 @@ extern const ng_netdev_driver_t xbee_driver;
 int xbee_init(xbee_t *dev, uart_t uart, uint32_t baudrate,
               gpio_t sleep_pin, gpio_t status_pin);
 
+/**
+ * @brief   auto_init struct holding Xbee device initalization params
+ */
+typedef struct xbee_params {
+    uart_t uart;            /**< UART interfaced the device is connected to */
+    uint32_t baudrate;      /**< baudrate to use */
+    gpio_t sleep_pin;       /**< GPIO pin that is connected to the SLEEP pin
+                                 set to GPIO_NUMOF if not used */
+    gpio_t status_pin;      /**< GPIO pin that is connected to the STATUS pin
+                                 set to GPIO_NUMOF if not used */
+} xbee_params_t;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c
index b1b39b8c41d0d341fa334a018ee7c052700c6ca2..ae046b875a92006c8d4116ffd8553a7c7523245c 100644
--- a/sys/auto_init/auto_init.c
+++ b/sys/auto_init/auto_init.c
@@ -314,4 +314,9 @@ void auto_init(void)
     extern void auto_init_ng_at86rf2xx(void);
     auto_init_ng_at86rf2xx();
 #endif
+
+#ifdef MODULE_XBEE
+    extern void auto_init_xbee(void);
+    auto_init_xbee();
+#endif
 }
diff --git a/sys/auto_init/netif/auto_init_xbee.c b/sys/auto_init/netif/auto_init_xbee.c
new file mode 100644
index 0000000000000000000000000000000000000000..0c8798e2d5ad58c7c90f1971c61a609efc0d1475
--- /dev/null
+++ b/sys/auto_init/netif/auto_init_xbee.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de>
+ *
+ * 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.
+ *
+ */
+
+/**
+ * @ingroup auto_init_ng_netif
+ * @{
+ *
+ * @file
+ * @brief   Auto initialization for XBee network interfaces
+ *
+ * @author  Kaspar Schleiser <kaspar@schleiser.de>
+ */
+
+#ifdef MODULE_XBEE
+
+#include "board.h"
+#include "net/ng_nomac.h"
+#include "net/ng_netbase.h"
+
+#include "xbee.h"
+#include "xbee_params.h"
+
+#define ENABLE_DEBUG (0)
+#include "debug.h"
+
+#define XBEE_NUM (sizeof(xbee_params)/sizeof(xbee_params_t))
+
+static xbee_t xbee_devs[XBEE_NUM];
+
+/**
+ * @brief   Define stack parameters for the MAC layer thread
+ * @{
+ */
+#define XBEE_MAC_STACKSIZE           (KERNEL_CONF_STACKSIZE_DEFAULT)
+#define XBEE_MAC_PRIO                (PRIORITY_MAIN - 3)
+
+/**
+ * @brief   Stacks for the MAC layer threads
+ */
+static char _nomac_stacks[XBEE_MAC_STACKSIZE][XBEE_NUM];
+
+void auto_init_xbee(void)
+{
+    for (int i = 0; i < XBEE_NUM; i++) {
+        DEBUG("Initializing XBee radio at UART_%i\n", i);
+        const xbee_params_t *p = &xbee_params[i];
+        int res = xbee_init(&xbee_devs[i],
+                p->uart,
+                p->baudrate,
+                p->sleep_pin,
+                p->status_pin);
+
+        if (res < 0) {
+            DEBUG("Error initializing XBee radio device!");
+        }
+        else {
+            ng_nomac_init(_nomac_stacks[i],
+                    XBEE_MAC_STACKSIZE, XBEE_MAC_PRIO, "xbee",
+                    (ng_netdev_t *)&xbee_devs[i]);
+        }
+    }
+}
+
+#endif /* MODULE_XBEE */
+/** @} */
diff --git a/tests/driver_xbee/Makefile b/tests/driver_xbee/Makefile
index 936c490161730f9ad6a489363e1b2c4d8934f8af..14c32603d7a84b45d13e7ad6221128571d12b382 100644
--- a/tests/driver_xbee/Makefile
+++ b/tests/driver_xbee/Makefile
@@ -18,6 +18,7 @@ endif
 
 USEMODULE += xbee
 USEMODULE += ng_netif
+USEMODULE += auto_init_ng_netif
 USEMODULE += ng_nomac
 USEMODULE += ng_pktdump
 USEMODULE += shell
@@ -30,4 +31,9 @@ else
   CFLAGS += -DXBEE_UART=UART_0
 endif
 
+# add current directory to the include path. Putting it in CFLAGS will make
+# it go to the beginning, before the standard includes.
+# That way xbee_params.h get's included and auto configuration can pick it up.
+CFLAGS += -I$(CURDIR)
+
 include $(RIOTBASE)/Makefile.include
diff --git a/tests/driver_xbee/auto_init_ng_netif/Makefile b/tests/driver_xbee/auto_init_ng_netif/Makefile
deleted file mode 100644
index 48422e909a47d7cd428d10fa73825060ccc8d8c2..0000000000000000000000000000000000000000
--- a/tests/driver_xbee/auto_init_ng_netif/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-include $(RIOTBASE)/Makefile.base
diff --git a/tests/driver_xbee/auto_init_ng_netif/netif_app.c b/tests/driver_xbee/auto_init_ng_netif/netif_app.c
deleted file mode 100644
index c78bccc2173864bdfc8a898cf5064e0e2725e7b6..0000000000000000000000000000000000000000
--- a/tests/driver_xbee/auto_init_ng_netif/netif_app.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2015 Freie Universität Berlin
- *
- * 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.
- */
-
-/**
- * @ingroup     tests
- * @{
- *
- * @file
- * @brief       Xbee device initialization
- *
- * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
- *
- * @}
- */
-
-#include <stdio.h>
-
-#include "kernel.h"
-#include "xbee.h"
-#include "net/ng_nomac.h"
-#include "net/ng_netbase.h"
-
-/* make sure an UART to device is defined in the Makefile */
-#ifndef XBEE_UART
-#error "XBEE_UART not defined"
-#endif
-
-/**
- * @brief   This is the default baudrate the Xbee modules are programmed to
- *          when you buy them
- */
-#define XBEE_BAUDRATE           (9600U)
-
-/**
- * @brief   MAC layer stack configuration
- * @{
- */
-#define STACKSIZE               (KERNEL_CONF_STACKSIZE_DEFAULT)
-#define PRIO                    (0)
-/** @} */
-
-/**
- * @brief   The Xbee device descriptor
- */
-static xbee_t dev;
-
-/**
- * @brief   Stack for the nomac thread
- */
-static char nomac_stack[STACKSIZE];
-
-
-void auto_init_ng_netif(void)
-{
-    int res;
-    kernel_pid_t iface;
-
-    /* setup Xbee device */
-    printf("Initializing the Xbee S1 device UART_%i... \n", XBEE_UART);
-    res = xbee_init(&dev, XBEE_UART, XBEE_BAUDRATE, GPIO_NUMOF, GPIO_NUMOF);
-    if (res < 0) {
-        puts("Error initializing xbee device driver");
-        return;
-    }
-    /* start MAC layer */
-    iface = ng_nomac_init(nomac_stack, sizeof(nomac_stack), PRIO, "xbee",
-                          (ng_netdev_t *)(&dev));
-    if (iface <= KERNEL_PID_UNDEF) {
-        puts("Error initializing MAC layer");
-        return;
-    }
-}
diff --git a/tests/driver_xbee/xbee_params.h b/tests/driver_xbee/xbee_params.h
new file mode 100644
index 0000000000000000000000000000000000000000..01c03d135b7e489f3cd2ca70760a867ad35a1e9a
--- /dev/null
+++ b/tests/driver_xbee/xbee_params.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de>
+ *
+ * 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.
+ */
+
+/**
+ * @ingroup tests
+ * @{
+ *
+ * @file
+ * @brief   xbee driver parameters example, used by auto_init_ng_netif
+ *
+ * @author  Kaspar Schleiser <kaspar@schleiser.de>
+ */
+
+#ifndef XBEE_PARAMS_H
+#define XBEE_PARAMS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static xbee_params_t xbee_params[] = {
+    { .uart = XBEE_UART,
+      .baudrate = 9600U,
+      .sleep_pin = GPIO_NUMOF,
+      .status_pin = GPIO_NUMOF
+    },
+};
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* XBEE_PARAMS_H */
+/** @} */