diff --git a/cpu/lm4f120/include/periph_cpu.h b/cpu/lm4f120/include/periph_cpu.h
index d0fc213cafb5165219713ea443b89d70b0cfdc7d..dc365bf078572aee48248f342a63e211b6892f40 100644
--- a/cpu/lm4f120/include/periph_cpu.h
+++ b/cpu/lm4f120/include/periph_cpu.h
@@ -19,6 +19,8 @@
 #ifndef PERIPH_CPU_H_
 #define PERIPH_CPU_H_
 
+#include "periph/dev_enums.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/cpu/lpc1768/include/periph_cpu.h b/cpu/lpc1768/include/periph_cpu.h
index 30009438fd18c68147b0e8f1996f37c462556d39..050421431613c730a534a6456665a3c3a89840f0 100644
--- a/cpu/lpc1768/include/periph_cpu.h
+++ b/cpu/lpc1768/include/periph_cpu.h
@@ -19,6 +19,8 @@
 #ifndef PERIPH_CPU_H_
 #define PERIPH_CPU_H_
 
+#include "periph/dev_enums.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/drivers/include/periph/dev_enums.h b/drivers/include/periph/dev_enums.h
index 95920e869cdbd2842b26485aab7a4094988a58b3..e62135d9ac86b43718866a7d66de6a52c52d0f15 100644
--- a/drivers/include/periph/dev_enums.h
+++ b/drivers/include/periph/dev_enums.h
@@ -29,6 +29,25 @@
 extern "C" {
 #endif
 
+/**
+ * @brief   Legacy definition of timers
+ */
+enum {
+#if TIMER_0_EN
+    TIMER_0,                /**< 1st timer */
+#endif
+#if TIMER_1_EN
+    TIMER_1,                /**< 2nd timer */
+#endif
+#if TIMER_2_EN
+    TIMER_2,                /**< 3rd timer */
+#endif
+#if TIMER_3_EN
+    TIMER_3,                /**< 4th timer */
+#endif
+    TIMER_UNDEFINED,        /**< deprecated legacy undefined values */
+};
+
 /**
  * @brief   Legacy definition of GPIO pins.
  */
diff --git a/drivers/include/periph/timer.h b/drivers/include/periph/timer.h
index 1f510401662a97063415c86d33fb30396300ec1f..7965e0f84699c0da73a8197ad785c04bf1adfaf4 100644
--- a/drivers/include/periph/timer.h
+++ b/drivers/include/periph/timer.h
@@ -1,9 +1,9 @@
 /*
- * Copyright (C) 2014 Freie Universität Berlin
+ * Copyright (C) 2014-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.
+ * 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.
  */
 
 /**
@@ -18,75 +18,101 @@
  * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
  */
 
-#ifndef TIMER_H
-#define TIMER_H
+#ifndef PERIPH_TIMER_H
+#define PERIPH_TIMER_H
 
-#include "periph_conf.h"
+#include "periph_cpu.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 /**
- * @brief Definition of available timers
+ * @brief   Default timer definition macro
  *
- * Each timer is based on a hardware timer, which can further have 1 or more channels.
- * To this point 4 timers are possible, might need to be expanded for some cases.
+ * Overwrite this in your CPUs periph_cpu.h file if needed
  */
-typedef enum {
-#if TIMER_0_EN
-    TIMER_0 = 0,            /**< 1st timer */
+#ifndef TIMER_DEV
+#define TIMER_DEV(x)        (x)
 #endif
-#if TIMER_1_EN
-    TIMER_1,                /**< 2nd timer */
+/** @} */
+
+/**
+ * @brief   Default value for timer not defined
+ */
+#ifndef TIMER_UNDEF
+#define TIMER_UNDEF         (-1)
 #endif
-#if TIMER_2_EN
-    TIMER_2,                /**< 3rd timer */
+
+/**
+ * @brief   Default timer type
+ *
+ * We chose the name of tim_t here to avoid naming clashes with other libraries
+ * and vendor device header.
+ */
+#ifndef HAVE_TIMER_T
+typedef unsigned int tim_t;
 #endif
-#if TIMER_3_EN
-    TIMER_3,                /**< 4th timer */
+
+/**
+ * @brief   Default interrupt context entry holding callback and argument
+ * @{
+ */
+#ifndef HAVE_TIMER_ISR_CTX_T
+typedef struct {
+    void (*cb)(int);        /**< callback executed from timer interrupt */
+    void *arg;              /**< optional argument given to that callback */
+} timer_isr_ctx_t;
 #endif
-    TIMER_UNDEFINED         /**< fall-back if no timer is defined */
-} tim_t; /* named tim instead of timer to avoid conflicts with vendor libraries */
+/** @} */
 
 /**
  * @brief Initialize the given timer
  *
- * Each timer device is running with the given speed. Each can contain one or more channels
- * as defined in periph_conf.h. The timer is configured in up-counting mode and will count
- * until TIMER_x_MAX_VALUE as defined in used board's periph_conf.h until overflowing.
+ * Each timer device is running with the given speed. Each can contain one or
+ * more channels as defined in periph_conf.h. The timer is configured in
+ * up-counting mode and will count until TIMER_x_MAX_VALUE as defined in used
+ * board's periph_conf.h until overflowing.
  *
- * The timer will be started automatically after initialization with interrupts enabled.
+ * The timer will be started automatically after initialization with interrupts
+ * enabled.
  *
  * @param[in] dev           the timer to initialize
  * @param[in] us_per_tick   number of us passed for one timer tick
- * @param[in] callback      this callback is called in interrupt context, the emitting channel is
- *                          passed as argument
+ * @param[in] callback      this callback is called in interrupt context, the
+ *                          emitting channel is passed as argument
  *
- * @return                  returns 0 on success, -1 if speed not applicable of unknown device given
+ * @return                  0 on success
+ * @return                  -1 if speed not applicable or unknown device given
  */
 int timer_init(tim_t dev, unsigned int us_per_tick, void (*callback)(int));
 
 /**
- * @brief Set a given timer channel for the given timer device. The callback given during
- * initialization is called when timeout ticks have passed after calling this function
+ * @brief Set a given timer channel for the given timer device
+ *
+ * The callback given during initialization is called when timeout ticks have
+ * passed after calling this function
  *
  * @param[in] dev           the timer device to set
  * @param[in] channel       the channel to set
- * @param[in] timeout       timeout in ticks after that the registered callback is executed
+ * @param[in] timeout       timeout in ticks after that the registered callback
+ *                          is executed
  *
- * @return                  1 on success, -1 on error
+ * @return                  1 on success
+ * @return                  -1 on error
  */
 int timer_set(tim_t dev, int channel, unsigned int timeout);
 
 /**
- * @brief Set an absolute timeout value for the given channel of the given timer device
+ * @brief Set an absolute timeout value for the given channel of the given timer
  *
  * @param[in] dev           the timer device to set
  * @param[in] channel       the channel to set
- * @param[in] value         the absolute compare value when the callback will be triggered
+ * @param[in] value         the absolute compare value when the callback will be
+ *                          triggered
  *
- * @return                  1 on success, -1 on error
+ * @return                  1 on success
+ * @return                  -1 on error
  */
 int timer_set_absolute(tim_t dev, int channel, unsigned int value);
 
@@ -96,7 +122,8 @@ int timer_set_absolute(tim_t dev, int channel, unsigned int value);
  * @param[in] dev           the timer device to clear
  * @param[in] channel       the channel on the given device to clear
  *
- * @return                  1 on success, -1 on error
+ * @return                  1 on success
+ * @return                  -1 on error
  */
 int timer_clear(tim_t dev, int channel);
 
@@ -110,14 +137,18 @@ int timer_clear(tim_t dev, int channel);
 unsigned int timer_read(tim_t dev);
 
 /**
- * @brief Start the given timer. This function is only needed if the timer was stopped manually before
+ * @brief Start the given timer
+ *
+ * This function is only needed if the timer was stopped manually before.
  *
  * @param[in] dev           the timer device to stop
  */
 void timer_start(tim_t dev);
 
 /**
- * @brief Stop the given timer - this will effect all of the timer's channels
+ * @brief Stop the given timer
+ *
+ * This will effect all of the timer's channels.
  *
  * @param[in] dev           the timer to stop
  */
@@ -140,8 +171,9 @@ void timer_irq_disable(tim_t dev);
 /**
  * @brief Reset the up-counting value to zero for the given timer
  *
- * Note that this function effects all currently set channels and it can lead to non-deterministic timeouts
- * if any channel is active when this function is called.
+ * Note that this function effects all currently set channels and it can lead to
+ * non-deterministic timeouts if any channel is active when this function is
+ * called.
  *
  * @param[in] dev           the timer to reset
  */
@@ -151,5 +183,5 @@ void timer_reset(tim_t dev);
 }
 #endif
 
-#endif /* TIMER_H */
+#endif /* PERIPH_TIMER_H */
 /** @} */