diff --git a/Makefile.modules b/Makefile.modules
index a61df5f6bcaef65aa3857ff4b21e5fb5b1f8301c..fa326974881f4d06d938891c5e7e5aa29f3cd8e7 100644
--- a/Makefile.modules
+++ b/Makefile.modules
@@ -1,17 +1,15 @@
 export MAKEBASE =$(RIOTBASE)
 UNDEF += $(BINDIR)startup.o
 
+include $(RIOTBASE)/Makefile.pseudomodules
+
 USEMODULE += cpu core sys
 INCLUDES += -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/sys/include
 ED = $(USEMODULE:%=-DMODULE_%)
 ED += $(USEPKG:%=-DMODULE_%)
 EXTDEFINES = $(shell echo $(ED)|tr 'a-z' 'A-Z')
-BL=$(USEMODULE:%= $(BINDIR)%.a)
-
-# Exclude defaulttransceiver, it is only a pseudomodule that adds other
-# modules depending on the current board.
-export BASELIBS = $(shell echo $(BL)|sed \
-	-e 's/[^ ]*defaulttransceiver.a//')
+REALMODULES = $(filter-out $(PSEUDOMODULES), $(USEMODULE))
+export BASELIBS = $(REALMODULES:%= $(BINDIR)%.a)
 
 CFLAGS += $(EXTDEFINES)
 
diff --git a/Makefile.pseudomodules b/Makefile.pseudomodules
new file mode 100644
index 0000000000000000000000000000000000000000..b0414da39db3ec4852b556016cc7202ef1c23e5f
--- /dev/null
+++ b/Makefile.pseudomodules
@@ -0,0 +1 @@
+PSEUDOMODULES += defaulttransceiver