diff --git a/Makefile.dep b/Makefile.dep
index 364fb05545647a76c0e0205cc7a6057f72f980ed..302f028543c2bff14bc13d270eca6d8e6f220f4b 100644
--- a/Makefile.dep
+++ b/Makefile.dep
@@ -698,6 +698,15 @@ endif
 # include package dependencies
 -include $(USEPKG:%=$(RIOTPKG)/%/Makefile.dep)
 
+# remove required features from optional features
+FEATURES_OPTIONAL := $(filter-out $(FEATURES_REQUIRED),$(FEATURES_OPTIONAL))
+
+# add all optional but provided features to the list of used features
+FEATURES_USED := $(sort $(FEATURES_REQUIRED) $(filter $(FEATURES_OPTIONAL),$(FEATURES_PROVIDED)))
+
+# all periph features correspond to a periph submodule
+USEMODULE += $(filter periph_%,$(FEATURES_USED))
+
 # recursively catch transitive dependencies
 USEMODULE := $(sort $(USEMODULE))
 USEPKG := $(sort $(USEPKG))
diff --git a/makefiles/modules.inc.mk b/makefiles/modules.inc.mk
index 3b9744d0422b11b9c55f9bd9ad547bcf7df497c9..ebaa211407340a06586fb8d54d4b8f72491b5d4a 100644
--- a/makefiles/modules.inc.mk
+++ b/makefiles/modules.inc.mk
@@ -1,5 +1,3 @@
-USEMODULE := $(filter-out $(filter-out $(FEATURES_PROVIDED), $(FEATURES_OPTIONAL)), $(sort $(USEMODULE)))
-
 ED = $(addprefix FEATURE_,$(sort $(filter $(FEATURES_PROVIDED), $(FEATURES_REQUIRED))))
 ED += $(addprefix MODULE_,$(sort $(USEMODULE) $(USEPKG)))
 EXTDEFINES = $(addprefix -D,$(shell echo '$(ED)' | tr 'a-z-' 'A-Z_'))