diff --git a/package/gluon-config-mode-core/luasrc/lib/gluon/web/model/gluon-config-mode/wizard.lua b/package/gluon-config-mode-core/luasrc/lib/gluon/web/model/gluon-config-mode/wizard.lua
index 6cafb0e23f1561e06bf06cffec5c278e3b0508ab..35b605d28288fc85087ed087daa4095fb9b8ef1d 100644
--- a/package/gluon-config-mode-core/luasrc/lib/gluon/web/model/gluon-config-mode/wizard.lua
+++ b/package/gluon-config-mode-core/luasrc/lib/gluon/web/model/gluon-config-mode/wizard.lua
@@ -28,11 +28,18 @@ local s = f:section(Section)
 s.template = "gluon/config-mode/welcome"
 
 local commit = {'gluon-setup-mode'}
+local run = {}
 
 for _, w in ipairs(wizard) do
 	for _, c in ipairs(w(f, uci) or {}) do
-		if not util.contains(commit, c) then
-			table.insert(commit, c)
+		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
 end
@@ -45,6 +52,9 @@ function f:write()
 	for _, c in ipairs(commit) do
 		uci:commit(c)
 	end
+	for _, r in ipairs(run) do
+		r()
+	end
 
 	f.template = "gluon/config-mode/reboot"
 	f.hidenav = true