diff --git a/package/gluon-config-mode-contact-info/luasrc/lib/gluon/config-mode/wizard/0500-contact-info.lua b/package/gluon-config-mode-contact-info/luasrc/lib/gluon/config-mode/wizard/0500-contact-info.lua
index a47b604371715df06bbdd4beaf90574531fa4d90..357d966e9f750c7cf544e61b57e736273edaaf3c 100644
--- a/package/gluon-config-mode-contact-info/luasrc/lib/gluon/config-mode/wizard/0500-contact-info.lua
+++ b/package/gluon-config-mode-contact-info/luasrc/lib/gluon/config-mode/wizard/0500-contact-info.lua
@@ -21,7 +21,6 @@ return function(form, uci)
 	o.optional = true
 	function o:write(data)
 		uci:set("gluon-node-info", owner, "contact", data)
+		uci:save("gluon-node-info")
 	end
-
-	return {'gluon-node-info'}
 end
diff --git a/package/gluon-config-mode-core/luasrc/lib/gluon/config-mode/model/gluon-config-mode/wizard.lua b/package/gluon-config-mode-core/luasrc/lib/gluon/config-mode/model/gluon-config-mode/wizard.lua
index d32b56ac31f9befe852d61404b9373e1ada68e73..882b61d958adc975ede64a97585bde0c6043ee6b 100644
--- a/package/gluon-config-mode-core/luasrc/lib/gluon/config-mode/model/gluon-config-mode/wizard.lua
+++ b/package/gluon-config-mode-core/luasrc/lib/gluon/config-mode/model/gluon-config-mode/wizard.lua
@@ -1,15 +1,6 @@
 local util = require "gluon.util"
 local uci = require("simple-uci").cursor()
 
-
-local wizard = {}
-for _, entry in ipairs(util.glob('/lib/gluon/config-mode/wizard/*')) do
-	local f = assert(loadfile(entry))
-	setfenv(f, getfenv())
-	local w = f()
-	table.insert(wizard, w)
-end
-
 local f = Form(translate("Welcome!"))
 f.submit = translate('Save & restart')
 f.reset = false
@@ -18,21 +9,10 @@ local s = f:section(Section)
 s.template = "wizard/welcome"
 s.package = "gluon-config-mode-core"
 
-local commit = {'gluon-setup-mode'}
-local run = {}
-
-for _, w in ipairs(wizard) do
-	for _, c in ipairs(w(f, uci) or {}) do
-		if type(c) == 'string' then
-			if not util.contains(commit, c) then
-				table.insert(commit, c)
-			end
-		elseif type(c) == 'function' then
-			table.insert(run, c)
-		else
-			error('invalid wizard module return')
-		end
-	end
+for _, entry in ipairs(util.glob('/lib/gluon/config-mode/wizard/*')) do
+	local section = assert(loadfile(entry))
+	setfenv(section, getfenv())
+	section()(f, uci)
 end
 
 function f:write()
@@ -41,12 +21,7 @@ function f:write()
 
 	uci:set("gluon-setup-mode", uci:get_first("gluon-setup-mode", "setup_mode"), "configured", true)
 
-	for _, c in ipairs(commit) do
-		uci:commit(c)
-	end
-	for _, r in ipairs(run) do
-		r()
-	end
+	os.execute('gluon-reconfigure')
 
 	f.template = "wizard/reboot"
 	f.package = "gluon-config-mode-core"
diff --git a/package/gluon-config-mode-domain-select/luasrc/lib/gluon/config-mode/wizard/0200-domain-select.lua b/package/gluon-config-mode-domain-select/luasrc/lib/gluon/config-mode/wizard/0200-domain-select.lua
index 14ba4c637280c69f82df298b701fbc8d1aceeb30..72c3529e8325c0d7e7921e458e4b204ba5236f18 100644
--- a/package/gluon-config-mode-domain-select/luasrc/lib/gluon/config-mode/wizard/0200-domain-select.lua
+++ b/package/gluon-config-mode-domain-select/luasrc/lib/gluon/config-mode/wizard/0200-domain-select.lua
@@ -49,20 +49,8 @@ return function(form, uci)
 		o:value(domain.domain_code, domain.domain_name)
 	end
 
-	local domain_changed = false
-
 	function o:write(data)
-		if data ~= selected_domain then
-			domain_changed = true
-			uci:set('gluon', 'core', 'domain', data)
-		end
-	end
-
-	local function reconfigure()
-		if domain_changed then
-			os.execute('gluon-reconfigure')
-		end
+		uci:set('gluon', 'core', 'domain', data)
+		uci:save('gluon')
 	end
-
-	return {'gluon', reconfigure}
 end
diff --git a/package/gluon-config-mode-geo-location/luasrc/lib/gluon/config-mode/wizard/0400-geo-location.lua b/package/gluon-config-mode-geo-location/luasrc/lib/gluon/config-mode/wizard/0400-geo-location.lua
index 04ebf63aa37c9db66110e9613c012ffc5f29c2d7..5287e4fb84261450840ab11a4ac3883f87e0e978 100644
--- a/package/gluon-config-mode-geo-location/luasrc/lib/gluon/config-mode/wizard/0400-geo-location.lua
+++ b/package/gluon-config-mode-geo-location/luasrc/lib/gluon/config-mode/wizard/0400-geo-location.lua
@@ -100,5 +100,7 @@ return function(form, uci)
 		end
 	end
 
-	return {'gluon-node-info'}
+	function s:write()
+		uci:save("gluon-node-info")
+	end
 end
diff --git a/package/gluon-config-mode-hostname/luasrc/lib/gluon/config-mode/wizard/0100-hostname.lua b/package/gluon-config-mode-hostname/luasrc/lib/gluon/config-mode/wizard/0100-hostname.lua
index 1c9a0af37186deb0a3f8d027c11a279194d0370a..5f31dd8fc69a23702a0ea0bef0b4fc7c6b55eb04 100644
--- a/package/gluon-config-mode-hostname/luasrc/lib/gluon/config-mode/wizard/0100-hostname.lua
+++ b/package/gluon-config-mode-hostname/luasrc/lib/gluon/config-mode/wizard/0100-hostname.lua
@@ -30,7 +30,6 @@ return function(form, uci)
 
 	function o:write(data)
 		pretty_hostname.set(uci, data or default_hostname)
+		uci:save('system')
 	end
-
-	return {'system'}
 end
diff --git a/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/wizard/0300-mesh-vpn.lua b/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/wizard/0300-mesh-vpn.lua
index 6fca9d08c623e322bffb8f4663e62fe12e29cca5..70a1307b522017e6ce5af01f1498c8efb11fb292 100644
--- a/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/wizard/0300-mesh-vpn.lua
+++ b/package/gluon-config-mode-mesh-vpn/luasrc/lib/gluon/config-mode/wizard/0300-mesh-vpn.lua
@@ -60,8 +60,5 @@ return function(form, uci)
 
 	function s:write()
 		uci:save('gluon')
-		os.execute('exec /lib/gluon/mesh-vpn/update-config')
 	end
-
-	return {'gluon', 'fastd', 'tunneldigger', 'simple-tc'}
 end
diff --git a/package/gluon-config-mode-outdoor/luasrc/lib/gluon/config-mode/wizard/0250-outdoor.lua b/package/gluon-config-mode-outdoor/luasrc/lib/gluon/config-mode/wizard/0250-outdoor.lua
index 6a653df85963126137106e5b5ebf0ea88e1cf469..2fbc0fba4fc22329cf2e67552344c5bc2bbfe117 100644
--- a/package/gluon-config-mode-outdoor/luasrc/lib/gluon/config-mode/wizard/0250-outdoor.lua
+++ b/package/gluon-config-mode-outdoor/luasrc/lib/gluon/config-mode/wizard/0250-outdoor.lua
@@ -44,10 +44,6 @@ return function(form, uci)
 				end
 				uci:save('wireless')
 			end
-
-			os.execute('/lib/gluon/upgrade/200-wireless')
 		end
 	end
-
-	return {'gluon', 'network', 'wireless'}
 end