diff --git a/Makefile.include b/Makefile.include
index 341c2e2ec6641d78dd5795ab8997db059e915469..0ae0581ff17275013cb649d77ac14ef388836b8b 100644
--- a/Makefile.include
+++ b/Makefile.include
@@ -63,6 +63,7 @@ endif
 # your binaries to link
 BASELIBS += $(BINDIR)$(BOARD)_base.a
 BASELIBS += $(BINDIR)${PROJECT}.a
+BASELIBS += $(USEPKG:%=${BINDIR}%.a)
 
 .PHONY: all clean flash doc term
 
@@ -71,7 +72,7 @@ all: $(BINDIR)$(PROJECT).a
 	@echo "Building project $(PROJECT) for $(BOARD) w/ MCU $(MCU)."
 	"$(MAKE)" -C $(RIOTBOARD)/$(BOARD)
 	"$(MAKE)" -C $(RIOTBASE)
-	@for i in $(EXTERNAL_MODULES) ; do "$(MAKE)" -C $$i ; done ;
+	@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTBASE)/pkg/$$i ; done ;
 ifeq ($(BUILDOSXNATIVE),1)
 	$(AD)$(LINK) $(UNDEF) -o $(BINDIR)$(PROJECT).elf $(BASELIBS) $(LINKFLAGS) -Wl,-no_pie
 else
@@ -91,21 +92,34 @@ SRC = $(wildcard *.c)
 # string array of all names replaced .c with .o
 OBJ = $(SRC:%.c=${BINDIR}${PROJECT}/%.o)
 
-$(BINDIR)$(PROJECT).a:  $(OBJ)
+$(BINDIR)$(PROJECT).a: $(OBJ)
 	$(AD)$(AR) -rc $(BINDIR)$(PROJECT).a $(OBJ)
 
+# include Makefile.includes for packages in $(USEPKG)
+$(RIOTBASE)/pkg/%/Makefile.include::
+	$(AD)"$(MAKE)" -C $(RIOTBASE)/pkg/$* Makefile.include
+
+.PHONY: $(USEPKG:%=$(RIOTBASE)/pkg/%/Makefile.include)
+
+-include $(USEPKG:%=$(RIOTBASE)/pkg/%/Makefile.include)
+
 # pull in dependency info for *existing* .o files
 -include $(OBJ:.o=.d)
 
-$(BINDIR)$(PROJECT)/%.o: %.c $(PROJDEPS)
+$(BINDIR)$(PROJECT)/%.o: %.c $(PROJDEPS) $(USEPKG:%=${BINDIR}%.a)
+	@mkdir -p ${BINDIR}
 	@echo; echo "Compiling.... $*.c"; echo
 	@test -d $(BINDIR)$(PROJECT) || mkdir -p $(BINDIR)$(PROJECT)
 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) -c $*.c -o $(BINDIR)$(PROJECT)/$*.o
 
+$(USEPKG:%=${BINDIR}%.a)::
+	@mkdir -p ${BINDIR}
+	"$(MAKE)" -C $(RIOTBASE)/pkg/$(patsubst ${BINDIR}%.a,%,$@)
+
 clean:
+	@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTBASE)/pkg/$$i clean ; done ;
 	"$(MAKE)" -C $(RIOTBOARD)/$(BOARD) clean
 	"$(MAKE)" -C $(RIOTBASE) clean
-	@for i in $(EXTERNAL_MODULES) ; do "$(MAKE)" -C $$i clean ; done ;
 	rm -rf $(BINDIR)
 
 flash: all
diff --git a/pkg/USING b/pkg/USING
index c19ec531b63f510d18dd110901bf6f01b407850e..06964f28135bb575b342b4185a08d6fc16cc2362 100644
--- a/pkg/USING
+++ b/pkg/USING
@@ -2,4 +2,4 @@ Packages are included to your project as external modules. Thus you only have
 to add the following line to your project (and update your INCLUDE path
 accordingly):
 
-EXTERNAL+=$(RIOTBASE)/pkg/<pkg_name>
+USEPKG += <pkg_name>
diff --git a/pkg/libcoap/Makefile b/pkg/libcoap/Makefile
index 089d1c223036232e7d3b4248344c48a79fc94af4..9a91f013bd99b845e416d4f4358dedc31fd387b2 100644
--- a/pkg/libcoap/Makefile
+++ b/pkg/libcoap/Makefile
@@ -32,3 +32,6 @@ clean::
 
 distclean::
 	rm -rf $(CURDIR)/$(PKG_NAME)
+
+Makefile.include:
+	@true
diff --git a/pkg/libcoap/Makefile.include b/pkg/libcoap/Makefile.include
new file mode 100644
index 0000000000000000000000000000000000000000..1d16e598b5a694c21e72ca2809ef8310a42b2d69
--- /dev/null
+++ b/pkg/libcoap/Makefile.include
@@ -0,0 +1 @@
+INCLUDES += -I $(RIOTBASE)/pkg/libcoap/libcoap