diff --git a/package/gluon-alfred/files/lib/gluon/upgrade/alfred/invariant/010-enable-alfred b/package/gluon-alfred/files/lib/gluon/upgrade/500-enable-alfred
similarity index 100%
rename from package/gluon-alfred/files/lib/gluon/upgrade/alfred/invariant/010-enable-alfred
rename to package/gluon-alfred/files/lib/gluon/upgrade/500-enable-alfred
diff --git a/package/gluon-authorized-keys/files/lib/gluon/upgrade/authorized-keys/invariant/010-authorized-keys b/package/gluon-authorized-keys/files/lib/gluon/upgrade/100-authorized-keys
similarity index 100%
rename from package/gluon-authorized-keys/files/lib/gluon/upgrade/authorized-keys/invariant/010-authorized-keys
rename to package/gluon-authorized-keys/files/lib/gluon/upgrade/100-authorized-keys
diff --git a/package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/invariant/010-autoupdater b/package/gluon-autoupdater/files/lib/gluon/upgrade/500-autoupdater
similarity index 100%
rename from package/gluon-autoupdater/files/lib/gluon/upgrade/autoupdater/invariant/010-autoupdater
rename to package/gluon-autoupdater/files/lib/gluon/upgrade/500-autoupdater
diff --git a/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade b/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade
index 3db5cabcb23bafb5d8820b0950a41df9cb7f3a4c..a12ce78eb85e9a12ac1d883e82c0039a3a86dd86 100755
--- a/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade
+++ b/package/gluon-core/files/etc/uci-defaults/zzz-gluon-upgrade
@@ -1,67 +1,5 @@
 #!/bin/sh
 
-
-UPGRADE_DIR=/lib/gluon/upgrade
-VERSION_DIR=/lib/gluon/version
-
-
-if [ -x /lib/gluon/legacy/legacy-upgrade ] && /lib/gluon/legacy/legacy-upgrade; then
-	HAS_LEGACY=1
-else
-	HAS_LEGACY=
-fi
-
-mkdir -p "$VERSION_DIR"
-
-
-version_of() {
-	opkg status "gluon-$1" | awk '/^Version: / { print $2 }'
-}
-
-oldversion_of() {
-	cat "$VERSION_DIR"/"$1" 2>/dev/null
-}
-
-do_dir() {
-	[ -d "$1" ] || return
-
-	local s
-	for s in "$1"/*; do "$s"; done
-}
-
-do_component() {
-	local component="$1"
-	local version="$(version_of "$component")"
-	[ "$version" ] || continue
-
-	(
-		cd "$component"
-
-		local oldversion="$(oldversion_of "$component")"
-		if [ -z "$oldversion" ]; then
-			if [ "$HAS_LEGACY" ]; then
-				do_dir legacy
-			else
-				do_dir initial
-			fi
-		fi
-
-		do_dir invariant
-
-		echo "$version" > "$VERSION_DIR"/"$component"
-	)
-}
-
-
-cd "$UPGRADE_DIR"
-
-do_component core
-
-for component in *; do
-	[ "$component" != 'core' ] || continue
-	do_component "$component"
+for script in /lib/gluon/upgrade/*; do
+	"$script"
 done
-
-if [ "$HAS_LEGACY" ]; then
-	/lib/gluon/legacy/legacy-upgrade-late
-fi
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/001-upgrade b/package/gluon-core/files/lib/gluon/upgrade/001-upgrade
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/001-upgrade
rename to package/gluon-core/files/lib/gluon/upgrade/001-upgrade
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/010-primary-mac b/package/gluon-core/files/lib/gluon/upgrade/010-primary-mac
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/010-primary-mac
rename to package/gluon-core/files/lib/gluon/upgrade/010-primary-mac
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/020-interfaces b/package/gluon-core/files/lib/gluon/upgrade/020-interfaces
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/020-interfaces
rename to package/gluon-core/files/lib/gluon/upgrade/020-interfaces
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/030-system b/package/gluon-core/files/lib/gluon/upgrade/030-system
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/030-system
rename to package/gluon-core/files/lib/gluon/upgrade/030-system
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/100-dnsmasq b/package/gluon-core/files/lib/gluon/upgrade/100-dnsmasq
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/100-dnsmasq
rename to package/gluon-core/files/lib/gluon/upgrade/100-dnsmasq
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/110-network b/package/gluon-core/files/lib/gluon/upgrade/110-network
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/110-network
rename to package/gluon-core/files/lib/gluon/upgrade/110-network
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/120-ntp-servers b/package/gluon-core/files/lib/gluon/upgrade/120-ntp-servers
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/120-ntp-servers
rename to package/gluon-core/files/lib/gluon/upgrade/120-ntp-servers
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/130-reboot-on-oom b/package/gluon-core/files/lib/gluon/upgrade/130-reboot-on-oom
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/130-reboot-on-oom
rename to package/gluon-core/files/lib/gluon/upgrade/130-reboot-on-oom
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/140-firewall-rules b/package/gluon-core/files/lib/gluon/upgrade/140-firewall-rules
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/140-firewall-rules
rename to package/gluon-core/files/lib/gluon/upgrade/140-firewall-rules
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/200-wireless b/package/gluon-core/files/lib/gluon/upgrade/200-wireless
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/200-wireless
rename to package/gluon-core/files/lib/gluon/upgrade/200-wireless
diff --git a/package/gluon-core/files/lib/gluon/upgrade/core/invariant/999-version b/package/gluon-core/files/lib/gluon/upgrade/999-version
similarity index 100%
rename from package/gluon-core/files/lib/gluon/upgrade/core/invariant/999-version
rename to package/gluon-core/files/lib/gluon/upgrade/999-version
diff --git a/package/gluon-core/files/lib/upgrade/keep.d/gluon b/package/gluon-core/files/lib/upgrade/keep.d/gluon
index 41c6befb7ed505f0202439990f625c0dbe3fd5ac..bc82c775aa5702a4247c671430f0a1e6ba8bd7e7 100644
--- a/package/gluon-core/files/lib/upgrade/keep.d/gluon
+++ b/package/gluon-core/files/lib/upgrade/keep.d/gluon
@@ -1,3 +1 @@
-/lib/gluon/version/
-
 /lib/gluon/core/sysconfig/
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy b/package/gluon-legacy/files/lib/gluon/upgrade/000-legacy
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/000-legacy
rename to package/gluon-legacy/files/lib/gluon/upgrade/000-legacy
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces b/package/gluon-legacy/files/lib/gluon/upgrade/019-legacy-interfaces
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/019-legacy-interfaces
rename to package/gluon-legacy/files/lib/gluon/upgrade/019-legacy-interfaces
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless b/package/gluon-legacy/files/lib/gluon/upgrade/210-legacy-wireless
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/210-legacy-wireless
rename to package/gluon-legacy/files/lib/gluon/upgrade/210-legacy-wireless
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/setup-mode/invariant/009-legacy-setup-mode b/package/gluon-legacy/files/lib/gluon/upgrade/290-legacy-setup-mode
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/setup-mode/invariant/009-legacy-setup-mode
rename to package/gluon-legacy/files/lib/gluon/upgrade/290-legacy-setup-mode
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/simple-tc/invariant/009-legacy-simple-tc b/package/gluon-legacy/files/lib/gluon/upgrade/290-legacy-simple-tc
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/simple-tc/invariant/009-legacy-simple-tc
rename to package/gluon-legacy/files/lib/gluon/upgrade/290-legacy-simple-tc
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/009-legacy-mesh-vpn-fastd b/package/gluon-legacy/files/lib/gluon/upgrade/390-legacy-mesh-vpn-fastd
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/009-legacy-mesh-vpn-fastd
rename to package/gluon-legacy/files/lib/gluon/upgrade/390-legacy-mesh-vpn-fastd
diff --git a/package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/990-legacy-late b/package/gluon-legacy/files/lib/gluon/upgrade/990-legacy-late
similarity index 100%
rename from package/gluon-legacy/files/lib/gluon/upgrade/core/invariant/990-legacy-late
rename to package/gluon-legacy/files/lib/gluon/upgrade/990-legacy-late
diff --git a/package/gluon-lock-password/files/lib/gluon/upgrade/lock-password/invariant/010-lock-password b/package/gluon-lock-password/files/lib/gluon/upgrade/100-lock-password
similarity index 100%
rename from package/gluon-lock-password/files/lib/gluon/upgrade/lock-password/invariant/010-lock-password
rename to package/gluon-lock-password/files/lib/gluon/upgrade/100-lock-password
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/010-wan b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/300-gluon-mesh-batman-adv-core-wan
similarity index 100%
rename from package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/010-wan
rename to package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/300-gluon-mesh-batman-adv-core-wan
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/011-mesh b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
similarity index 100%
rename from package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/011-mesh
rename to package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless
similarity index 100%
rename from package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/020-wireless
rename to package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/320-gluon-mesh-batman-adv-core-wireless
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/030-mesh-on-wan b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/330-gluon-mesh-batman-adv-core-mesh-on-wan
similarity index 100%
rename from package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/mesh-batman-adv-core/invariant/030-mesh-on-wan
rename to package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/330-gluon-mesh-batman-adv-core-mesh-on-wan
diff --git a/package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/010-mesh-vpn-fastd b/package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/400-mesh-vpn-fastd
similarity index 100%
rename from package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/010-mesh-vpn-fastd
rename to package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/400-mesh-vpn-fastd
diff --git a/package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/020-secret-generate b/package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/410-mesh-vpn-fastd-generate-secret
similarity index 100%
rename from package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/mesh-vpn-fastd/invariant/020-secret-generate
rename to package/gluon-mesh-vpn-fastd/files/lib/gluon/upgrade/410-mesh-vpn-fastd-generate-secret
diff --git a/package/gluon-next-node/files/lib/gluon/upgrade/next-node/invariant/010-next-node b/package/gluon-next-node/files/lib/gluon/upgrade/400-next-node
similarity index 100%
rename from package/gluon-next-node/files/lib/gluon/upgrade/next-node/invariant/010-next-node
rename to package/gluon-next-node/files/lib/gluon/upgrade/400-next-node
diff --git a/package/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system b/package/gluon-node-info/files/lib/gluon/upgrade/500-node-info-system
similarity index 100%
rename from package/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/001-node-system
rename to package/gluon-node-info/files/lib/gluon/upgrade/500-node-info-system
diff --git a/package/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role b/package/gluon-node-info/files/lib/gluon/upgrade/510-node-info-role
similarity index 100%
rename from package/gluon-node-info/files/lib/gluon/upgrade/node-info/invariant/010-node-role
rename to package/gluon-node-info/files/lib/gluon/upgrade/510-node-info-role
diff --git a/package/gluon-radvd/files/lib/gluon/upgrade/radvd/invariant/10-radvd-user b/package/gluon-radvd/files/lib/gluon/upgrade/500-radvd-remove-user
similarity index 100%
rename from package/gluon-radvd/files/lib/gluon/upgrade/radvd/invariant/10-radvd-user
rename to package/gluon-radvd/files/lib/gluon/upgrade/500-radvd-remove-user
diff --git a/package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/005-setup-mode b/package/gluon-setup-mode/files/lib/gluon/upgrade/300-setup-mode
similarity index 100%
rename from package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/005-setup-mode
rename to package/gluon-setup-mode/files/lib/gluon/upgrade/300-setup-mode
diff --git a/package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/010-setup-mode-migrate b/package/gluon-setup-mode/files/lib/gluon/upgrade/310-setup-mode-migrate
similarity index 100%
rename from package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/010-setup-mode-migrate
rename to package/gluon-setup-mode/files/lib/gluon/upgrade/310-setup-mode-migrate
diff --git a/package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/011-setup-ifname b/package/gluon-setup-mode/files/lib/gluon/upgrade/320-setup-ifname
similarity index 100%
rename from package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/011-setup-ifname
rename to package/gluon-setup-mode/files/lib/gluon/upgrade/320-setup-ifname
diff --git a/package/gluon-simple-tc/files/lib/gluon/upgrade/simple-tc/invariant/010-site-defaults b/package/gluon-simple-tc/files/lib/gluon/upgrade/300-simple-tc-site-defaults
similarity index 100%
rename from package/gluon-simple-tc/files/lib/gluon/upgrade/simple-tc/invariant/010-site-defaults
rename to package/gluon-simple-tc/files/lib/gluon/upgrade/300-simple-tc-site-defaults
diff --git a/package/gluon-status-page/files/lib/gluon/upgrade/status-page/invariant/010-status-page b/package/gluon-status-page/files/lib/gluon/upgrade/500-status-page
similarity index 100%
rename from package/gluon-status-page/files/lib/gluon/upgrade/status-page/invariant/010-status-page
rename to package/gluon-status-page/files/lib/gluon/upgrade/500-status-page