diff --git a/Makefile.defaultmodules b/Makefile.defaultmodules
new file mode 100644
index 0000000000000000000000000000000000000000..fa37f3e5517582e580c39cda3df6bff16a296db2
--- /dev/null
+++ b/Makefile.defaultmodules
@@ -0,0 +1,3 @@
+DEFAULT_MODULE += cpu core sys
+
+DEFAULT_MODULE += auto_init
diff --git a/Makefile.include b/Makefile.include
index 330768004e84635fdb52ecbca710ebefe1c3812d..8977118f46f4bc3bc187973f06235dd4d9055575 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -48,6 +48,11 @@ include $(RIOTBOARD)/$(BOARD)/Makefile.include
 include $(RIOTCPU)/$(CPU)/Makefile.include
 include $(RIOTBASE)/Makefile.dep
 
+# Test if there where dependencies against a module in DISABLE_MODULE.
+ifneq (, $(filter $(DISABLE_MODULE), $(USEMODULE)))
+$(error "Required modules were disabled using DISABLE_MODULE: $(sort $(filter $(DISABLE_MODULE), $(USEMODULE)))")
+endif
+
 # Test if the input language was specified externally.
 # Otherwise test if the compiler unterstands the "-std=gnu99" flag, and use it if so.
 # Otherwise test if the compiler unterstands the "-std=c99" flag, and use it if so.
diff --git a/Makefile.modules b/Makefile.modules
index 0c378806e7e7e8f28f9088e4e58dac0ab8329d86..6013c3b359d092d88f7c2c09e70c3612253b297d 100644
--- a/Makefile.modules
+++ b/Makefile.modules
@@ -1,8 +1,10 @@
 UNDEF += $(BINDIR)startup.o
 
 include $(RIOTBASE)/Makefile.pseudomodules
+include $(RIOTBASE)/Makefile.defaultmodules
+
+USEMODULE += $(filter-out $(DISABLE_MODULE), $(DEFAULT_MODULE))
 
-USEMODULE += cpu core sys
 INCLUDES += -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/sys/include
 ED = $(USEMODULE:%=-DMODULE_%)
 ED += $(USEPKG:%=-DMODULE_%)
diff --git a/examples/ccn-lite-client/Makefile b/examples/ccn-lite-client/Makefile
index 57420b83597a4680572e03100134fabdbce7acf6..9118a91a20ad9e4287c3cf986270c35546222fde 100644
--- a/examples/ccn-lite-client/Makefile
+++ b/examples/ccn-lite-client/Makefile
@@ -34,7 +34,6 @@ USEMODULE += shell
 USEMODULE += shell_commands
 USEMODULE += posix
 USEMODULE += ps
-USEMODULE += auto_init
 USEMODULE += random
 USEMODULE += transceiver
 ifeq ($(BOARD),msba2)
diff --git a/examples/ccn-lite-relay/Makefile b/examples/ccn-lite-relay/Makefile
index b5ad2a02074ce508fa82c809acc5046041b58762..80aa25d0d6bbae8cf47e56ea94101b1ff6854173 100644
--- a/examples/ccn-lite-relay/Makefile
+++ b/examples/ccn-lite-relay/Makefile
@@ -31,9 +31,6 @@ export QUIET ?= 1
 
 USEMODULE += config
 USEMODULE += posix
-USEMODULE += auto_init
-
-USEMODULE += auto_init
 
 USEMODULE += transceiver
 ifeq ($(BOARD),msba2)
diff --git a/examples/default/Makefile b/examples/default/Makefile
index 04f948076ca72acb760ca33df2d14c2de03354aa..b1b135e65c7b3715f7708cf7990c95f8e851a741 100644
--- a/examples/default/Makefile
+++ b/examples/default/Makefile
@@ -34,7 +34,6 @@ USEMODULE += shell
 USEMODULE += shell_commands
 USEMODULE += ps
 USEMODULE += vtimer
-USEMODULE += auto_init
 USEMODULE += defaulttransceiver
 
 ifneq (,$(filter msb-430,$(BOARD)))
diff --git a/examples/rpl_udp/Makefile b/examples/rpl_udp/Makefile
index 0a0d91c5e012dd6028a487d338b11e82601b9889..6ca74b2f9006177c04258c454b6b5712bd49b2bf 100644
--- a/examples/rpl_udp/Makefile
+++ b/examples/rpl_udp/Makefile
@@ -32,7 +32,6 @@ CFLAGS += "-Wno-cpp"
 
 # Modules to include:
 
-USEMODULE += auto_init
 USEMODULE += shell
 USEMODULE += shell_commands
 USEMODULE += posix
diff --git a/tests/test_irq/Makefile b/tests/test_irq/Makefile
index 37536811bd395fc55b22fe13d84218978fb16458..bb56d210534b827bbde5884e5aaf8bb35dd0c758 100644
--- a/tests/test_irq/Makefile
+++ b/tests/test_irq/Makefile
@@ -5,7 +5,6 @@ ifeq (,$(filter native,$(BOARD)))
 	include $(RIOTBASE)/Makefile.unsupported
 else
 
-USEMODULE += auto_init
 USEMODULE += posix
 
 include $(RIOTBASE)/Makefile.include
diff --git a/tests/test_nativenet/Makefile b/tests/test_nativenet/Makefile
index 7813fdda6c27b27cb9c6ce2bc374539304df72a1..730a3608f85bab2d1fd81370fe5863895dc84418 100644
--- a/tests/test_nativenet/Makefile
+++ b/tests/test_nativenet/Makefile
@@ -5,7 +5,6 @@ ifeq (,$(filter native,$(BOARD)))
 include $(RIOTBASE)/Makefile.unsupported
 else
 
-USEMODULE += auto_init
 USEMODULE += nativenet
 USEMODULE += transceiver
 
diff --git a/tests/test_net_if/Makefile b/tests/test_net_if/Makefile
index 073f4b76abba720836e3893e7afe68816dad4962..4e41b8ac75e9622dcd51beb5cf5f2cffe6c153c5 100644
--- a/tests/test_net_if/Makefile
+++ b/tests/test_net_if/Makefile
@@ -8,7 +8,6 @@ ifeq ($(BOARD),stm32f4discovery)
 	include Makefile.$(BOARD)
 endif
 
-USEMODULE += auto_init
 USEMODULE += net_if
 USEMODULE += defaulttransceiver
 
diff --git a/tests/test_pnet/Makefile b/tests/test_pnet/Makefile
index b1c34b788eed96f9a38da6409952fd159b7747af..8ca3400f8151c0bc80a2157178a2506dc9ed1530 100644
--- a/tests/test_pnet/Makefile
+++ b/tests/test_pnet/Makefile
@@ -1,7 +1,6 @@
 export PROJECT = test_pnet
 include ../Makefile.tests_common
 
-USEMODULE += auto_init
 USEMODULE += posix
 USEMODULE += pnet
 USEMODULE += vtimer
diff --git a/tests/test_vtimer_msg/Makefile b/tests/test_vtimer_msg/Makefile
index fa9f98a683c8f829eafa78c3043b21b53454f1db..ba57fc7b9c8f6daf5ce7bba2d642f989c6915b78 100644
--- a/tests/test_vtimer_msg/Makefile
+++ b/tests/test_vtimer_msg/Makefile
@@ -1,7 +1,6 @@
 export PROJECT = test_vtimer_msg
 include ../Makefile.tests_common
 
-USEMODULE += auto_init
 USEMODULE += vtimer
 
 include $(RIOTBASE)/Makefile.include