diff --git a/package/gluon-alfred/Makefile b/package/gluon-alfred/Makefile
index ba3b9eb1265f6e7e41a2f4e54682a45cf3f9e23a..23a8f242c6bfcbd6acc2793e3816f121eb7862e9 100644
--- a/package/gluon-alfred/Makefile
+++ b/package/gluon-alfred/Makefile
@@ -13,13 +13,4 @@ define Package/gluon-alfred
   TITLE:=Configure alfred
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-alfred/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-alfred))
+$(eval $(call BuildPackageGluon,gluon-alfred))
diff --git a/package/gluon-authorized-keys/Makefile b/package/gluon-authorized-keys/Makefile
index 6a538f406f76b84027b337bd16530e56f8ebc31a..d6fcb0e43047d9424c7e61bb182eeb9ad2292ed1 100644
--- a/package/gluon-authorized-keys/Makefile
+++ b/package/gluon-authorized-keys/Makefile
@@ -12,17 +12,4 @@ define Package/gluon-authorized-keys
   DEPENDS:=+gluon-core
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-authorized-keys/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-authorized-keys/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-authorized-keys))
+$(eval $(call BuildPackageGluon,gluon-authorized-keys))
diff --git a/package/gluon-autoupdater/Makefile b/package/gluon-autoupdater/Makefile
index 6d8b9f07bb76073a7b0a6137d25dfaca30427fd1..b0314afecdac22f05ce48b9a894b5adb08c1d9a4 100644
--- a/package/gluon-autoupdater/Makefile
+++ b/package/gluon-autoupdater/Makefile
@@ -4,7 +4,6 @@ PKG_NAME:=gluon-autoupdater
 PKG_VERSION:=4
 
 PKG_CONFIG_DEPENDS := CONFIG_GLUON_BRANCH
-PKG_BUILD_DEPENDS := respondd
 
 include ../gluon.mk
 
@@ -22,17 +21,8 @@ config GLUON_BRANCH
 	default ""
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
 define Package/gluon-autoupdater/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/autoupdater.so
+	$(Gluon/Build/Install)
 
 ifneq ($(CONFIG_GLUON_BRANCH),"")
 	$(INSTALL_DIR) $(1)/lib/gluon/autoupdater
@@ -40,9 +30,4 @@ ifneq ($(CONFIG_GLUON_BRANCH),"")
 endif
 endef
 
-define Package/gluon-autoupdater/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-autoupdater))
+$(eval $(call BuildPackageGluon,gluon-autoupdater))
diff --git a/package/gluon-client-bridge/Makefile b/package/gluon-client-bridge/Makefile
index af2a69c8245e073bbe7c557338af39839377c18e..ccf1bcd8b344c5451c403a792863ba6b06476b12 100644
--- a/package/gluon-client-bridge/Makefile
+++ b/package/gluon-client-bridge/Makefile
@@ -12,17 +12,4 @@ define Package/gluon-client-bridge
   DEPENDS:=+gluon-core +kmod-veth
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-client-bridge/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-client-bridge/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-client-bridge))
+$(eval $(call BuildPackageGluon,gluon-client-bridge))
diff --git a/package/gluon-config-mode-autoupdater/Makefile b/package/gluon-config-mode-autoupdater/Makefile
index 07c85b371a8c7fbde0cd1e6cb79c2247070a08a8..d6a97f27bfc22ee3308eb60a540530ff74e6b113 100644
--- a/package/gluon-config-mode-autoupdater/Makefile
+++ b/package/gluon-config-mode-autoupdater/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-autoupdater
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -14,14 +12,4 @@ define Package/gluon-config-mode-autoupdater
   DEPENDS:=+gluon-config-mode-core +gluon-autoupdater
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-autoupdater,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-autoupdater/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-autoupdater,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-autoupdater))
+$(eval $(call BuildPackageGluon,gluon-config-mode-autoupdater))
diff --git a/package/gluon-config-mode-contact-info/Makefile b/package/gluon-config-mode-contact-info/Makefile
index 96cf6131953def4f62889b3263ff936815c27c58..5b84b1a5322d1781177dc60c2e6ef3a367054124 100644
--- a/package/gluon-config-mode-contact-info/Makefile
+++ b/package/gluon-config-mode-contact-info/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-contact-info
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -19,19 +17,4 @@ define Package/gluon-config-mode-contact-info/description
 	Can be made obligatory in site.conf
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-contact-info,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-contact-info/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-contact-info,$(1))
-endef
-
-define Package/gluon-config-mode-contact-info/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-contact-info))
+$(eval $(call BuildPackageGluon,gluon-config-mode-contact-info))
diff --git a/package/gluon-config-mode-core/Makefile b/package/gluon-config-mode-core/Makefile
index 6c0aeb5fe596ab7d9f45a458422afb7cbb98da75..21976dc6f110d321c944fb579e75476d84bd26eb 100644
--- a/package/gluon-config-mode-core/Makefile
+++ b/package/gluon-config-mode-core/Makefile
@@ -8,8 +8,6 @@ PKG_VERSION:=2
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-core
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -17,21 +15,13 @@ define Package/gluon-config-mode-core
   DEPENDS:=+gluon-setup-mode +gluon-web-model +gluon-config-mode-theme +uhttpd
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-core,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
 define Package/gluon-config-mode-core/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
+	$(Gluon/Build/Install)
 
 	$(INSTALL_DIR) $(1)/lib/gluon/config-mode/view/ $(1)/lib/gluon/config-mode/www/static/
 	$(LN) /lib/gluon/web/i18n $(1)/lib/gluon/config-mode/
 	$(LN) /lib/gluon/web/view/{error,model} $(1)/lib/gluon/config-mode/view/
 	$(LN) /lib/gluon/web/www/static/gluon-web-model.js $(1)/lib/gluon/config-mode/www/static/
-
-	$(call GluonInstallI18N,gluon-config-mode-core,$(1))
 endef
 
-$(eval $(call BuildPackage,gluon-config-mode-core))
+$(eval $(call BuildPackageGluon,gluon-config-mode-core))
diff --git a/package/gluon-config-mode-domain-select/Makefile b/package/gluon-config-mode-domain-select/Makefile
index 907de1a8bb78f16c28c712f82e0a5142dd038755..410ac964d040518254eeb6b3079a53a4efb0267d 100644
--- a/package/gluon-config-mode-domain-select/Makefile
+++ b/package/gluon-config-mode-domain-select/Makefile
@@ -12,17 +12,4 @@ define Package/gluon-config-mode-domain-select
   DEPENDS:=+gluon-config-mode-core @GLUON_MULTIDOMAIN
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-domain-select/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-config-domain-select/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-domain-select))
+$(eval $(call BuildPackageGluon,gluon-config-mode-domain-select))
diff --git a/package/gluon-config-mode-geo-location/Makefile b/package/gluon-config-mode-geo-location/Makefile
index a63d23416a91604901bc5851c81931fd46b54485..e1482de9bd0a90160d5fef784f9865abd351b39d 100644
--- a/package/gluon-config-mode-geo-location/Makefile
+++ b/package/gluon-config-mode-geo-location/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-geo-location
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -14,19 +12,4 @@ define Package/gluon-config-mode-geo-location
   DEPENDS:=+gluon-config-mode-core +gluon-node-info
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-geo-location,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-geo-location/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-geo-location,$(1))
-endef
-
-define Package/gluon-config-mode-geo-location/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-geo-location))
+$(eval $(call BuildPackageGluon,gluon-config-mode-geo-location))
diff --git a/package/gluon-config-mode-hostname/Makefile b/package/gluon-config-mode-hostname/Makefile
index 2b435340adadfaaf1c9c011b2483b604e710e121..f4dfd7e8742a632b585e626ac0f9969644a91651 100644
--- a/package/gluon-config-mode-hostname/Makefile
+++ b/package/gluon-config-mode-hostname/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-hostname
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -14,14 +12,4 @@ define Package/gluon-config-mode-hostname
   DEPENDS:=+gluon-config-mode-core
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-hostname,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-hostname/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-hostname,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-hostname))
+$(eval $(call BuildPackageGluon,gluon-config-mode-hostname))
diff --git a/package/gluon-config-mode-mesh-vpn/Makefile b/package/gluon-config-mode-mesh-vpn/Makefile
index 2cd045946667e2e8d5b8cb2cb6e28f4f64877e5e..549dbdbddec64628f7c584d54c6562479baac95a 100644
--- a/package/gluon-config-mode-mesh-vpn/Makefile
+++ b/package/gluon-config-mode-mesh-vpn/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=2
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-mesh-vpn
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -14,14 +12,4 @@ define Package/gluon-config-mode-mesh-vpn
   DEPENDS:=+gluon-config-mode-core +gluon-mesh-vpn-core
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-mesh-vpn,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-config-mode-mesh-vpn/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-mesh-vpn,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-mesh-vpn))
+$(eval $(call BuildPackageGluon,gluon-config-mode-mesh-vpn))
diff --git a/package/gluon-config-mode-theme/Makefile b/package/gluon-config-mode-theme/Makefile
index d8bf6b588f1049e87df808ad37c0ffadc02e910a..34e2a0d4039f27ce1e43c95dcf3005b2d6db2b88 100644
--- a/package/gluon-config-mode-theme/Makefile
+++ b/package/gluon-config-mode-theme/Makefile
@@ -8,8 +8,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-config-mode-theme
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -17,13 +15,4 @@ define Package/gluon-config-mode-theme
   DEPENDS:=+gluon-core +gluon-web
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-config-mode-theme,i18n)
-endef
-
-define Package/gluon-config-mode-theme/install
-	$(CP) ./files/* $(1)/
-	$(call GluonInstallI18N,gluon-config-mode-theme,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-config-mode-theme))
+$(eval $(call BuildPackageGluon,gluon-config-mode-theme))
diff --git a/package/gluon-core/Makefile b/package/gluon-core/Makefile
index 00d0b6f73985294b1ef123b2fe110f33c391e392..1b83c424ab2a9e9e5c2d4927c6e1f41218273be3 100644
--- a/package/gluon-core/Makefile
+++ b/package/gluon-core/Makefile
@@ -7,6 +7,8 @@ PKG_VERSION:=$(if $(DUMP),x,$(GLUON_VERSION))
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
+GLUON_PKG_MAKE:=1
+
 include ../gluon.mk
 include $(INCLUDE_DIR)/cmake.mk
 
@@ -23,23 +25,11 @@ define Package/gluon-core/description
 	Gluon community wifi mesh firmware framework: core
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default,all)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
 define Package/gluon-core/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(CP) $(PKG_INSTALL_DIR)/* $(1)/
+	$(Gluon/Build/Install)
 
 	$(INSTALL_DIR) $(1)/lib/gluon
 	echo '$(GLUON_VERSION)' > $(1)/lib/gluon/gluon-version
 endef
 
-define Package/gluon-core/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-core))
+$(eval $(call BuildPackageGluon,gluon-core))
diff --git a/package/gluon-ebtables-filter-multicast/Makefile b/package/gluon-ebtables-filter-multicast/Makefile
index 6771d16bbc2f69fe46882114336edbbc21822fda..1b500fd56d02cfa0162a0abbbdf5f1ac6cc94c4c 100644
--- a/package/gluon-ebtables-filter-multicast/Makefile
+++ b/package/gluon-ebtables-filter-multicast/Makefile
@@ -4,7 +4,7 @@ PKG_NAME:=gluon-ebtables-filter-multicast
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
-include $(INCLUDE_DIR)/package.mk
+include ../gluon.mk
 
 define Package/gluon-ebtables-filter-multicast
   SECTION:=gluon
@@ -21,11 +21,4 @@ define Package/gluon-ebtables-filter-multicast/description
 	Allowed protocols are: DHCP, DHCPv6, ARP, ICMP, ICMPv6, BitTorrent local peer discovery, BABEL and OSPF
 endef
 
-define Build/Compile
-endef
-
-define Package/gluon-ebtables-filter-multicast/install
-	$(CP) ./files/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-ebtables-filter-multicast))
+$(eval $(call BuildPackageGluon,gluon-ebtables-filter-multicast))
diff --git a/package/gluon-ebtables-filter-ra-dhcp/Makefile b/package/gluon-ebtables-filter-ra-dhcp/Makefile
index fd9903271e739c0f21a92cd775e1961c59e828bd..30f5238a0065a293446b63e1cbe360b0eaba7086 100644
--- a/package/gluon-ebtables-filter-ra-dhcp/Makefile
+++ b/package/gluon-ebtables-filter-ra-dhcp/Makefile
@@ -4,7 +4,7 @@ PKG_NAME:=gluon-ebtables-filter-ra-dhcp
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
-include $(INCLUDE_DIR)/package.mk
+include ../gluon.mk
 
 define Package/gluon-ebtables-filter-ra-dhcp
   SECTION:=gluon
@@ -20,11 +20,4 @@ define Package/gluon-ebtables-filter-ra-dhcp/description
 	client network, and not vice-versa.
 endef
 
-define Build/Compile
-endef
-
-define Package/gluon-ebtables-filter-ra-dhcp/install
-	$(CP) ./files/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-ebtables-filter-ra-dhcp))
+$(eval $(call BuildPackageGluon,gluon-ebtables-filter-ra-dhcp))
diff --git a/package/gluon-ebtables-limit-arp/Makefile b/package/gluon-ebtables-limit-arp/Makefile
index d649025a5f46705be4e09fddcf7cb7d374d88d67..399cca2b76f486b10c92d17a1aa4c81e14a87e9c 100644
--- a/package/gluon-ebtables-limit-arp/Makefile
+++ b/package/gluon-ebtables-limit-arp/Makefile
@@ -4,6 +4,8 @@ PKG_NAME:=gluon-ebtables-limit-arp
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
+GLUON_PKG_MAKE:=1
+
 include ../gluon.mk
 
 define Package/gluon-ebtables-limit-arp
@@ -37,9 +39,10 @@ define Package/gluon-ebtables-limit-arp/description
 endef
 
 define Package/gluon-ebtables-limit-arp/install
-	mkdir -p $(1)/usr/sbin/
+	$(Gluon/Build/Install)
+
+	$(INSTALL_DIR) $(1)/usr/sbin/
 	$(CP) $(PKG_BUILD_DIR)/gluon-arp-limiter $(1)/usr/sbin/gluon-arp-limiter
-	$(CP) ./files/* $(1)/
 endef
 
-$(eval $(call BuildPackage,gluon-ebtables-limit-arp))
+$(eval $(call BuildPackageGluon,gluon-ebtables-limit-arp))
diff --git a/package/gluon-ebtables-source-filter/Makefile b/package/gluon-ebtables-source-filter/Makefile
index 8016dc7cb923ceae7f4d1d57335621af2762435a..d19b047ba6cf8da1bd12820185616bb514e19268 100644
--- a/package/gluon-ebtables-source-filter/Makefile
+++ b/package/gluon-ebtables-source-filter/Makefile
@@ -18,16 +18,4 @@ define Package/gluon-ebtables-source-filter/description
 	traffic entering the network via the nodes.
 endef
 
-define Build/Compile
-endef
-
-define Package/gluon-ebtables-source-filter/install
-	$(CP) ./files/* $(1)/
-endef
-
-define Package/gluon-ebtables-source-filter/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-ebtables-source-filter))
+$(eval $(call BuildPackageGluon,gluon-ebtables-source-filter))
diff --git a/package/gluon-ebtables/Makefile b/package/gluon-ebtables/Makefile
index b97e10d38ef6ecdda8a1efb1b76c97aa970c2436..f5ee0e38a796aa3035f3c5a4b0d9b8addd0cb9e1 100644
--- a/package/gluon-ebtables/Makefile
+++ b/package/gluon-ebtables/Makefile
@@ -17,16 +17,4 @@ define Package/gluon-ebtables/description
 	Gluon community wifi mesh firmware framework: ebtables support
 endef
 
-define Build/Compile
-endef
-
-define Package/gluon-ebtables/install
-	$(CP) ./files/* $(1)/
-endef
-
-define Package/gluon-ebtables/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-ebtables))
+$(eval $(call BuildPackageGluon,gluon-ebtables))
diff --git a/package/gluon-l3roamd/Makefile b/package/gluon-l3roamd/Makefile
index 4b4c438adf12f4cb2378717d3502994cf264c6c0..0488338743484793a969d8d09341d4a717df0354 100644
--- a/package/gluon-l3roamd/Makefile
+++ b/package/gluon-l3roamd/Makefile
@@ -12,13 +12,4 @@ define Package/gluon-l3roamd
   DEPENDS:=+gluon-core +l3roamd
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-l3roamd/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-l3roamd))
+$(eval $(call BuildPackageGluon,gluon-l3roamd))
diff --git a/package/gluon-lock-password/Makefile b/package/gluon-lock-password/Makefile
index 3de51fac563af49e6b8cab4d07a3d4784a00b591..f62820066d5dce19abbf31dde38cc5b62f236d4b 100644
--- a/package/gluon-lock-password/Makefile
+++ b/package/gluon-lock-password/Makefile
@@ -4,7 +4,7 @@ PKG_NAME:=gluon-lock-password
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
-include $(INCLUDE_DIR)/package.mk
+include ../gluon.mk
 
 define Package/gluon-lock-password
   SECTION:=gluon
@@ -17,11 +17,4 @@ define Package/gluon-lock-password/description
 	This packages locks the root account by default.
 endef
 
-define Build/Compile
-endef
-
-define Package/gluon-lock-password/install
-	$(CP) ./files/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-lock-password))
+$(eval $(call BuildPackageGluon,gluon-lock-password))
diff --git a/package/gluon-mesh-batman-adv/Makefile b/package/gluon-mesh-batman-adv/Makefile
index b647ba75ecb733cf68a0b73a613c8c5bdf9d0d24..22355798b5d289d5cb29f0ee0526297ca4f7a1d6 100644
--- a/package/gluon-mesh-batman-adv/Makefile
+++ b/package/gluon-mesh-batman-adv/Makefile
@@ -3,8 +3,6 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=gluon-mesh-batman-adv
 PKG_VERSION:=1
 
-PKG_BUILD_DEPENDS := respondd
-
 include ../gluon.mk
 
 define Package/gluon-mesh-batman-adv/common
@@ -27,37 +25,19 @@ $(Package/gluon-mesh-batman-adv/common)
   DEPENDS+=+kmod-batman-adv +batctl
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-mesh-batman-adv/common/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/mesh-batman-adv.so
+define Package/gluon-mesh-batman-adv-14/install
+	$(Gluon/Build/Install)
 
 	$(INSTALL_DIR) $(1)/lib/gluon/mesh-batman-adv
-endef
-
-define Package/gluon-mesh-batman-adv-14/install
-$(Package/gluon-mesh-batman-adv/common/install)
 	echo 14 > $(1)/lib/gluon/mesh-batman-adv/compat
 endef
 
 define Package/gluon-mesh-batman-adv-15/install
-$(Package/gluon-mesh-batman-adv/common/install)
-	echo 15 > $(1)/lib/gluon/mesh-batman-adv/compat
-endef
+	$(Gluon/Build/Install)
 
-define Package/gluon-mesh-batman-adv/common/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
+	$(INSTALL_DIR) $(1)/lib/gluon/mesh-batman-adv
+	echo 15 > $(1)/lib/gluon/mesh-batman-adv/compat
 endef
-Package/gluon-mesh-batman-adv-14/postinst := $(Package/gluon-mesh-batman-adv/common/postinst)
-Package/gluon-mesh-batman-adv-15/postinst := $(Package/gluon-mesh-batman-adv/common/postinst)
-
 
-$(eval $(call BuildPackage,gluon-mesh-batman-adv-14))
-$(eval $(call BuildPackage,gluon-mesh-batman-adv-15))
+$(eval $(call BuildPackageGluon,gluon-mesh-batman-adv-14))
+$(eval $(call BuildPackageGluon,gluon-mesh-batman-adv-15))
diff --git a/package/gluon-mesh-vpn-core/Makefile b/package/gluon-mesh-vpn-core/Makefile
index 46b3009614a2553a5bf4139805511f840c347839..263ec217347ac9e0788a6c7e316156b30b408263 100644
--- a/package/gluon-mesh-vpn-core/Makefile
+++ b/package/gluon-mesh-vpn-core/Makefile
@@ -13,18 +13,4 @@ define Package/gluon-mesh-vpn-core
   USERID:=:gluon-mesh-vpn=800
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-mesh-vpn-core/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-mesh-vpn-core/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-mesh-vpn-core))
+$(eval $(call BuildPackageGluon,gluon-mesh-vpn-core))
diff --git a/package/gluon-mesh-vpn-fastd/Makefile b/package/gluon-mesh-vpn-fastd/Makefile
index 7e6071996e0e68ed5fdf0cf5af3a72eb8d5fb25b..50b35e5acc3a5d4981af58d7754fd5c3136996ed 100644
--- a/package/gluon-mesh-vpn-fastd/Makefile
+++ b/package/gluon-mesh-vpn-fastd/Makefile
@@ -3,8 +3,6 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=gluon-mesh-vpn-fastd
 PKG_VERSION:=3
 
-PKG_BUILD_DEPENDS := respondd
-
 include ../gluon.mk
 
 define Package/gluon-mesh-vpn-fastd
@@ -14,21 +12,4 @@ define Package/gluon-mesh-vpn-fastd
   DEPENDS:=+gluon-core +libgluonutil +gluon-mesh-vpn-core +fastd
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-mesh-vpn-fastd/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/mesh-vpn-fastd.so
-endef
-
-define Package/gluon-mesh-vpn-fastd/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-mesh-vpn-fastd))
+$(eval $(call BuildPackageGluon,gluon-mesh-vpn-fastd))
diff --git a/package/gluon-mesh-vpn-tunneldigger/Makefile b/package/gluon-mesh-vpn-tunneldigger/Makefile
index 64e6b5d9dd33bfe8d5de8dd8dcc6f85a9b760748..8b8099b147746f36b0edd595d11d7bfd67237db5 100644
--- a/package/gluon-mesh-vpn-tunneldigger/Makefile
+++ b/package/gluon-mesh-vpn-tunneldigger/Makefile
@@ -12,18 +12,4 @@ define Package/gluon-mesh-vpn-tunneldigger
   DEPENDS:=+gluon-core +gluon-mesh-vpn-core +tunneldigger
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-mesh-vpn-tunneldigger/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-mesh-vpn-tunneldigger/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-mesh-vpn-tunneldigger))
+$(eval $(call BuildPackageGluon,gluon-mesh-vpn-tunneldigger))
diff --git a/package/gluon-neighbour-info/Makefile b/package/gluon-neighbour-info/Makefile
index d56f518866bf7ac92279e8a4a0ddad0dd9417acd..11d9465f150f645d5cf904305afcc4ac18818be8 100644
--- a/package/gluon-neighbour-info/Makefile
+++ b/package/gluon-neighbour-info/Makefile
@@ -4,6 +4,8 @@ PKG_NAME:=gluon-neighbour-info
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
+GLUON_PKG_MAKE:=1
+
 include ../gluon.mk
 
 define Package/gluon-neighbour-info
@@ -17,15 +19,11 @@ define Package/gluon-neighbour-info/description
 	Gluon community wifi mesh firmware framework: neighbour-info
 endef
 
-define Build/Compile
-	$(Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
 define Package/gluon-neighbour-info/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
+	$(Gluon/Build/Install)
+
 	$(INSTALL_DIR) $(1)/usr/bin
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/gluon-neighbour-info $(1)/usr/bin/
 endef
 
-$(eval $(call BuildPackage,gluon-neighbour-info))
+$(eval $(call BuildPackageGluon,gluon-neighbour-info))
diff --git a/package/gluon-node-info/Makefile b/package/gluon-node-info/Makefile
index c0b9487e51d8133c02b30ccd8fa4a079ec8d7fba..037c2e66ab24ca90cb39d7359f77a53eb88469cf 100644
--- a/package/gluon-node-info/Makefile
+++ b/package/gluon-node-info/Makefile
@@ -4,11 +4,8 @@ PKG_NAME:=gluon-node-info
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
-PKG_BUILD_DEPENDS := respondd
-
 include ../gluon.mk
 
-
 define Package/gluon-node-info
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -16,21 +13,4 @@ define Package/gluon-node-info
   DEPENDS:=+gluon-core +libgluonutil
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-node-info/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/node-info.so
-endef
-
-define Package/gluon-node-info/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-node-info))
+$(eval $(call BuildPackageGluon,gluon-node-info))
diff --git a/package/gluon-radv-filterd/Makefile b/package/gluon-radv-filterd/Makefile
index 2e9ae55932068f20380a0494db0672dd836a5922..23485130fc3858bc99bdb4318564de1ae3a44e1f 100644
--- a/package/gluon-radv-filterd/Makefile
+++ b/package/gluon-radv-filterd/Makefile
@@ -4,8 +4,6 @@ PKG_NAME:=gluon-radv-filterd
 PKG_VERSION:=1
 PKG_RELEASE:=1
 
-PKG_BUILD_DEPENDS := respondd
-
 include ../gluon.mk
 
 define Package/gluon-radv-filterd
@@ -20,18 +18,10 @@ MAKE_VARS += \
         LIBNL_GENL_NAME="libnl-tiny"
 
 define Package/gluon-radv-filterd/install
-	$(CP) ./files/* $(1)/
+	$(Gluon/Build/Install)
 
 	$(INSTALL_DIR) $(1)/usr/sbin/
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/gluon-radv-filterd $(1)/usr/sbin/
-
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/radv-filterd.so
-endef
-
-define Package/gluon-radv-filterd/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
 endef
 
-$(eval $(call BuildPackage,gluon-radv-filterd))
+$(eval $(call BuildPackageGluon,gluon-radv-filterd))
diff --git a/package/gluon-radvd/Makefile b/package/gluon-radvd/Makefile
index c039c500727b4aaea3b8052803c7fcebcf101a66..7bcdaafd2aa5d7bcf25c842b9d23c3cc4353504f 100644
--- a/package/gluon-radvd/Makefile
+++ b/package/gluon-radvd/Makefile
@@ -16,13 +16,4 @@ define Package/gluon-radvd/description
 	Gluon community wifi mesh firmware framework: Advertise an IPv6 prefix from the node
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-radvd/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-radvd))
+$(eval $(call BuildPackageGluon,gluon-radvd))
diff --git a/package/gluon-respondd/Makefile b/package/gluon-respondd/Makefile
index e372064ccee3b56cc8554834d54518cb4b5a7322..9dc3f0f3a072b8bdbae7708d7cba2ab1bf901417 100644
--- a/package/gluon-respondd/Makefile
+++ b/package/gluon-respondd/Makefile
@@ -12,16 +12,4 @@ define Package/gluon-respondd
   DEPENDS:=+gluon-core +libplatforminfo +libgluonutil +libuci +ubus +respondd
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-respondd/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(INSTALL_DIR) $(1)/lib/gluon/respondd
-	$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/respondd.so
-endef
-
-$(eval $(call BuildPackage,gluon-respondd))
+$(eval $(call BuildPackageGluon,gluon-respondd))
diff --git a/package/gluon-setup-mode/Makefile b/package/gluon-setup-mode/Makefile
index 57d94a6cf8096ee9cb09ce13548673159f20d251..6e11f420d8d2dfb45b456429730016af3cf3d8d4 100644
--- a/package/gluon-setup-mode/Makefile
+++ b/package/gluon-setup-mode/Makefile
@@ -19,18 +19,4 @@ define Package/gluon-setup-mode/description
 	Offline mode to perform basic setup in a secure manner.
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-setup-mode/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-define Package/gluon-setup-mode/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-setup-mode))
+$(eval $(call BuildPackageGluon,gluon-setup-mode))
diff --git a/package/gluon-site/Makefile b/package/gluon-site/Makefile
index ca88e5f52a58fd4659668cdceca8d307147d14ec..5b7a6968789cbd4a2474fab213329d3d62025469 100644
--- a/package/gluon-site/Makefile
+++ b/package/gluon-site/Makefile
@@ -58,7 +58,7 @@ define Build/Compile
 	)
   endif
 
-	$(call GluonBuildI18N,gluon-site,$(GLUON_SITEDIR)/i18n)
+	$(call GluonBuildI18N,$(GLUON_SITEDIR)/i18n)
 endef
 
 define Package/gluon-site/install
@@ -72,7 +72,7 @@ define Package/gluon-site/install
 	echo '$(GLUON_SITE_VERSION)' > $(1)/lib/gluon/site-version
 	echo '$(call qstrip,$(CONFIG_GLUON_RELEASE))' > $(1)/lib/gluon/release
 
-	$(call GluonInstallI18N,gluon-site,$(1))
+	$(GluonInstallI18N)
 endef
 
 $(eval $(call BuildPackage,gluon-site))
diff --git a/package/gluon-status-page/Makefile b/package/gluon-status-page/Makefile
index 68079ee02dd613100e6bd7db6f3c3a88e6375c70..acf4cef8587d779fe08b9bd886eac7e55f1fe378 100644
--- a/package/gluon-status-page/Makefile
+++ b/package/gluon-status-page/Makefile
@@ -3,9 +3,9 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=gluon-status-page
 PKG_VERSION:=3
 
-include ../gluon.mk
+GLUON_PKG_MAKE:=1
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
+include ../gluon.mk
 
 define Package/gluon-status-page
   SECTION:=gluon
@@ -14,24 +14,15 @@ define Package/gluon-status-page
   DEPENDS:=+gluon-web +gluon-neighbour-info +gluon-respondd +uhttpd +sse-multiplex +libiwinfo +libjson-c +libnl-tiny +libubus-lua +libbatadv
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-	$(call GluonBuildI18N,gluon-status-page,i18n)
-endef
-
 define Package/gluon-status-page/install
+	$(Gluon/Build/Install)
+
 	$(INSTALL_DIR) $(1)/lib/gluon/status-page/providers
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/{neighbours-batadv,stations} $(1)/lib/gluon/status-page/providers/
 
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-
 	$(INSTALL_DIR) $(1)/lib/gluon/status-page/view/
 	$(LN) /lib/gluon/web/i18n $(1)/lib/gluon/status-page/
 	$(LN) /lib/gluon/web/view/error $(1)/lib/gluon/status-page/view/
-
-	$(call GluonInstallI18N,gluon-status-page,$(1))
 endef
 
-$(eval $(call BuildPackage,gluon-status-page))
+$(eval $(call BuildPackageGluon,gluon-status-page))
diff --git a/package/gluon-wan-dnsmasq/Makefile b/package/gluon-wan-dnsmasq/Makefile
index f1cf3c035ee6be617d73ff0b740bd076a34c0b28..75be1b539ee013c3a55d0158c6d43c487adc89ed 100644
--- a/package/gluon-wan-dnsmasq/Makefile
+++ b/package/gluon-wan-dnsmasq/Makefile
@@ -16,13 +16,4 @@ define Package/gluon-wan-dnsmasq/description
 	Gluon community wifi mesh firmware framework: Support for a secondary DNS server using the WAN interface
 endef
 
-define Build/Compile
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-wan-dnsmasq/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-endef
-
-$(eval $(call BuildPackage,gluon-wan-dnsmasq))
+$(eval $(call BuildPackageGluon,gluon-wan-dnsmasq))
diff --git a/package/gluon-web-admin/Makefile b/package/gluon-web-admin/Makefile
index eb82c8d77f340b4d04bf25557f01d54f811edb7b..881db831a6ee4a9a46b327910cea2efef7f1bc90 100644
--- a/package/gluon-web-admin/Makefile
+++ b/package/gluon-web-admin/Makefile
@@ -9,8 +9,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-admin
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -18,20 +16,4 @@ define Package/gluon-web-admin
   DEPENDS:=+gluon-config-mode-core +pretty-hostname
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-admin,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-admin/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-admin,$(1))
-endef
-
-define Package/gluon-web-admin/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-web-admin))
+$(eval $(call BuildPackageGluon,gluon-web-admin))
diff --git a/package/gluon-web-autoupdater/Makefile b/package/gluon-web-autoupdater/Makefile
index 4bc856bdd330586814f747fa4ff66dfd5413346f..daa7508f39ed324449b7f78a60ca5241230eecaa 100644
--- a/package/gluon-web-autoupdater/Makefile
+++ b/package/gluon-web-autoupdater/Makefile
@@ -9,8 +9,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-autoupdater
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -18,14 +16,4 @@ define Package/gluon-web-autoupdater
   DEPENDS:=+gluon-web-admin +gluon-autoupdater
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-autoupdater,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-autoupdater/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-autoupdater,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-web-autoupdater))
+$(eval $(call BuildPackageGluon,gluon-web-autoupdater))
diff --git a/package/gluon-web-logging/Makefile b/package/gluon-web-logging/Makefile
index a810b52d01f3d319da3b074e76b057d08ae8b123..4cd1076cbe1ce1c9bc8bab9edaad61f8c946223d 100644
--- a/package/gluon-web-logging/Makefile
+++ b/package/gluon-web-logging/Makefile
@@ -6,8 +6,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-logging
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -15,14 +13,4 @@ define Package/gluon-web-logging
   TITLE:=UI for remote syslog configuration
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-logging,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-logging/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-logging,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-web-logging))
+$(eval $(call BuildPackageGluon,gluon-web-logging))
diff --git a/package/gluon-web-mesh-vpn-fastd/Makefile b/package/gluon-web-mesh-vpn-fastd/Makefile
index 3df01b42c2ad3f55bf9eac6a05c369dc9fdb9d67..da13d43d624356c9f1ead25fc6c0f97dd93cafac 100644
--- a/package/gluon-web-mesh-vpn-fastd/Makefile
+++ b/package/gluon-web-mesh-vpn-fastd/Makefile
@@ -6,8 +6,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-mesh-vpn-fastd
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -15,20 +13,4 @@ define Package/gluon-web-mesh-vpn-fastd
   DEPENDS:=+gluon-web-admin +gluon-mesh-vpn-fastd
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-mesh-vpn-fastd,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-mesh-vpn-fastd/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-mesh-vpn-fastd,$(1))
-endef
-
-define Package/gluon-web-mesh-vpn-fastd/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-web-mesh-vpn-fastd))
+$(eval $(call BuildPackageGluon,gluon-web-mesh-vpn-fastd))
diff --git a/package/gluon-web-model/Makefile b/package/gluon-web-model/Makefile
index 846fdfb7e19eabdfda21cabaeca77dc4fe7d7ddf..e2badbd4278f5a598253dfea1bf55031487cc480 100644
--- a/package/gluon-web-model/Makefile
+++ b/package/gluon-web-model/Makefile
@@ -12,16 +12,4 @@ define Package/gluon-web-model
   DEPENDS:=+gluon-web
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-model,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-model/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-model,$(1))
-
-endef
-
-$(eval $(call BuildPackage,gluon-web-model))
+$(eval $(call BuildPackageGluon,gluon-web-model))
diff --git a/package/gluon-web-network/Makefile b/package/gluon-web-network/Makefile
index 096a8d68564e03c3d8bad8dc588478074f249680..a7c14254aad4e9687627af5f2c2d2c772650437f 100644
--- a/package/gluon-web-network/Makefile
+++ b/package/gluon-web-network/Makefile
@@ -9,8 +9,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-network
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -18,14 +16,4 @@ define Package/gluon-web-network
   DEPENDS:=+gluon-web-admin +gluon-client-bridge
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-network,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-network/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-network,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-web-network))
+$(eval $(call BuildPackageGluon,gluon-web-network))
diff --git a/package/gluon-web-node-role/Makefile b/package/gluon-web-node-role/Makefile
index 40a1b23359cce78b20fa8a348e2b7af6ffbdeaf7..099b9c413b7e594ff1206feba3564d7faaf65742 100644
--- a/package/gluon-web-node-role/Makefile
+++ b/package/gluon-web-node-role/Makefile
@@ -5,8 +5,6 @@ PKG_VERSION:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-node-role
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -14,19 +12,4 @@ define Package/gluon-web-node-role
   TITLE:=UI for specifying node role
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-node-role,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-node-role/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-node-role,$(1))
-endef
-
-define Package/gluon-web-node-role/postinst
-#!/bin/sh
-$(call GluonCheckSite,check_site.lua)
-endef
-
-$(eval $(call BuildPackage,gluon-web-node-role))
+$(eval $(call BuildPackageGluon,gluon-web-node-role))
diff --git a/package/gluon-web-private-wifi/Makefile b/package/gluon-web-private-wifi/Makefile
index b8171aea1db7bf016f96615e2d624a251cd0cc89..313c0ce42d3bbeedf27421956d5ab4280d0d394c 100644
--- a/package/gluon-web-private-wifi/Makefile
+++ b/package/gluon-web-private-wifi/Makefile
@@ -6,8 +6,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-private-wifi
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -15,14 +13,4 @@ define Package/gluon-web-private-wifi
   TITLE:=UI for activating a private WLAN
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-private-wifi,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-private-wifi/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-private-wifi,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-web-private-wifi))
+$(eval $(call BuildPackageGluon,gluon-web-private-wifi))
diff --git a/package/gluon-web-wifi-config/Makefile b/package/gluon-web-wifi-config/Makefile
index 3f889e985a93bde580e8148cacefc3691309fb5e..398bf42e45daeab5a5731abdbefaebbb37cc1e9b 100644
--- a/package/gluon-web-wifi-config/Makefile
+++ b/package/gluon-web-wifi-config/Makefile
@@ -6,8 +6,6 @@ PKG_RELEASE:=1
 
 include ../gluon.mk
 
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
 define Package/gluon-web-wifi-config
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -15,14 +13,4 @@ define Package/gluon-web-wifi-config
   TITLE:=UI for Wifi Settings
 endef
 
-define Build/Compile
-	$(call GluonBuildI18N,gluon-web-wifi-config,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web-wifi-config/install
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web-wifi-config,$(1))
-endef
-
-$(eval $(call BuildPackage,gluon-web-wifi-config))
+$(eval $(call BuildPackageGluon,gluon-web-wifi-config))
diff --git a/package/gluon-web/Makefile b/package/gluon-web/Makefile
index 113d033d5cc18382eecd001a85e02509bf1deced..8606ad6d065dd86c48e888f71d9a6b0b890c4379 100644
--- a/package/gluon-web/Makefile
+++ b/package/gluon-web/Makefile
@@ -3,12 +3,11 @@ include $(TOPDIR)/rules.mk
 PKG_NAME:=gluon-web
 PKG_VERSION:=1
 
-include ../gluon.mk
-
-PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
-
+GLUON_PKG_MAKE:=1
 PKG_INSTALL:=1
 
+include ../gluon.mk
+
 define Package/gluon-web
   SECTION:=gluon
   CATEGORY:=Gluon
@@ -28,18 +27,4 @@ define Package/gluon-web/config
 $(foreach lang,$(GLUON_SUPPORTED_LANGS),$(call lang-config,$(lang)))
 endef
 
-define Build/Compile
-	$(call Build/Compile/Default)
-	$(call GluonBuildI18N,gluon-web,i18n)
-	$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
-endef
-
-define Package/gluon-web/install
-	$(CP) ./files/* $(1)/
-	$(CP) $(PKG_INSTALL_DIR)/* $(1)/
-	$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
-	$(call GluonInstallI18N,gluon-web,$(1))
-
-endef
-
-$(eval $(call BuildPackage,gluon-web))
+$(eval $(call BuildPackageGluon,gluon-web))
diff --git a/package/gluon.mk b/package/gluon.mk
index ccf6afe36782f3662dbef5be14fc384f165bb32b..cd2783f85c1cad35da15949fcba3c80d8479b9f1 100644
--- a/package/gluon.mk
+++ b/package/gluon.mk
@@ -4,6 +4,11 @@ PKG_FILE_DEPENDS += $(GLUON_MK)
 # Dependencies for LuaSrcDiet
 PKG_BUILD_DEPENDS += luci-base/host
 
+ifneq ($(wildcard ./src/respondd.c),)
+  PKG_BUILD_DEPENDS += respondd
+  GLUON_PKG_MAKE ?= 1
+endif
+
 include $(INCLUDE_DIR)/package.mk
 
 
@@ -26,22 +31,26 @@ GLUON_LANG_fr := French
 GLUON_I18N_CONFIG := $(foreach lang,$(GLUON_SUPPORTED_LANGS),CONFIG_GLUON_WEB_LANG_$(lang))
 GLUON_ENABLED_LANGS := en $(foreach lang,$(GLUON_SUPPORTED_LANGS),$(if $(CONFIG_GLUON_WEB_LANG_$(lang)),$(lang)))
 
+ifneq ($(wildcard ./i18n/.),)
+  PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
+endif
+
 
 define GluonBuildI18N
 	mkdir -p $$(PKG_BUILD_DIR)/i18n
 	for lang in $$(GLUON_ENABLED_LANGS); do \
-		if [ -e $(2)/$$$$lang.po ]; then \
-			rm -f $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
-			po2lmo $(2)/$$$$lang.po $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo; \
+		if [ -e $(1)/$$$$lang.po ]; then \
+			rm -f $$(PKG_BUILD_DIR)/i18n/$$$$lang.lmo; \
+			po2lmo $(1)/$$$$lang.po $$(PKG_BUILD_DIR)/i18n/$$$$lang.lmo; \
 		fi; \
 	done
 endef
 
 define GluonInstallI18N
-	$$(INSTALL_DIR) $(2)/lib/gluon/web/i18n
+	$$(INSTALL_DIR) $(1)/lib/gluon/web/i18n
 	for lang in $$(GLUON_ENABLED_LANGS); do \
-		if [ -e $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo ]; then \
-			$$(INSTALL_DATA) $$(PKG_BUILD_DIR)/i18n/$(1).$$$$lang.lmo $(2)/lib/gluon/web/i18n/$(1).$$$$lang.lmo; \
+		if [ -e $$(PKG_BUILD_DIR)/i18n/$$$$lang.lmo ]; then \
+			$$(INSTALL_DATA) $$(PKG_BUILD_DIR)/i18n/$$$$lang.lmo $(1)/lib/gluon/web/i18n/$(PKG_NAME).$$$$lang.lmo; \
 		fi; \
 	done
 endef
@@ -56,3 +65,52 @@ define GluonSrcDiet
 		fi; \
 	done
 endef
+
+
+GLUON_PKG_MAKE ?= 0
+
+define Gluon/Build/Compile
+	$(if $(findstring $(GLUON_PKG_MAKE),1),
+		$(Build/Compile/Default)
+	)
+	$(if $(wildcard ./luasrc/.),
+		$(call GluonSrcDiet,luasrc,$(PKG_BUILD_DIR)/luadest/)
+	)
+	$(if $(wildcard ./i18n/.),
+		$(call GluonBuildI18N,i18n)
+	)
+endef
+
+define Gluon/Build/Install
+	$(if $(findstring $(PKG_INSTALL),1),
+		$(CP) $(PKG_INSTALL_DIR)/. $(1)/
+	)
+	$(if $(wildcard ./files/.),
+		$(CP) ./files/. $(1)/
+	)
+	$(if $(wildcard ./luasrc/.),
+		$(CP) $(PKG_BUILD_DIR)/luadest/. $(1)/
+	)
+	$(if $(wildcard ./src/respondd.c),
+		$(INSTALL_DIR) $(1)/lib/gluon/respondd
+		$(CP) $(PKG_BUILD_DIR)/respondd.so $(1)/lib/gluon/respondd/$(PKG_NAME).so
+	)
+	$(if $(wildcard ./i18n/.),
+		$(GluonInstallI18N)
+	)
+endef
+
+Build/Compile=$(call Gluon/Build/Compile)
+
+define BuildPackageGluon
+  Package/$(1)/install ?= $$(Gluon/Build/Install)
+
+  ifneq ($(wildcard check_site.lua),)
+    define Package/$(1)/postinst
+#!/bin/sh
+$$(call GluonCheckSite,check_site.lua)
+    endef
+  endif
+
+  $$(eval $$(call BuildPackage,$(1)))
+endef
diff --git a/package/libgluonutil/Makefile b/package/libgluonutil/Makefile
index 7fd7a8657fab9e7def5678d3e663ee3ee0bbe102..e9cc45cba3ea9e115def5424dfe7566445d5427b 100644
--- a/package/libgluonutil/Makefile
+++ b/package/libgluonutil/Makefile
@@ -6,7 +6,7 @@ CMAKE_INSTALL:=1
 
 PKG_LICENSE:=BSD-2-Clause
 
-include ../gluon.mk
+include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/cmake.mk
 
 define Package/libgluonutil