diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..7d8a562
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,108 @@
+GLUON_BUILD_DIR := gluon-build
+GLUON_GIT_URL := https://github.com/freifunk-gluon/gluon.git
+GLUON_GIT_REF := v2021.1
+
+PATCH_DIR := ${GLUON_BUILD_DIR}/site/patches
+SECRET_KEY_FILE ?= ${HOME}/.gluon-secret-key
+
+GLUON_TARGETS ?= \
+	ar71xx-generic \
+	ar71xx-tiny \
+	ar71xx-nand \
+	brcm2708-bcm2708 \
+	brcm2708-bcm2709 \
+	mpc85xx-generic \
+	mpc85cc-p1020 \
+	lantiq-xway \
+	lantiq-xrx200 \
+	ath79-generic \
+	ramips-mt7621 \
+	sunxi-cortexa7 \
+	x86-generic \
+	x86-geode \
+	x86-64 \
+	x86-legacy \
+	ipq40xx-generic \
+	ipq806x-generic \
+	ramips-mt7620 \
+	ramips-mt76x8 \
+	ramips-rt305x
+
+ifneq (,$(shell git describe --exact-match --tags 2>/dev/null))
+	GLUON_BRANCH := stable
+	GLUON_RELEASE := $(shell git describe --tags 2>/dev/null)
+else
+	GLUON_BRANCH := experimental
+	EXP_FALLBACK = $(shell date '+%Y%m%d%H')
+	BUILD_NUMBER ?= $(EXP_FALLBACK)
+	GLUON_RELEASE := $(shell git describe --tags | cut -d- -f1)~exp$(BUILD_NUMBER)
+endif
+
+JOBS ?= $(shell cat /proc/cpuinfo | grep processor | wc -l)
+
+GLUON_MAKE := ${MAKE} -j ${JOBS} -C ${GLUON_BUILD_DIR} \
+	GLUON_RELEASE=${GLUON_RELEASE} \
+	GLUON_BRANCH=${GLUON_BRANCH}
+
+all: info
+	${MAKE} manifest
+
+info:
+	@echo
+	@echo '#########################'
+	@echo '# FFHH Firmware build'
+	@echo '# Building release ${GLUON_RELEASE} for branch ${GLUON_BRANCH}'
+	@echo
+
+build: gluon-prepare
+	for target in ${GLUON_TARGETS}; do \
+		echo ""Building target $$target""; \
+		${GLUON_MAKE} download all GLUON_TARGET="$$target"; \
+	done
+
+manifest: build
+	${GLUON_MAKE} manifest
+	mv ${GLUON_BUILD_DIR}/output .
+
+sign: manifest
+	${GLUON_BUILD_DIR}/contrib/sign.sh ${SECRET_KEY_FILE} output/images/sysupgrade/${GLUON_BRANCH}.manifest
+
+${GLUON_BUILD_DIR}:
+	git clone ${GLUON_GIT_URL} ${GLUON_BUILD_DIR}
+
+gluon-prepare: output-clean ${GLUON_BUILD_DIR}
+	cd ${GLUON_BUILD_DIR} \
+		&& git remote set-url origin ${GLUON_GIT_URL} \
+		&& git fetch origin \
+		&& rm -rf packages \
+		&& git checkout -q --force ${GLUON_GIT_REF} \
+		&& git clean -fd;
+	ln -sfT .. ${GLUON_BUILD_DIR}/site
+	make gluon-patch
+	${GLUON_MAKE} update
+
+gluon-patch:
+	echo "Applying Patches ..."
+	(cd ${GLUON_BUILD_DIR})
+			if [ `git branch --list patched` ]; then \
+				(git branch -D patched) \
+			fi
+	(cd ${GLUON_BUILD_DIR}; git checkout -B patching)
+	if [ -d "gluon-build/site/patches" -a "gluon-build/site/patches/*.patch" ]; then \
+		(cd ${GLUON_BUILD_DIR}; git apply --ignore-space-change --ignore-whitespace --whitespace=nowarn --verbose site/patches/*.patch) || ( \
+			cd ${GLUON_BUILD_DIR}; \
+			git clean -fd; \
+			git checkout -B patched; \
+			git branch -D patching; \
+			exit 1 \
+		) \
+	fi
+	(cd ${GLUON_BUILD_DIR}; git branch -M patched)
+
+gluon-clean:
+	rm -rf ${GLUON_BUILD_DIR}
+
+output-clean:
+	rm -rf output
+
+clean: gluon-clean output-clean
\ No newline at end of file
diff --git a/build.conf b/build.conf
deleted file mode 100644
index 3185df3..0000000
--- a/build.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-GLUON_RELEASE="v2020.2.2.0"
-GLUON_BRANCH="stable"
-targets="ar71xx-generic ar71xx-nand ar71xx-tiny brcm2708-bcm2708 brcm2708-bcm2709 mpc85xx-generic ramips-mt7620 ramips-mt7621 ramips-mt76x8 ramips-rt305x sunxi-cortexa7 x86-64 x86-generic x86-geode"
-broken_images=(
-	'*dir*615*d*'
-)
diff --git a/build.sh b/build.sh
deleted file mode 100755
index 4bf0eed..0000000
--- a/build.sh
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-function announce () {
-	echo '############################' "$@" >&2
-}
-function usage () {
-	echo "Usage: $0 -g GLUON_PATH" >&2
-	echo "       -g GLUON_PATH   Path to a checkout of the gluon repository." >&2
-	echo "       -t TARGETS      Comma separated list of gluon targets to build" >&2
-	echo "       -a              Automatically detect and build all targets." >&2
-	echo "       -o OUT_PATH     Path to the firmware output directory. Default: ${gluon_out}" >&2
-	echo "       -s SIGNATURE    Sign firmware with signature" >&2
-	echo "       -b              BROKEN=1" >&2
-	echo "       -v              verbose" >&2
-	echo "       -j JOBS         Run build with -jJOBS. Default: ${proc}" >&2
-}
-
-proc=$(nproc)
-gluon_out="${HOME}/firmware"
-
-while [ $# -gt 0 ]; do
-	case "$1" in
-		-a)
-			auto_targets=1
-			;;
-		-g)
-			gluon_path="$2"
-			shift
-			;;
-		-t)
-			build_targets="$2"
-			shift
-			;;
-		-o)
-			gluon_out="$2"
-			shift
-			;;
-		-s)
-			signature="$2"
-			shift
-			;;
-		-b)
-			export BROKEN=1
-			;;
-		-j)
-			proc="$2"
-			shift
-			;;
-		-v)
-			verbose=V=s
-			;;
-		*)
-			echo ERROR: Failed to parse: "${1}" >&2
-			usage
-			exit 1
-			;;
-	esac
-	shift
-done
-
-if [ -z "$gluon_path" ]; then
-	usage
-	exit 1
-fi
-
-gluon_path=$(realpath "$gluon_path")
-gluon_out=$(realpath "$gluon_out")
-site_path=$(realpath "$(dirname "${BASH_SOURCE[0]}")")
-
-announce GLUON: "$gluon_path" >&2
-announce FFHH SITE PATH: "$site_path" >&2
-
-pushd "$site_path"
-# shellcheck source=/dev/null
-. ./build.conf
-[ "${GLUON_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
-export GLUON_RELEASE
-export GLUON_BRANCH
-export GLUON_SITEDIR="${site_path}"
-export GLUON_OUTPUTDIR="${gluon_out}/${GLUON_RELEASE}/${GLUON_BRANCH}"
-popd
-
-pushd "${gluon_path}"
-announce Starting make update...
-rm -rf "${GLUON_OUTPUTDIR}"
-mkdir -p "${GLUON_OUTPUTDIR}"
-make update
-# Try to install patches. I wasn't able to figure out how patches in gluon/site/patches work.
-for p in "${site_path}"/patches/*.patch; do
-	if [ -e "$p" ] && [ ! -f "${gluon_path}/${p##*/}" ]; then
-		announce "Installing patch $p"
-		patch -p1 < "$p"
-		touch "${gluon_path}/${p##*/}"
-	fi
-done
-
-if [ "$auto_targets" = "1" ]; then
-	# detect available targets
-	targets="$(make list-targets | sort | xargs)"
-else
-	# if a list of build targets has been supplied, only build those
-	targets="$(echo "${build_targets:-$targets}" | sed -e 's_,_ _g')"
-fi
-announce "The following targets will be generated: $targets" >&2
-
-for t in $targets; do
-	announce "Starting build for $t..." >&2
-	make "-j$(nproc)" "GLUON_TARGET=$t" $verbose
-done
-# Remove known-broken images
-# shellcheck disable=SC2154
-for broken_image in "${broken_images[@]}"; do
-	announce "Removing broken image ${broken_image}..."
-	find "${GLUON_OUTPUTDIR}/images" -iname "${broken_image}" \( -type f -o -type l \) -ls -exec rm -f {} \;
-done
-# Generate the images.list
-# shellcheck disable=SC2094
-( cd "${GLUON_OUTPUTDIR}/images" && ( echo "RELEASE=${GLUON_RELEASE}"; find . -type f ! -iname '*.manifest' ! -iname images.list; find . -type l ! -iname '*.manifest' ) | sed -e 's!^\./\(.*\)$!\1!' -e 's!/! !g' | sort > images.list )
-announce Building manifest...
-make manifest
-if [ -n "${signature}" ]; then
-	if [ "$GLUON_BRANCH" == "experimental" ]; then
-		announce Signing...
-		"${gluon_path}/contrib/sign.sh" "${signature}" "${GLUON_OUTPUTDIR}/images/sysupgrade/experimental.manifest"
-	else
-		echo ERROR: can only sign experimental branch >&2
-		exit 1
-	fi
-fi
-popd
diff --git a/patches/remove-dlink.patch b/patches/remove-dlink.patch
new file mode 100644
index 0000000..554c147
--- /dev/null
+++ b/patches/remove-dlink.patch
@@ -0,0 +1,18 @@
+diff --git a/targets/ar71xx-tiny b/targets/ar71xx-tiny
+index a0a8d510..160ac8a4 100644
+--- a/targets/ar71xx-tiny
++++ b/targets/ar71xx-tiny
+@@ -16,13 +16,6 @@ defaults {
+ }
+ 
+ 
+--- D-Link
+-
+-device('d-link-dir-615-rev-c1', 'dir-615-c1', {
+-       profile = 'DIR615C1',
+-})
+-
+-
+ -- TP-Link
+ 
+ local tplink_region_suffix = ''
\ No newline at end of file
diff --git a/site.mk b/site.mk
index 5952e73..8059aaa 100644
--- a/site.mk
+++ b/site.mk
@@ -1,39 +1,334 @@
-GLUON_MULTIDOMAIN := 1
-GLUON_DEPRECATED := upgrade
+GLUON_MULTIDOMAIN=1
+GLUON_DEPRECATED=upgrade
+
+GLUON_FEATURES := \
+	respondd \
+	autoupdater \
+	ebtables-filter-multicast \
+	ebtables-filter-ra-dhcp \
+	ebtables-source-filter \
+	radv-filterd \
+	web-advanced \
+	web-private-wifi \
+	web-wizard \
+	mesh-batman-adv-15 \
+	mesh-vpn-fastd \
+	status-page \
+	config-mode-domain-select \
+	config-mode-geo-location \
 
 GLUON_SITE_PACKAGES := \
-	-gluon-config-mode-geo-location \
-	-gluon-config-mode-contact-info \
-	gluon-ebtables-source-filter \
-	gluon-web-mesh-vpn-fastd \
 	iptables \
 	iwinfo
 
-GLUON_FEATURES := \
-	autoupdater \
-	config-mode-domain-select \
-	ebtables-filter-multicast \
-	ebtables-filter-ra-dhcp \
-	mesh-batman-adv-15 \
-	mesh-vpn-fastd \
-	web-private-wifi \
-	radv-filterd \
-	respondd \
-	status-page \
-	web-advanced \
-	web-wizard
+DEFAULT_GLUON_RELEASE := v2021.1.0~exp$(shell date '+%Y%m%d%H')
 
-# x86 and x86-64 add extra software
-ifeq ($(GLUON_TARGET),$(filter $(GLUON_TARGET),x86-generic x86-64))
-	GLUON_SITE_PACKAGES += \
-		nano \
-		htop \
-		ethtool
-endif
+# Allow overriding the release number from the command line
+GLUON_RELEASE ?= $(DEFAULT_GLUON_RELEASE)
 
-GLUON_PRIORITY ?= 7
+GLUON_PRIORITY ?= 0
 
-# Region code required for some images; supported values: us eu
 GLUON_REGION ?= eu
 
+# Languages to include
 GLUON_LANGS ?= en de
+
+# Additional package list generated by contrib/genpkglist.py
+
+INCLUDE_USB := \
+    usbutils
+
+EXCLUDE_USB := \
+    -usbutils
+
+INCLUDE_USB_HID := \
+    kmod-usb-hid \
+    kmod-hid-generic
+
+EXCLUDE_USB_HID := \
+    -kmod-usb-hid \
+    -kmod-hid-generic
+
+INCLUDE_USB_SERIAL := \
+    kmod-usb-serial \
+    kmod-usb-serial-ftdi \
+    kmod-usb-serial-pl2303
+
+EXCLUDE_USB_SERIAL := \
+    -kmod-usb-serial \
+    -kmod-usb-serial-ftdi \
+    -kmod-usb-serial-pl2303
+
+INCLUDE_USB_STORAGE := \
+    block-mount \
+    blkid \
+    kmod-fs-ext4 \
+    kmod-fs-ntfs \
+    kmod-fs-vfat \
+    kmod-usb-storage \
+    kmod-usb-storage-extras \
+    kmod-usb-storage-uas \
+    kmod-nls-base \
+    kmod-nls-cp1250 \
+    kmod-nls-cp437 \
+    kmod-nls-cp850 \
+    kmod-nls-cp852 \
+    kmod-nls-iso8859-1 \
+    kmod-nls-iso8859-13 \
+    kmod-nls-iso8859-15 \
+    kmod-nls-iso8859-2 \
+    kmod-nls-utf8
+
+EXCLUDE_USB_STORAGE := \
+    -block-mount \
+    -blkid \
+    -kmod-fs-ext4 \
+    -kmod-fs-ntfs \
+    -kmod-fs-vfat \
+    -kmod-usb-storage \
+    -kmod-usb-storage-extras \
+    -kmod-usb-storage-uas \
+    -kmod-nls-base \
+    -kmod-nls-cp1250 \
+    -kmod-nls-cp437 \
+    -kmod-nls-cp850 \
+    -kmod-nls-cp852 \
+    -kmod-nls-iso8859-1 \
+    -kmod-nls-iso8859-13 \
+    -kmod-nls-iso8859-15 \
+    -kmod-nls-iso8859-2 \
+    -kmod-nls-utf8
+
+INCLUDE_USB_NET := \
+    kmod-mii \
+    kmod-usb-net \
+    kmod-usb-net-asix \
+    kmod-usb-net-asix-ax88179 \
+    kmod-usb-net-cdc-eem \
+    kmod-usb-net-cdc-ether \
+    kmod-usb-net-cdc-subset \
+    kmod-usb-net-dm9601-ether \
+    kmod-usb-net-hso \
+    kmod-usb-net-ipheth \
+    kmod-usb-net-mcs7830 \
+    kmod-usb-net-pegasus \
+    kmod-usb-net-rndis \
+    kmod-usb-net-rtl8152 \
+    kmod-usb-net-smsc95xx
+
+EXCLUDE_USB_NET := \
+    -kmod-mii \
+    -kmod-usb-net \
+    -kmod-usb-net-asix \
+    -kmod-usb-net-asix-ax88179 \
+    -kmod-usb-net-cdc-eem \
+    -kmod-usb-net-cdc-ether \
+    -kmod-usb-net-cdc-subset \
+    -kmod-usb-net-dm9601-ether \
+    -kmod-usb-net-hso \
+    -kmod-usb-net-ipheth \
+    -kmod-usb-net-mcs7830 \
+    -kmod-usb-net-pegasus \
+    -kmod-usb-net-rndis \
+    -kmod-usb-net-rtl8152 \
+    -kmod-usb-net-smsc95xx
+
+INCLUDE_PCI := \
+    pciutils
+
+EXCLUDE_PCI := \
+    -pciutils
+
+INCLUDE_PCI_NET := \
+    kmod-bnx2
+
+EXCLUDE_PCI_NET := \
+    -kmod-bnx2
+
+INCLUDE_TLS := \
+    ca-bundle \
+    libustream-openssl
+
+EXCLUDE_TLS := \
+    -ca-bundle \
+    -libustream-openssl
+
+ifeq ($(GLUON_TARGET),ar71xx-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+    GLUON_allnet-all0315n_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_avm-fritz-wlan-repeater-300e_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_avm-fritz-wlan-repeater-450e_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_d-link-dap-1330-rev-a1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_d-link-dir-825-rev-b1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_meraki-mr12_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_meraki-mr16_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ocedo-koala_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-mr1750_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-mr600_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-mr900_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-om2p_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-om5p_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_openmesh-om5p-ac_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-cpe210-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-cpe210-v2_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-cpe210-v3_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-cpe510-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-wbs210-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-wbs510-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c25-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c58-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c60-v1_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c60-v2_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-re355_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-re450_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-airgateway_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-airgateway-pro_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-bullet-m_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-rocket-m_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-nanostation-m_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-loco-m-xw_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-nanostation-m-xw_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-rocket-m-xw_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-rocket-m-ti_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi-ap-pro_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifiap-outdoor_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifiap-outdoor+_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-ls-sr71_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi-ac-lite_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi-ac-lr_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi-ac-pro_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-unifi-ac-mesh_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_linksys-wrt160nl_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr710n-v1_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr710n-v2.1_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr842n-nd-v1_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr842n-nd-v2_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr1043n-nd-v1_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubiquiti-airrouter_SITE_PACKAGES += $(EXCLUDE_TLS) $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+endif
+
+# no pkglists for target ar71xx-mikrotik
+
+
+ifeq ($(GLUON_TARGET),ar71xx-nand)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+# no pkglists for target ar71xx-tiny
+
+
+ifeq ($(GLUON_TARGET),ath79-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+    GLUON_devolo-wifi-pro-1200e_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_devolo-wifi-pro-1200i_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_devolo-wifi-pro-1750c_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_devolo-wifi-pro-1750i_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_devolo-wifi-pro-1750x_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ocedo-raccoon_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c6-v2_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-cpe220-v3_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+endif
+
+ifeq ($(GLUON_TARGET),brcm2708-bcm2708)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),brcm2708-bcm2709)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),brcm2708-bcm2710)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_HID) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),ipq40xx-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),ipq806x-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),lantiq-xrx200)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),lantiq-xway)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),mpc85xx-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),mpc85xx-p1020)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),mvebu-cortexa9)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),ramips-mt7620)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),ramips-mt7621)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+    GLUON_netgear-ex6150_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubnt-erx_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_ubnt-erx-sfp_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+endif
+
+ifeq ($(GLUON_TARGET),ramips-mt76x8)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+    GLUON_cudy-wr1000_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_gl.inet-vixmini_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c50-v3_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-archer-c50-v4_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wa801nd-v5_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+    GLUON_tp-link-tl-wr841n-v13_SITE_PACKAGES += $(EXCLUDE_USB) $(EXCLUDE_USB_NET) $(EXCLUDE_USB_SERIAL) $(EXCLUDE_USB_STORAGE)
+endif
+
+# no pkglists for target ramips-rt305x
+
+
+ifeq ($(GLUON_TARGET),sunxi-cortexa7)
+    GLUON_SITE_PACKAGES += $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),x86-64)
+    GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),x86-generic)
+    GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+ifeq ($(GLUON_TARGET),x86-geode)
+    GLUON_SITE_PACKAGES += $(INCLUDE_PCI) $(INCLUDE_PCI_NET) $(INCLUDE_TLS) $(INCLUDE_USB) $(INCLUDE_USB_NET) $(INCLUDE_USB_SERIAL) $(INCLUDE_USB_STORAGE)
+
+endif
+
+# no pkglists for target x86-legacy
+