diff --git a/cpu/samd21/Makefile.include b/cpu/samd21/Makefile.include
index 78ef97db95372019fc12ee4b33a607ab9c3760aa..96226ee5d4cfc067f6f1513888abd99bad533c19 100644
--- a/cpu/samd21/Makefile.include
+++ b/cpu/samd21/Makefile.include
@@ -22,7 +22,7 @@ export UNDEF += $(BINDIR)cpu/syscalls.o
 export UNDEF += $(BINDIR)cpu/startup.o
 
 # export the peripheral drivers to be linked into the final binary
-export USEMODULE += periph
+export USEMODULE += periph hwtimer_compat
 
 # CPU depends on the cortex-m common module, so include it
 include $(CORTEX_COMMON)Makefile.include
diff --git a/cpu/samd21/hwtimer_arch.c b/cpu/samd21/hwtimer_arch.c
deleted file mode 100644
index 28825e51e3b103b7a52cee2d2c313856d159b20b..0000000000000000000000000000000000000000
--- a/cpu/samd21/hwtimer_arch.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2014 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     cpu_samd21
- * @{
- *
- * @file        hwtimer_arch.c
- * @brief       Implementation of the kernels hwtimer interface
- *
- * The hardware timer implementation uses the Cortex build-in system timer as back-end.
- *
- * @author      Thomas Eichinger <thomas.eichinger@fu-berlin.de>
- *
- * @}
- */
-
-#include "arch/hwtimer_arch.h"
-#include "board.h"
-#include "periph/timer.h"
-#include "thread.h"
-
-
-void irq_handler(int channel);
-void (*timeout_handler)(int);
-
-
-void hwtimer_arch_init(void (*handler)(int), uint32_t fcpu)
-{
-    timeout_handler = handler;
-    timer_init(HW_TIMER, 1, &irq_handler);
-}
-
-void hwtimer_arch_enable_interrupt(void)
-{
-    timer_irq_enable(HW_TIMER);
-}
-
-void hwtimer_arch_disable_interrupt(void)
-{
-    timer_irq_disable(HW_TIMER);
-}
-
-void hwtimer_arch_set(unsigned long offset, short timer)
-{
-    timer_set(HW_TIMER, timer, offset);
-}
-
-void hwtimer_arch_set_absolute(unsigned long value, short timer)
-{
-    timer_set_absolute(HW_TIMER, timer, value);
-}
-
-void hwtimer_arch_unset(short timer)
-{
-    timer_clear(HW_TIMER, timer);
-}
-
-unsigned long hwtimer_arch_now(void)
-{
-    return timer_read(HW_TIMER);
-}
-
-void irq_handler(int channel)
-{
-    timeout_handler((short)(channel));
-}