diff --git a/boards/sodaq-one/Makefile b/boards/sodaq-one/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f8fcbb53a06595771dae356338a7bf2c0673734d
--- /dev/null
+++ b/boards/sodaq-one/Makefile
@@ -0,0 +1,3 @@
+MODULE = board
+
+include $(RIOTBASE)/Makefile.base
diff --git a/boards/sodaq-one/Makefile.dep b/boards/sodaq-one/Makefile.dep
new file mode 100644
index 0000000000000000000000000000000000000000..5472bf8b8d8fd463a18815c0f10e5d348f90fe51
--- /dev/null
+++ b/boards/sodaq-one/Makefile.dep
@@ -0,0 +1,3 @@
+ifneq (,$(filter saul_default,$(USEMODULE)))
+  USEMODULE += saul_gpio
+endif
diff --git a/boards/sodaq-one/Makefile.features b/boards/sodaq-one/Makefile.features
new file mode 100644
index 0000000000000000000000000000000000000000..62ad960d64f7209cd5ca4fe8505e6554407f2373
--- /dev/null
+++ b/boards/sodaq-one/Makefile.features
@@ -0,0 +1,14 @@
+# Put defined MCU peripherals here (in alphabetical order)
+FEATURES_PROVIDED += periph_adc
+FEATURES_PROVIDED += periph_gpio
+FEATURES_PROVIDED += periph_i2c
+FEATURES_PROVIDED += periph_rtc
+FEATURES_PROVIDED += periph_rtt
+FEATURES_PROVIDED += periph_spi
+FEATURES_PROVIDED += periph_timer
+FEATURES_PROVIDED += periph_uart
+
+# The board MPU family (used for grouping by the CI system)
+FEATURES_MCU_GROUP = cortex_m0_2
+
+-include $(RIOTCPU)/samd21/Makefile.features
diff --git a/boards/sodaq-one/Makefile.include b/boards/sodaq-one/Makefile.include
new file mode 100644
index 0000000000000000000000000000000000000000..95366d62a2b1adb3b647d8f0abd7614b98a6702b
--- /dev/null
+++ b/boards/sodaq-one/Makefile.include
@@ -0,0 +1,19 @@
+# define the cpu used by the SODAQ ONE board
+export CPU = samd21
+export CPU_MODEL = samd21g18a
+
+#export needed for flash rule
+export PORT_LINUX ?= /dev/ttyACM0
+export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
+
+# setup serial terminal
+include $(RIOTMAKE)/tools/serial.inc.mk
+
+# setup the flash tool used
+# we use BOSSA to flash this board since there's an Arduino bootloader
+# preflashed on it. ROM_OFFSET skips the space taken by such bootloader.
+ROM_OFFSET ?= 0x2000
+include $(RIOTMAKE)/tools/bossa.inc.mk
+
+# setup the boards dependencies
+include $(RIOTBOARD)/$(BOARD)/Makefile.dep
diff --git a/boards/sodaq-one/board.c b/boards/sodaq-one/board.c
new file mode 100644
index 0000000000000000000000000000000000000000..15c39bf2148227d94d28f7f46f6071345c7220d2
--- /dev/null
+++ b/boards/sodaq-one/board.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Kees Bakker, SODAQ
+ *
+ * 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     boards_sodaq-one
+ * @{
+ *
+ * @file
+ * @brief       Board common implementations for the SODAQ ONE board
+ *
+ * @author      Kees Bakker <kees@sodaq.com>
+ * @}
+ */
+
+#include "cpu.h"
+#include "board.h"
+#include "periph/gpio.h"
+
+void board_init(void)
+{
+    /* initialize the on-board LEDs, switch them off to start with */
+    LED0_OFF;
+    gpio_init(LED0_PIN, GPIO_OUT);
+    LED1_OFF;
+    gpio_init(LED1_PIN, GPIO_OUT);
+    LED2_OFF;
+    gpio_init(LED2_PIN, GPIO_OUT);
+
+    /* reset RN2483 (LoRa) */
+    LORA_RESET_OFF;
+    gpio_init(LORA_RESET_PIN, GPIO_OUT);
+
+    GPS_ENABLE_OFF;
+    gpio_init(GPS_ENABLE_PIN, GPIO_OUT);
+
+    /* initialize the CPU */
+    cpu_init();
+}
diff --git a/boards/sodaq-one/doc.txt b/boards/sodaq-one/doc.txt
new file mode 100644
index 0000000000000000000000000000000000000000..43a4eb037583a883faa4b5d7fec066c296134d80
--- /dev/null
+++ b/boards/sodaq-one/doc.txt
@@ -0,0 +1,29 @@
+/**
+ * @defgroup    boards_sodaq-one SODAQ ONE
+ * @ingroup     boards
+ * @brief       Support for the SODAQ ONE board
+ *
+ * ### General information
+ *
+ * General information about this board can be found on the
+ * [SODAQ support](http://support.sodaq.com/sodaq-one/sodaq-one/) website.
+ *
+ * ### Flash the board
+ *
+ * 1. Put the board in bootloader mode by double tapping the reset button.<br/>
+ *    When the board is in bootloader mode, the user led (blue) oscillates
+ *    smoothly.
+ *
+ *
+ * 2. Use `BOARD=sodaq-one` with the `make` command.<br/>
+ *    Example with `hello-world` application:
+ * ```
+ *      make BOARD=sodaq-one -C examples/hello-world flash
+ * ```
+ *
+ * ### Accessing STDIO via UART
+ *
+ * To access the STDIO of RIOT, a FTDI to USB converter needs to be plugged to
+ * the RX/TX pins on the board.
+ *
+ */
diff --git a/boards/sodaq-one/include/board.h b/boards/sodaq-one/include/board.h
new file mode 100644
index 0000000000000000000000000000000000000000..175b55dc75eca757283d081c340802f175829c6f
--- /dev/null
+++ b/boards/sodaq-one/include/board.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2017 Kees Bakker, SODAQ
+ *
+ * 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     boards_sodaq-one
+ * @{
+ *
+ * @file
+ * @brief       Board specific definitions for the SODAQ ONE board
+ *
+ * @author      Kees Bakker <kees@sodaq.com>
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
+
+#include "cpu.h"
+#include "periph_conf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name    xtimer configuration
+ * @{
+ */
+#define XTIMER_WIDTH        (16)
+/** @} */
+
+/**
+ * @name    LED pin definitions and handlers
+ * @{
+ */
+#define LED0_PIN            GPIO_PIN(PA, 15)
+
+#define LED0_PORT           PORT->Group[PA]
+#define LED0_MASK           (1 << 15)
+
+#define LED0_OFF            (LED0_PORT.OUTSET.reg = LED0_MASK)
+#define LED0_ON             (LED0_PORT.OUTCLR.reg = LED0_MASK)
+#define LED0_TOGGLE         (LED0_PORT.OUTTGL.reg = LED0_MASK)
+
+#define LED1_PIN            GPIO_PIN(PB, 10)
+
+#define LED1_PORT           PORT->Group[PB]
+#define LED1_MASK           (1 << 10)
+
+#define LED1_OFF            (LED1_PORT.OUTSET.reg = LED1_MASK)
+#define LED1_ON             (LED1_PORT.OUTCLR.reg = LED1_MASK)
+#define LED1_TOGGLE         (LED1_PORT.OUTTGL.reg = LED1_MASK)
+
+#define LED2_PIN            GPIO_PIN(PB, 11)
+
+#define LED2_PORT           PORT->Group[PB]
+#define LED2_MASK           (1 << 11)
+
+#define LED2_OFF            (LED2_PORT.OUTSET.reg = LED2_MASK)
+#define LED2_ON             (LED2_PORT.OUTCLR.reg = LED2_MASK)
+#define LED2_TOGGLE         (LED2_PORT.OUTTGL.reg = LED2_MASK)
+/** @} */
+
+/**
+ * @name    User button
+ */
+#define BTN0_PIN            GPIO_PIN(PA, 16)
+#define BTN0_MODE           GPIO_IN
+/** @} */
+
+/**
+ * @name    GPS Time Pulse
+ */
+#define GPS_TIMEPULSE_PIN   GPIO_PIN(PA, 14)
+#define GPS_TIMEPULSE_MODE  GPIO_IN
+/** @} */
+
+/**
+ * @name    GPS Enable
+ * @{
+ */
+#define GPS_ENABLE_PIN      GPIO_PIN(PA, 18)
+
+#define GPS_ENABLE_PORT     PORT->Group[PA]
+#define GPS_ENABLE_MASK     (1 << 18)
+
+#define GPS_ENABLE_ON       (GPS_ENABLE_PORT.OUTSET.reg = GPS_ENABLE_MASK)
+#define GPS_ENABLE_OFF      (GPS_ENABLE_PORT.OUTCLR.reg = GPS_ENABLE_MASK)
+/** @} */
+
+/**
+ * @name    LORA Reset
+ * @{
+ */
+#define LORA_RESET_PIN      GPIO_PIN(PA, 4)
+
+#define LORA_RESET_PORT     PORT->Group[PA]
+#define LORA_RESET_MASK     (1 << 4)
+
+#define LORA_RESET_OFF      (LORA_RESET_PORT.OUTSET.reg = LORA_RESET_MASK)
+#define LORA_RESET_ON       (LORA_RESET_PORT.OUTCLR.reg = LORA_RESET_MASK)
+#define LORA_RESET_TOGGLE   (LORA_RESET_PORT.OUTTGL.reg = LORA_RESET_MASK)
+/** @} */
+
+/**
+ * @brief Initialize board specific hardware, including clock, LEDs and std-IO
+ */
+void board_init(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BOARD_H */
+/** @} */
diff --git a/boards/sodaq-one/include/gpio_params.h b/boards/sodaq-one/include/gpio_params.h
new file mode 100644
index 0000000000000000000000000000000000000000..e742b0d66bd02fae677d4106b88824770030a043
--- /dev/null
+++ b/boards/sodaq-one/include/gpio_params.h
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 Kees Bakker, SODAQ
+ *
+ * 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     boards_sodaq-one
+ * @{
+ *
+ * @file
+ * @brief       Board specific configuration of direct mapped GPIOs
+ *
+ * @author      Kees Bakker <kees@sodaq.com>
+ */
+
+#ifndef GPIO_PARAMS_H
+#define GPIO_PARAMS_H
+
+#include "board.h"
+#include "saul/periph.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @brief    GPIO pin configuration
+ */
+static const  saul_gpio_params_t saul_gpio_params[] =
+{
+    {
+        .name = "LED Red",
+        .pin = LED0_PIN,
+        .mode = GPIO_OUT
+    },
+    {
+        .name = "LED Green",
+        .pin = LED1_PIN,
+        .mode = GPIO_OUT
+    },
+    {
+        .name = "LED Blue",
+        .pin = LED2_PIN,
+        .mode = GPIO_OUT
+    },
+    {
+        .name = "Button",
+        .pin  = BTN0_PIN,
+        .mode = BTN0_MODE,
+        .flags = SAUL_GPIO_INVERTED
+    },
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* GPIO_PARAMS_H */
+/** @} */
diff --git a/boards/sodaq-one/include/periph_conf.h b/boards/sodaq-one/include/periph_conf.h
new file mode 100644
index 0000000000000000000000000000000000000000..5c4cc4c78a8130fb299d23e4849cfc520f48797d
--- /dev/null
+++ b/boards/sodaq-one/include/periph_conf.h
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2017 Kees Bakker, SODAQ
+ *
+ * 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     boards_sodaq-one
+ * @{
+ *
+ * @file
+ * @brief       Configuration of CPU peripherals for the SODAQ ONE board
+ *
+ * @author      Kees Bakker <kees@sodaq.com>
+ */
+
+#ifndef PERIPH_CONF_H
+#define PERIPH_CONF_H
+
+#include <stdint.h>
+
+#include "cpu.h"
+#include "periph_cpu.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @name    External oscillator and clock configuration
+ *
+ * For selection of the used CORECLOCK, we have implemented two choices:
+ *
+ * - usage of the PLL fed by the internal 8MHz oscillator divided by 8
+ * - usage of the internal 8MHz oscillator directly, divided by N if needed
+ *
+ *
+ * The PLL option allows for the usage of a wider frequency range and a more
+ * stable clock with less jitter. This is why we use this option as default.
+ *
+ * The target frequency is computed from the PLL multiplier and the PLL divisor.
+ * Use the following formula to compute your values:
+ *
+ * CORECLOCK = ((PLL_MUL + 1) * 1MHz) / PLL_DIV
+ *
+ * NOTE: The PLL circuit does not run with less than 32MHz while the maximum PLL
+ *       frequency is 96MHz. So PLL_MULL must be between 31 and 95!
+ *
+ *
+ * The internal Oscillator used directly can lead to a slightly better power
+ * efficiency to the cost of a less stable clock. Use this option when you know
+ * what you are doing! The actual core frequency is adjusted as follows:
+ *
+ * CORECLOCK = 8MHz / DIV
+ *
+ * NOTE: A core clock frequency below 1MHz is not recommended
+ *
+ * @{
+ */
+#define CLOCK_USE_PLL       (1)
+
+#if CLOCK_USE_PLL
+/* edit these values to adjust the PLL output frequency */
+#define CLOCK_PLL_MUL       (47U)               /* must be >= 31 & <= 95 */
+#define CLOCK_PLL_DIV       (1U)                /* adjust to your needs */
+/* generate the actual used core clock frequency */
+#define CLOCK_CORECLOCK     (((CLOCK_PLL_MUL + 1) * 1000000U) / CLOCK_PLL_DIV)
+#else
+/* edit this value to your needs */
+#define CLOCK_DIV           (1U)
+/* generate the actual core clock frequency */
+#define CLOCK_CORECLOCK     (8000000 / CLOCK_DIV)
+#endif
+/** @} */
+
+/**
+ * @name Timer peripheral configuration
+ * @{
+ */
+#define TIMER_NUMOF         (2U)
+#define TIMER_0_EN          1
+#define TIMER_1_EN          1
+
+/* Timer 0 configuration */
+#define TIMER_0_DEV         TC3->COUNT16
+#define TIMER_0_CHANNELS    2
+#define TIMER_0_MAX_VALUE   (0xffff)
+#define TIMER_0_ISR         isr_tc3
+
+/* Timer 1 configuration */
+#define TIMER_1_DEV         TC4->COUNT32
+#define TIMER_1_CHANNELS    2
+#define TIMER_1_MAX_VALUE   (0xffffffff)
+#define TIMER_1_ISR         isr_tc4
+/** @} */
+
+/**
+ * @name UART configuration
+ * @{
+ * See Table 6.1 of the SAM D21 Datasheet
+ */
+static const uart_conf_t uart_config[] = {
+    {
+        .dev      = &SERCOM5->USART,
+        .rx_pin   = GPIO_PIN(PB,3),  /* D0, RX Pin */
+        .tx_pin   = GPIO_PIN(PB,2),  /* D1, TX Pin */
+        .mux      = GPIO_MUX_D,
+        .rx_pad   = UART_PAD_RX_1,
+        .tx_pad   = UART_PAD_TX_0,
+        .flags    = UART_FLAG_NONE,
+        .gclk_src = GCLK_CLKCTRL_GEN_GCLK0
+    },
+    {
+        .dev      = &SERCOM2->USART,
+        .rx_pin   = GPIO_PIN(PA,13),
+        .tx_pin   = GPIO_PIN(PA,12),
+        .mux      = GPIO_MUX_C,
+        .rx_pad   = UART_PAD_RX_1,
+        .tx_pad   = UART_PAD_TX_0,
+        .flags    = UART_FLAG_NONE,
+        .gclk_src = GCLK_CLKCTRL_GEN_GCLK0
+    },
+};
+
+/* interrupt function name mapping */
+#define UART_0_ISR          isr_sercom5
+#define UART_1_ISR          isr_sercom2
+
+#define UART_NUMOF          (sizeof(uart_config) / sizeof(uart_config[0]))
+/** @} */
+
+/**
+ * @name ADC configuration
+ * @{
+ */
+#define ADC_0_EN                           1
+#define ADC_MAX_CHANNELS                   17
+/* ADC 0 device configuration */
+#define ADC_0_DEV                          ADC
+#define ADC_0_IRQ                          ADC_IRQn
+
+/* ADC 0 Default values */
+#define ADC_0_CLK_SOURCE                   0 /* GCLK_GENERATOR_0 */
+#define ADC_0_PRESCALER                    ADC_CTRLB_PRESCALER_DIV512
+
+#define ADC_0_NEG_INPUT                    ADC_INPUTCTRL_MUXNEG_GND
+#define ADC_0_GAIN_FACTOR_DEFAULT          ADC_INPUTCTRL_GAIN_1X
+#define ADC_0_REF_DEFAULT                  ADC_REFCTRL_REFSEL_INT1V
+
+static const adc_conf_chan_t adc_channels[] = {
+    /* port, pin, muxpos */
+    {GPIO_PIN(PA, 2), ADC_INPUTCTRL_MUXPOS_PIN0},     /* A0 */
+    {GPIO_PIN(PA, 3), ADC_INPUTCTRL_MUXPOS_PIN1},     /* A1 */
+    {GPIO_PIN(PB, 8), ADC_INPUTCTRL_MUXPOS_PIN2},     /* A2 */
+    {GPIO_PIN(PB, 9), ADC_INPUTCTRL_MUXPOS_PIN3},     /* A3 */
+    {GPIO_PIN(PA, 6), ADC_INPUTCTRL_MUXPOS_PIN6},     /* A4 */
+    {GPIO_PIN(PA, 7), ADC_INPUTCTRL_MUXPOS_PIN7},     /* A5 */
+    {GPIO_PIN(PA, 8), ADC_INPUTCTRL_MUXPOS_PIN16},    /* A6 */
+    {GPIO_PIN(PA, 9), ADC_INPUTCTRL_MUXPOS_PIN17},    /* A7 */
+    {GPIO_PIN(PA,10), ADC_INPUTCTRL_MUXPOS_PIN18},    /* A8 */
+    {GPIO_PIN(PA,11), ADC_INPUTCTRL_MUXPOS_PIN19},    /* A9 */
+    {GPIO_PIN(PB, 2), ADC_INPUTCTRL_MUXPOS_PIN10},    /* A10 */
+    {GPIO_PIN(PB, 3), ADC_INPUTCTRL_MUXPOS_PIN11},    /* A11 */
+
+    {GPIO_PIN(PA, 2), ADC_INPUTCTRL_MUXPOS_PIN0},     /* DAC/VOUT */
+    {GPIO_PIN(PA, 3), ADC_INPUTCTRL_MUXPOS_PIN1},     /* AREF */
+    {GPIO_PIN(PA, 5), ADC_INPUTCTRL_MUXPOS_PIN5},     /* BAT_VOLT */
+};
+
+#define ADC_0_CHANNELS                     (12)
+#define ADC_NUMOF                          ADC_0_CHANNELS
+/** @} */
+
+/**
+ * @name SPI configuration
+ * @{
+ */
+static const spi_conf_t spi_config[] = {
+    {
+        .dev      = &SERCOM0->SPI,
+        .miso_pin = GPIO_PIN(PA, 8),
+        .mosi_pin = GPIO_PIN(PA, 10),
+        .clk_pin  = GPIO_PIN(PA, 11),
+        .miso_mux = GPIO_MUX_C,
+        .mosi_mux = GPIO_MUX_C,
+        .clk_mux  = GPIO_MUX_C,
+        .miso_pad = SPI_PAD_MISO_0,
+        .mosi_pad = SPI_PAD_MOSI_2_SCK_3
+    }
+};
+
+#define SPI_NUMOF           (sizeof(spi_config) / sizeof(spi_config[0]))
+/** @} */
+
+/**
+ * @name I2C configuration
+ * @{
+ */
+static const i2c_conf_t i2c_config[] = {
+    {
+        .dev      = &(SERCOM3->I2CM),
+        .speed    = I2C_SPEED_NORMAL,
+        .scl_pin  = GPIO_PIN(PA, 23),
+        .sda_pin  = GPIO_PIN(PA, 22),
+        .mux      = GPIO_MUX_C,
+        .gclk_src = GCLK_CLKCTRL_GEN_GCLK0,
+        .flags    = I2C_FLAG_NONE
+    }
+};
+#define I2C_NUMOF          (sizeof(i2c_config) / sizeof(i2c_config[0]))
+
+/** @} */
+
+/**
+ * @name RTC configuration
+ * @{
+ */
+#define RTC_NUMOF           (1U)
+#define RTC_DEV             RTC->MODE2
+/** @} */
+
+/**
+ * @name RTT configuration
+ * @{
+ */
+#define RTT_NUMOF           (1U)
+#define RTT_DEV             RTC->MODE0
+#define RTT_IRQ             RTC_IRQn
+#define RTT_IRQ_PRIO        10
+#define RTT_ISR             isr_rtc
+#define RTT_MAX_VALUE       (0xffffffff)
+#define RTT_FREQUENCY       (32768U)    /* in Hz. For changes see `rtt.c` */
+#define RTT_RUNSTDBY        (1)         /* Keep RTT running in sleep states */
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PERIPH_CONF_H */
+/** @} */
diff --git a/examples/lua_REPL/Makefile b/examples/lua_REPL/Makefile
index 39ba81f50c434c46ff58acabe77427ea275a61aa..cacf10fbcc06eb0d784cdb48a57955a960c51868 100644
--- a/examples/lua_REPL/Makefile
+++ b/examples/lua_REPL/Makefile
@@ -22,7 +22,7 @@ BOARD_INSUFFICIENT_MEMORY := bluepill calliope-mini cc2650-launchpad \
                              remote-pa remote-reva remote-revb samd21-xpro \
                              saml21-xpro samr21-xpro seeeduino_arch-pro \
                              slstk3401a sltb001a slwstk6220a sodaq-autonomo \
-                             sodaq-explorer  stk3600  stm32f3discovery \
+                             sodaq-explorer sodaq-one stk3600  stm32f3discovery \
                              yunjia-nrf51822
 
 BOARD_BLACKLIST := arduino-duemilanove arduino-mega2560 arduino-uno \
diff --git a/tests/unittests/Makefile b/tests/unittests/Makefile
index f4a6a9f4a530364d03980960a8f2dda3ba55235d..0ca0d3457e19ebdc62542a4356d72d4f65f9da25 100644
--- a/tests/unittests/Makefile
+++ b/tests/unittests/Makefile
@@ -63,6 +63,7 @@ BOARD_INSUFFICIENT_MEMORY := airfy-beacon \
                              slwstk6220a \
                              sodaq-autonomo \
                              sodaq-explorer \
+                             sodaq-one \
                              spark-core \
                              stk3600 \
                              stm32f0discovery \
@@ -172,6 +173,7 @@ ARM_CORTEX_M_BOARDS := airfy-beacon \
                        slwstk6220a \
                        sodaq-autonomo \
                        sodaq-explorer \
+                       sodaq-one \
                        spark-core \
                        stk3600 \
                        stk3700 \