diff --git a/README.md b/README.md
index d9e669a..5f1ea19 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 	In the next two commands replace GLUON_VERSION and SITE_VERSION with the actual version numbers.
 	$ git clone -b GLUON_VERSION https://github.com/freifunk-gluon/gluon.git
-	$ git clone -b SITE_VERSION https://git.hamburg.ccc.de/freifunk/site-ffhh.git
+	$ git clone -b SITE_VERSION https://github.com/freifunkhamburg/site-ffhh.git
 	$ cd site-ffhh
 
 	To build the firmware into the subdirectory firmware:
@@ -15,9 +15,6 @@ Please see [the official Gluon repository](https://github.com/freifunk-gluon/glu
 
 #### Gluon versions used for specific Hamburg Freifunk Firmware builds
 
-- v2023.2.4.0: site-ffhh: v2023.2.4.0, gluon: v2023.2.4
-- v2023.2.2.1: site-ffhh: v2023.2.2.0, gluon: v2023.2.2 (add mediatek-filogic Routers)
-- v2023.2.2.0: site-ffhh: v2023.2.2.0, gluon: v2023.2.2
 - v2023.1.2.0: site-ffhh: v2023.1.2.0, gluon: v2023.1.2
 - v2022.1.4.0: site-ffhh: v2022.1.4.0, gluon: v2022.1.4
 - v2022.1.3.0: site-ffhh: v2022.1.3.0, gluon: v2022.1.3 (nur experimental verteilt)
diff --git a/build.conf b/build.conf
index 07358e1..7c44063 100644
--- a/build.conf
+++ b/build.conf
@@ -1,5 +1,5 @@
-GLUON_RELEASE="v2023.2.4.0"
-targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-filogic mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
+GLUON_RELEASE="v2023.1.2.0"
+targets="ath79-generic ath79-nand ath79-mikrotik bcm27xx-bcm2708 bcm27xx-bcm2709 ipq40xx-generic ipq40xx-mikrotik ipq806x-generic lantiq-xrx200 lantiq-xway mediatek-mt7622 mpc85xx-p1010 mpc85xx-p1020 ramips-mt7620 ramips-mt7621 ramips-mt76x8 rockchip-armv8 sunxi-cortexa7 x86-generic x86-geode x86-legacy x86-64"
 broken_images=(
 	'*dir*615*d*'
 )
diff --git a/build.sh b/build.sh
index 5647ba5..ac09d08 100755
--- a/build.sh
+++ b/build.sh
@@ -79,7 +79,7 @@ pushd "$site_path"
 # shellcheck source=/dev/null
 . ./build.conf
 GLUON_AUTOUPDATER_BRANCH="${GLUON_AUTOUPDATER_BRANCH:-experimental}"
-[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp${BUILD_DATE:-$(date +%Y%m%d)}"
+[ "${GLUON_AUTOUPDATER_BRANCH}" = "experimental" ] && GLUON_RELEASE="${GLUON_RELEASE}~exp$(date +%Y%m%d)"
 export GLUON_RELEASE
 export GLUON_AUTOUPDATER_BRANCH
 export GLUON_SITEDIR="${site_path}"
@@ -91,6 +91,7 @@ env | egrep '^GLUON' | sort
 
 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.
diff --git a/image-customization.lua b/image-customization.lua
deleted file mode 100644
index 79abeed..0000000
--- a/image-customization.lua
+++ /dev/null
@@ -1,36 +0,0 @@
-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',
-})
-
-if not device_class('tiny') then
-    features({
-        'wireless-encryption-wpa3',
-    })
-end
-
-packages({
-    '-gluon-config-mode-geo-location',
-    '-gluon-config-mode-contact-info',
-    'gluon-ebtables-source-filter',
-    'gluon-web-mesh-vpn-fastd',
-    'iwinfo',
-})
-
-if target('x86') then
-    packages({
-        'nano',
-        'htop',
-        'ethtool',
-    })
-end
diff --git a/site.mk b/site.mk
index 45aa428..419cb23 100644
--- a/site.mk
+++ b/site.mk
@@ -3,6 +3,35 @@ GLUON_DEPRECATED := upgrade
 
 GLUON_AUTOUPDATER_ENABLED ?= 1
 
+GLUON_SITE_PACKAGES := \
+	-gluon-config-mode-geo-location \
+	-gluon-config-mode-contact-info \
+	gluon-ebtables-source-filter \
+	gluon-web-mesh-vpn-fastd \
+	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
+
+# x86 and x86-64 add extra software
+ifeq ($(GLUON_TARGET),$(filter $(GLUON_TARGET),x86-generic x86-64))
+	GLUON_SITE_PACKAGES += \
+		nano \
+		htop \
+		ethtool
+endif
+
 GLUON_PRIORITY ?= 7
 
 # Region code required for some images; supported values: us eu