diff --git a/modules b/modules
index d9725ae6a916a044d43760fc7a652a5e62849eb1..855b0ce334dc1575695efb289fbafe6be7782dcf 100644
--- a/modules
+++ b/modules
@@ -13,4 +13,4 @@ PACKAGES_ROUTING_BRANCH=openwrt-19.07
 PACKAGES_ROUTING_COMMIT=101632e153b41238bc19dfd96ba2d23339dbcb76
 
 PACKAGES_GLUON_REPO=https://github.com/freifunk-gluon/packages.git
-PACKAGES_GLUON_COMMIT=8d53ff54e562ddb2ed8397781dd78edc76f6ff38
+PACKAGES_GLUON_COMMIT=b644a2a8d8bf2543d12f782f59a2b2ecdc7bda97
diff --git a/package/gluon-site/Makefile b/package/gluon-site/Makefile
index df299c40cae727db404931bd401b76a0d1d47a5a..9b01ec4d11535bafa7e2c674d9e6a4e0a9f8961d 100644
--- a/package/gluon-site/Makefile
+++ b/package/gluon-site/Makefile
@@ -8,7 +8,7 @@ PKG_VERSION:=$(if $(DUMP),x,$(GLUON_SITE_VERSION))
 
 PKG_CONFIG_DEPENDS := CONFIG_GLUON_RELEASE CONFIG_GLUON_SITEDIR CONFIG_GLUON_MULTIDOMAIN
 PKG_FILE_DEPENDS := $(GLUON_SITEDIR)/site.conf $(GLUON_SITEDIR)/domains/ $(GLUON_SITEDIR)/i18n/
-PKG_BUILD_DEPENDS := lua-cjson/host gluon-web/host
+PKG_BUILD_DEPENDS := lua-jsonc/host gluon-web/host
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
@@ -38,7 +38,7 @@ endef
 
 define GenerateJSON
 	GLUON_SITEDIR='$$(GLUON_SITEDIR)' GLUON_SITE_CONFIG='$(1).conf' \
-		lua -e 'print(require("cjson").encode(assert(dofile("../../scripts/site_config.lua")(os.getenv("GLUON_SITE_CONFIG")))))' \
+		lua -e 'print(require("jsonc").stringify(assert(dofile("../../scripts/site_config.lua")(os.getenv("GLUON_SITE_CONFIG")))))' \
 		> '$$(PKG_BUILD_DIR)/$(1).json'
 endef
 
diff --git a/scripts/check_site.lua b/scripts/check_site.lua
index dd33bf52e1f92194dd6852ab003c52e5776cf80e..43765f80922acbaa37b4fff52bc8874403f43e4c 100644
--- a/scripts/check_site.lua
+++ b/scripts/check_site.lua
@@ -1,4 +1,4 @@
-local cjson = require 'cjson'
+local json = require 'jsonc'
 
 local function config_error(src, ...)
 	error(src .. ' error: ' .. string.format(...), 0)
@@ -7,20 +7,12 @@ end
 local has_domains = (os.execute('ls -d "$IPKG_INSTROOT"/lib/gluon/domains/ >/dev/null 2>&1') == 0)
 
 
-local function load_json(filename)
-	local f = assert(io.open(filename))
-	local json = cjson.decode(f:read('*a'))
-	f:close()
-	return json
-end
-
-
 local function get_domains()
 	local domains = {}
 	local dirs = io.popen("find \"$IPKG_INSTROOT\"/lib/gluon/domains/ -name '*.json'")
 	for filename in dirs:lines() do
 		local name = string.match(filename, '([^/]+).json$')
-		domains[name] = load_json(filename)
+		domains[name] = assert(json.load(filename))
 	end
 	dirs:close()
 
@@ -391,7 +383,7 @@ end
 
 local check = setfenv(assert(loadfile()), M)
 
-site = load_json(os.getenv('IPKG_INSTROOT') .. '/lib/gluon/site.json')
+site = assert(json.load(os.getenv('IPKG_INSTROOT') .. '/lib/gluon/site.json'))
 
 local ok, err = pcall(function()
 	if has_domains then
diff --git a/scripts/domain_aliases.lua b/scripts/domain_aliases.lua
index ea7fbf3a3eb6b5f2e8727b1bf8333cc5113ae552..0195d211e62cb3997c0209059f11cf009ec82612 100644
--- a/scripts/domain_aliases.lua
+++ b/scripts/domain_aliases.lua
@@ -1,13 +1,6 @@
-local cjson = require 'cjson'
+local json = require 'jsonc'
 
-local function load_json(filename)
-	local f = assert(io.open(filename))
-	local json = cjson.decode(f:read('*a'))
-	f:close()
-	return json
-end
-
-local domain = load_json(arg[1])
+local domain = assert(json.load(arg[1]))
 for k, _ in pairs(domain.domain_names) do
 	print(k)
 end