diff --git a/Makefile b/Makefile
index c228db77aa4b2b11f5010a8cbb8069524b173fbb..cf5fc265d42472f54422fc12901fd03b6bd5b14e 100644
--- a/Makefile
+++ b/Makefile
@@ -112,22 +112,30 @@ lint-sh: FORCE
 	@scripts/lint-sh.sh
 
 GLUON_DEFAULT_PACKAGES := hostapd-mini
-GLUON_CLASS_PACKAGES_standard :=
-GLUON_CLASS_PACKAGES_tiny :=
+define merge_lists
+  $(1) :=
+  $(foreach pkg,$(2),
+    $(1) := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(value $(1))) $(pkg))
+  )
+endef
 
-GLUON_FEATURE_PACKAGES := $(shell scripts/features.sh '$(GLUON_FEATURES)' || echo '__ERROR__')
-ifneq ($(filter __ERROR__,$(GLUON_FEATURE_PACKAGES)),)
-$(error Error while evaluating GLUON_FEATURES)
-endif
+define feature_packages
+  $(1) := $(shell scripts/features.sh '$(2)' || echo '__ERROR__')
+endef
 
+$(eval $(call merge_lists,GLUON_FEATURE_LIST_standard,$(GLUON_FEATURES) $(GLUON_FEATURES_standard)))
+$(eval $(call merge_lists,GLUON_FEATURE_LIST_tiny,$(GLUON_FEATURES) $(GLUON_FEATURES_tiny)))
 
-GLUON_PACKAGES :=
-define merge_packages
-  $(foreach pkg,$(1),
-    GLUON_PACKAGES := $$(strip $$(filter-out -$$(patsubst -%,%,$(pkg)) $$(patsubst -%,%,$(pkg)),$$(GLUON_PACKAGES)) $(pkg))
-  )
-endef
-$(eval $(call merge_packages,$(GLUON_DEFAULT_PACKAGES) $(GLUON_FEATURE_PACKAGES) $(GLUON_SITE_PACKAGES)))
+$(eval $(call feature_packages,GLUON_FEATURE_PACKAGES_standard,$(GLUON_FEATURE_LIST_standard)))
+$(eval $(call feature_packages,GLUON_FEATURE_PACKAGES_tiny,$(GLUON_FEATURE_LIST_tiny)))
+
+ifneq ($(filter __ERROR__,$(GLUON_FEATURES_standard) $(GLUON_FEATURES_tiny)),)
+  $(error Error while evaluating features)
+endif
+
+$(eval $(call merge_lists,GLUON_DEFAULT_PACKAGES,$(GLUON_DEFAULT_PACKAGES) $(GLUON_SITE_PACKAGES)))
+$(eval $(call merge_lists,GLUON_CLASS_PACKAGES_standard,$(GLUON_FEATURE_PACKAGES_standard)))
+$(eval $(call merge_lists,GLUON_CLASS_PACKAGES_tiny,$(GLUON_FEATURE_PACKAGES_tiny)))
 
 
 LUA := openwrt/staging_dir/hostpkg/bin/lua
diff --git a/docs/user/site.rst b/docs/user/site.rst
index 387efcf60554d110fc57ca1c8fb4096446db9f15..7dd5bc14a33af29ca83fc11bc987b63f45d0032a 100644
--- a/docs/user/site.rst
+++ b/docs/user/site.rst
@@ -527,8 +527,18 @@ GLUON_DEPRECATED
     deployments of low-flash devices are required).
 
 GLUON_FEATURES
-    Defines a list of features to include. The feature list is used to generate
-    the default package set.
+    Defines a list of features to include. Depending on the device, the feature list
+    defined from this value is combined with the feature list for either the standard
+    or the tiny device-class. The resulting feature list is used to generate the default
+    package set.
+
+GLUON_FEATURES_standard
+    Defines a list of additional features to include or exclude for devices of
+    the standard device-class.
+
+GLUON_FEATURES_tiny
+    Defines a list of additional features to include or exclude for devices of
+    the tiny device-class.
 
 GLUON_SITE_PACKAGES
     Defines a list of packages which should be installed in addition to the