diff --git a/package/gluon-setup-mode/Makefile b/package/gluon-setup-mode/Makefile
index e926feec543bb0af699f15a1c5f69b3e4915972a..99799927e3a9a36dd75cbdc2f931ad706b86fbf3 100644
--- a/package/gluon-setup-mode/Makefile
+++ b/package/gluon-setup-mode/Makefile
@@ -35,4 +35,9 @@ define Package/gluon-setup-mode/install
 	$(CP) ./files/* $(1)/
 endef
 
+define Package/gluon-setup-mode/postinst
+#!/bin/sh
+$(call GluonCheckSite,check_site.lua)
+endef
+
 $(eval $(call BuildPackage,gluon-setup-mode))
diff --git a/package/gluon-setup-mode/check_site.lua b/package/gluon-setup-mode/check_site.lua
new file mode 100644
index 0000000000000000000000000000000000000000..07baaad3f1d80334655af4e29efe8e37a5d6e983
--- /dev/null
+++ b/package/gluon-setup-mode/check_site.lua
@@ -0,0 +1,2 @@
+need_boolean('setup_mode.skip', false)
+
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/setup-mode/invariant/005-setup-mode
new file mode 100755
index 0000000000000000000000000000000000000000..ae59c7aaa23bdcb08d583ae8a2f337531951e51b
--- /dev/null
+++ b/package/gluon-setup-mode/files/lib/gluon/upgrade/setup-mode/invariant/005-setup-mode
@@ -0,0 +1,16 @@
+#!/usr/bin/lua
+
+local site = require 'gluon.site_config'
+local uci = require 'luci.model.uci'
+
+local c = uci.cursor()
+
+if site.setup_mode
+   and site.setup_mode.skip
+   and not c:get_first('gluon-setup-mode', 'setup_mode', 'configured', false) then
+     local name = c:get_first("gluon-setup-mode", "setup_mode")
+     c:set("gluon-setup-mode", name, "configured", 1)
+     c:save('gluon-setup-mode')
+     c:commit('gluon-setup-mode')
+end
+