diff --git a/general/external.mk b/general/external.mk
index 62f0bb76..c5e878d6 100644
--- a/general/external.mk
+++ b/general/external.mk
@@ -1,10 +1,11 @@
-export OPENIPC_SOC_VENDOR = $(call qstrip,$(BR2_OPENIPC_SOC_VENDOR))
-export OPENIPC_SOC_MODEL = $(call qstrip,$(BR2_OPENIPC_SOC_MODEL))
-export OPENIPC_SOC_FAMILY = $(call qstrip,$(BR2_OPENIPC_SOC_FAMILY))
-export OPENIPC_FLAVOR = $(call qstrip,$(BR2_OPENIPC_FLAVOR))
+export OPENIPC_SOC_VENDOR := $(call qstrip,$(BR2_OPENIPC_SOC_VENDOR))
+export OPENIPC_SOC_MODEL := $(call qstrip,$(BR2_OPENIPC_SOC_MODEL))
+export OPENIPC_SOC_FAMILY := $(call qstrip,$(BR2_OPENIPC_SOC_FAMILY))
+export OPENIPC_FLAVOR := $(call qstrip,$(BR2_OPENIPC_FLAVOR))
 
-OPENIPC_KERNEL = $(shell git ls-remote https://github.com/openipc/linux.git $(OPENIPC_SOC_VENDOR)-$(OPENIPC_SOC_FAMILY) | cut -f1)
-OPENIPC_TOOLCHAIN = latest/$(shell $(BR2_EXTERNAL)/scripts/show_toolchains.sh $(BR2_DEFCONFIG))
-EXTERNAL_VENDOR = $(BR2_EXTERNAL)/../br-ext-chip-$(OPENIPC_SOC_VENDOR)
+EXTERNAL_SHA = $(shell git ls-remote $(1) $(2) | head -1 | cut -f1)
+EXTERNAL_VENDOR := $(BR2_EXTERNAL)/../br-ext-chip-$(OPENIPC_SOC_VENDOR)
+OPENIPC_KERNEL := $(call EXTERNAL_SHA,https://github.com/openipc/linux,$(OPENIPC_SOC_VENDOR)-$(OPENIPC_SOC_FAMILY))
+OPENIPC_TOOLCHAIN := latest/$(shell $(BR2_EXTERNAL)/scripts/show_toolchains.sh $(BR2_DEFCONFIG))
 
 include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
diff --git a/general/package/Config.in b/general/package/Config.in
index 291f77f9..e1fa5134 100644
--- a/general/package/Config.in
+++ b/general/package/Config.in
@@ -51,6 +51,7 @@ source "$BR2_EXTERNAL_GENERAL_PATH/package/libsrt-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/libsrtp-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/libwebsockets-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/linux-firmware-openipc/Config.in"
+source "$BR2_EXTERNAL_GENERAL_PATH/package/linux-patcher/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/majestic/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/majestic-fonts/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/mavfwd/Config.in"
@@ -84,7 +85,6 @@ source "$BR2_EXTERNAL_GENERAL_PATH/package/ssw101b/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/uacme-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/uqmi-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/usrsctp/Config.in"
-source "$BR2_EXTERNAL_GENERAL_PATH/package/vendor-patcher/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/vtund-openipc/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/wifibroadcast/Config.in"
 source "$BR2_EXTERNAL_GENERAL_PATH/package/xiongmai-opensdk-xm510/Config.in"
diff --git a/general/package/atbm603x/atbm603x.mk b/general/package/atbm603x/atbm603x.mk
index 105e5d12..90bd9773 100644
--- a/general/package/atbm603x/atbm603x.mk
+++ b/general/package/atbm603x/atbm603x.mk
@@ -6,7 +6,7 @@
 
 ATBM603X_SITE_METHOD = git
 ATBM603X_SITE = https://github.com/openipc/atbm_60xx
-ATBM603X_VERSION = $(shell git ls-remote $(ATBM603X_SITE) HEAD | head -1 | awk '{ print $$1 }')
+ATBM603X_VERSION = $(call EXTERNAL_SHA,$(ATBM603X_SITE),HEAD)
 
 ATBM603X_LICENSE = GPL-2.0
 
diff --git a/general/package/aura-httpd/aura-httpd.mk b/general/package/aura-httpd/aura-httpd.mk
index b38b2dbe..d155db58 100644
--- a/general/package/aura-httpd/aura-httpd.mk
+++ b/general/package/aura-httpd/aura-httpd.mk
@@ -6,7 +6,7 @@
 
 AURA_HTTPD_SITE_METHOD = git
 AURA_HTTPD_SITE = https://github.com/nekromant/aura-httpd
-AURA_HTTPD_VERSION = $(shell git ls-remote $(AURA_HTTPD_SITE) HEAD | head -1 | awk '{ print $$1 }')
+AURA_HTTPD_VERSION = $(call EXTERNAL_SHA,$(AURA_HTTPD_SITE),HEAD)
 
 AURA_HTTPD_LICENSE = MIT
 AURA_HTTPD_LICENSE_FILES = LICENSE
diff --git a/general/package/aws-producer/aws-producer.mk b/general/package/aws-producer/aws-producer.mk
index 85f4e748..d53b16c2 100644
--- a/general/package/aws-producer/aws-producer.mk
+++ b/general/package/aws-producer/aws-producer.mk
@@ -6,7 +6,7 @@
 
 AWS_PRODUCER_SITE_METHOD = git
 AWS_PRODUCER_SITE = https://github.com/awslabs/amazon-kinesis-video-streams-producer-c
-AWS_PRODUCER_VERSION = $(shell git ls-remote $(AWS_PRODUCER_SITE) HEAD | head -1 | awk '{ print $$1 }')
+AWS_PRODUCER_VERSION = $(call EXTERNAL_SHA,$(AWS_PRODUCER_SITE),HEAD)
 
 AWS_PRODUCER_INSTALL_STAGING = YES
 AWS_PRODUCER_LICENSE = Apache-2.0
diff --git a/general/package/aws-webrtc/aws-webrtc.mk b/general/package/aws-webrtc/aws-webrtc.mk
index e1c5b4ad..ea0545a4 100644
--- a/general/package/aws-webrtc/aws-webrtc.mk
+++ b/general/package/aws-webrtc/aws-webrtc.mk
@@ -6,7 +6,7 @@
 
 AWS_WEBRTC_SITE_METHOD = git
 AWS_WEBRTC_SITE = https://github.com/OpenIPC/webrtc-c
-AWS_WEBRTC_VERSION = $(shell git ls-remote $(AWS_WEBRTC_SITE) develop | head -1 | awk '{ print $$1 }')
+AWS_WEBRTC_VERSION = $(call EXTERNAL_SHA,$(AWS_WEBRTC_SITE),develop)
 
 AWS_WEBRTC_INSTALL_STAGING = YES
 AWS_WEBRTC_LICENSE = Apache-2.0
diff --git a/general/package/exfat-openipc/exfat-openipc.mk b/general/package/exfat-openipc/exfat-openipc.mk
index b8ea93b6..98bc6f0e 100644
--- a/general/package/exfat-openipc/exfat-openipc.mk
+++ b/general/package/exfat-openipc/exfat-openipc.mk
@@ -6,7 +6,7 @@
 
 EXFAT_OPENIPC_SITE_METHOD = git
 EXFAT_OPENIPC_SITE = https://github.com/namjaejeon/linux-exfat-oot
-EXFAT_OPENIPC_VERSION = $(shell git ls-remote $(EXFAT_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+EXFAT_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(EXFAT_OPENIPC_SITE),HEAD)
 
 EXFAT_OPENIPC_LICENSE = GPL-2.0
 EXFAT_OPENIPC_LICENSE_FILES = COPYING
diff --git a/general/package/fdk-aac-openipc/fdk-aac-openipc.mk b/general/package/fdk-aac-openipc/fdk-aac-openipc.mk
index bf14f974..88f390ce 100644
--- a/general/package/fdk-aac-openipc/fdk-aac-openipc.mk
+++ b/general/package/fdk-aac-openipc/fdk-aac-openipc.mk
@@ -6,7 +6,7 @@
 
 FDK_AAC_OPENIPC_SITE_METHOD = git
 FDK_AAC_OPENIPC_SITE = https://github.com/widgetii/fdk-aac
-FDK_AAC_OPENIPC_VERSION = $(shell git ls-remote $(FDK_AAC_OPENIPC_SITE) tinification | head -1 | awk '{ print $$1 }')
+FDK_AAC_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(FDK_AAC_OPENIPC_SITE),tinification)
 
 FDK_AAC_OPENIPC_LICENSE = fdk-aac license
 FDK_AAC_OPENIPC_LICENSE_FILES = NOTICE
diff --git a/general/package/gdbserver-lite/gdbserver-lite.mk b/general/package/gdbserver-lite/gdbserver-lite.mk
index 306fb5f0..d7f7ab16 100644
--- a/general/package/gdbserver-lite/gdbserver-lite.mk
+++ b/general/package/gdbserver-lite/gdbserver-lite.mk
@@ -6,7 +6,7 @@
 
 GDBSERVER_LITE_SITE_METHOD = git
 GDBSERVER_LITE_SITE = https://github.com/bet4it/gdbserver
-GDBSERVER_LITE_VERSION = $(shell git ls-remote $(GDBSERVER_LITE_SITE) HEAD | head -1 | awk '{ print $$1 }')
+GDBSERVER_LITE_VERSION = $(call EXTERNAL_SHA,$(GDBSERVER_LITE_SITE),HEAD)
 
 GDBSERVER_LITE_LICENSE = GNU General Public License v3.0
 GDBSERVER_LITE_LICENSE_FILES = LICENSE
diff --git a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk
index 3313f483..0ed69d65 100644
--- a/general/package/hisilicon-opensdk/hisilicon-opensdk.mk
+++ b/general/package/hisilicon-opensdk/hisilicon-opensdk.mk
@@ -6,7 +6,7 @@
 
 HISILICON_OPENSDK_SITE_METHOD = git
 HISILICON_OPENSDK_SITE = https://github.com/openipc/openhisilicon
-HISILICON_OPENSDK_VERSION = $(shell git ls-remote $(HISILICON_OPENSDK_SITE) HEAD | head -1 | awk '{ print $$1 }')
+HISILICON_OPENSDK_VERSION = $(call EXTERNAL_SHA,$(HISILICON_OPENSDK_SITE),HEAD)
 
 HISILICON_OPENSDK_LICENSE = GPL-3.0
 HISILICON_OPENSDK_LICENSE_FILES = LICENSE
diff --git a/general/package/ingenic-opensdk/ingenic-opensdk.mk b/general/package/ingenic-opensdk/ingenic-opensdk.mk
index ff41715a..0a7110ad 100644
--- a/general/package/ingenic-opensdk/ingenic-opensdk.mk
+++ b/general/package/ingenic-opensdk/ingenic-opensdk.mk
@@ -6,7 +6,7 @@
 
 INGENIC_OPENSDK_SITE_METHOD = git
 INGENIC_OPENSDK_SITE = https://github.com/openipc/openingenic
-INGENIC_OPENSDK_VERSION = $(shell git ls-remote $(INGENIC_OPENSDK_SITE) HEAD | head -1 | awk '{ print $$1 }')
+INGENIC_OPENSDK_VERSION = $(call EXTERNAL_SHA,$(INGENIC_OPENSDK_SITE),HEAD)
 
 INGENIC_OPENSDK_LICENSE = GPL-3.0
 INGENIC_OPENSDK_LICENSE_FILES = LICENSE
diff --git a/general/package/ipctool/ipctool.mk b/general/package/ipctool/ipctool.mk
index 2fa840e3..53bb7ac9 100644
--- a/general/package/ipctool/ipctool.mk
+++ b/general/package/ipctool/ipctool.mk
@@ -5,8 +5,8 @@
 ################################################################################
 
 IPCTOOL_SITE_METHOD = git
-IPCTOOL_SITE = http://github.com/openipc/ipctool
-IPCTOOL_VERSION = $(shell git ls-remote $(IPCTOOL_SITE) HEAD | head -1 | awk '{ print $$1 }')
+IPCTOOL_SITE = https://github.com/openipc/ipctool
+IPCTOOL_VERSION = $(call EXTERNAL_SHA,$(IPCTOOL_SITE),HEAD)
 
 IPCTOOL_LICENSE = MIT
 IPCTOOL_LICENSE_FILES = LICENSE
diff --git a/general/package/json-c-openipc/json-c-openipc.mk b/general/package/json-c-openipc/json-c-openipc.mk
index 02855152..1628d35f 100644
--- a/general/package/json-c-openipc/json-c-openipc.mk
+++ b/general/package/json-c-openipc/json-c-openipc.mk
@@ -6,7 +6,7 @@
 
 JSON_C_OPENIPC_SITE_METHOD = git
 JSON_C_OPENIPC_SITE = https://github.com/json-c/json-c
-JSON_C_OPENIPC_VERSION = $(shell git ls-remote $(JSON_C_OPENIPC_SITE) json-c-0.15-20200726 | head -1 | awk '{ print $$1 }')
+JSON_C_OPENIPC_VERSION = 9021cdcdd01fc9dbcbe1f06391848c2ac915212f
 
 JSON_C_OPENIPC_INSTALL_STAGING = YES
 JSON_C_OPENIPC_LICENSE = MIT
diff --git a/general/package/jsonfilter/jsonfilter.mk b/general/package/jsonfilter/jsonfilter.mk
index 2762ecb7..9ae65a9c 100644
--- a/general/package/jsonfilter/jsonfilter.mk
+++ b/general/package/jsonfilter/jsonfilter.mk
@@ -5,8 +5,8 @@
 ################################################################################
 
 JSONFILTER_SITE_METHOD = git
-JSONFILTER_SITE = git://git.openwrt.org/project/jsonpath
-JSONFILTER_VERSION = $(shell git ls-remote $(JSONFILTER_SITE) HEAD | head -1 | awk '{ print $$1 }')
+JSONFILTER_SITE = https://github.com/openwrt/jsonpath
+JSONFILTER_VERSION = $(call EXTERNAL_SHA,$(JSONFILTER_SITE),HEAD)
 
 JSONFILTER_LICENSE = ISC, BSD-3-Clause
 
diff --git a/general/package/libevent-openipc/libevent-openipc.mk b/general/package/libevent-openipc/libevent-openipc.mk
index 6327cf0c..b5223b21 100644
--- a/general/package/libevent-openipc/libevent-openipc.mk
+++ b/general/package/libevent-openipc/libevent-openipc.mk
@@ -6,8 +6,7 @@
 
 LIBEVENT_OPENIPC_SITE_METHOD = git
 LIBEVENT_OPENIPC_SITE = https://github.com/libevent/libevent
-LIBEVENT_OPENIPC_VERSION = fe9dc8f
-#LIBEVENT_OPENIPC_VERSION = $(shell git ls-remote $(LIBEVENT_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+LIBEVENT_OPENIPC_VERSION = fe9dc8f614db0520027e8e2adb95769193d4f0a3
 
 LIBEVENT_OPENIPC_INSTALL_STAGING = YES
 LIBEVENT_OPENIPC_LICENSE = BSD-3-Clause, OpenBSD
diff --git a/general/package/libsrtp-openipc/libsrtp-openipc.mk b/general/package/libsrtp-openipc/libsrtp-openipc.mk
index 1d85ad33..fd9be4db 100644
--- a/general/package/libsrtp-openipc/libsrtp-openipc.mk
+++ b/general/package/libsrtp-openipc/libsrtp-openipc.mk
@@ -6,7 +6,7 @@
 
 LIBSRTP_OPENIPC_SITE_METHOD = git
 LIBSRTP_OPENIPC_SITE = https://github.com/cisco/libsrtp
-LIBSRTP_OPENIPC_VERSION = $(shell git ls-remote $(LIBSRTP_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+LIBSRTP_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(LIBSRTP_OPENIPC_SITE),HEAD)
 
 LIBSRTP_OPENIPC_INSTALL_STAGING = YES
 LIBSRTP_OPENIPC_LICENSE = BSD-3-Clause
diff --git a/general/package/linux-firmware-openipc/linux-firmware-openipc.mk b/general/package/linux-firmware-openipc/linux-firmware-openipc.mk
index 1d8bac1e..7767cb14 100644
--- a/general/package/linux-firmware-openipc/linux-firmware-openipc.mk
+++ b/general/package/linux-firmware-openipc/linux-firmware-openipc.mk
@@ -6,7 +6,7 @@
 
 LINUX_FIRMWARE_OPENIPC_SITE_METHOD = git
 LINUX_FIRMWARE_OPENIPC_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware
-LINUX_FIRMWARE_OPENIPC_VERSION = $(shell git ls-remote $(LINUX_FIRMWARE_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+LINUX_FIRMWARE_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(LINUX_FIRMWARE_OPENIPC_SITE),HEAD)
 
 # WiFi RTL8188EU
 ifeq ($(BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_RTL_8188EU),y)
diff --git a/general/package/vendor-patcher/Config.in b/general/package/linux-patcher/Config.in
similarity index 53%
rename from general/package/vendor-patcher/Config.in
rename to general/package/linux-patcher/Config.in
index 3a15e62a..549ce66a 100644
--- a/general/package/vendor-patcher/Config.in
+++ b/general/package/linux-patcher/Config.in
@@ -1,5 +1,5 @@
-config BR2_PACKAGE_VENDOR_PATCHER
-	bool "vendor patcher"
+config BR2_PACKAGE_LINUX_PATCHER
+	bool "linux patcher"
 	default y if BR2_LINUX_KERNEL
 	help
 	  Linux patcher for OpenIPC
diff --git a/general/package/vendor-patcher/vendor-patcher.mk b/general/package/linux-patcher/linux-patcher.mk
similarity index 69%
rename from general/package/vendor-patcher/vendor-patcher.mk
rename to general/package/linux-patcher/linux-patcher.mk
index 5468ba97..82100bb9 100644
--- a/general/package/vendor-patcher/vendor-patcher.mk
+++ b/general/package/linux-patcher/linux-patcher.mk
@@ -1,17 +1,17 @@
 ################################################################################
 #
-# vendor-patcher
+# linux-patcher
 #
 ################################################################################
 
 ifneq ($(BR2_PACKAGE_WIRELESS_TOOLS),y)
-define VENDOR_PATCHER_CONFIG_CFG80211
+define LINUX_PATCHER_CONFIG_CFG80211
 	$(call KCONFIG_DISABLE_OPT,CONFIG_CFG80211)
 endef
 endif
 
-define VENDOR_PATCHER_LINUX_CONFIG_FIXUPS
-	$(VENDOR_PATCHER_CONFIG_CFG80211)
+define LINUX_PATCHER_LINUX_CONFIG_FIXUPS
+	$(LINUX_PATCHER_CONFIG_CFG80211)
 endef
 
 $(eval $(generic-package))
diff --git a/general/package/majestic/majestic.mk b/general/package/majestic/majestic.mk
index 1aa5728a..0d428df3 100644
--- a/general/package/majestic/majestic.mk
+++ b/general/package/majestic/majestic.mk
@@ -4,9 +4,8 @@
 #
 ################################################################################
 
-MAJESTIC_VERSION = current
-MAJESTIC_SOURCE = majestic.$(MAJESTIC_FAMILY).$(MAJESTIC_RELEASE).master.tar.bz2
 MAJESTIC_SITE = https://openipc.s3-eu-west-1.amazonaws.com
+MAJESTIC_SOURCE = majestic.$(MAJESTIC_FAMILY).$(MAJESTIC_RELEASE).master.tar.bz2
 
 MAJESTIC_LICENSE = PROPRIETARY
 MAJESTIC_LICENSE_FILES = LICENSE
diff --git a/general/package/mavfwd/mavfwd.mk b/general/package/mavfwd/mavfwd.mk
index 04bdb5d1..e4cf2438 100644
--- a/general/package/mavfwd/mavfwd.mk
+++ b/general/package/mavfwd/mavfwd.mk
@@ -7,7 +7,6 @@
 MAVFWD_SITE_METHOD = git
 MAVFWD_SITE = https://github.com/openipc/mavfwd
 MAVFWD_VERSION = 220d30e118d26008e94445887a03d77ba73c2d29
-# MAVFWD_VERSION = $(shell git ls-remote $(MAVFWD_SITE) HEAD | head -1 | awk '{ print $$1 }')
 
 MAVFWD_LICENSE = MIT
 MAVFWD_LICENSE_FILES = LICENSE
diff --git a/general/package/microbe-web/microbe-web.mk b/general/package/microbe-web/microbe-web.mk
index 55443be6..31550138 100644
--- a/general/package/microbe-web/microbe-web.mk
+++ b/general/package/microbe-web/microbe-web.mk
@@ -6,7 +6,7 @@
 
 MICROBE_WEB_SITE_METHOD = git
 MICROBE_WEB_SITE = https://github.com/openipc/microbe-web
-MICROBE_WEB_VERSION = $(shell git ls-remote $(MICROBE_WEB_SITE) HEAD | head -1 | awk '{ print $$1 }')
+MICROBE_WEB_VERSION = $(call EXTERNAL_SHA,$(MICROBE_WEB_SITE),HEAD)
 
 MICROBE_WEB_LICENSE = MIT
 MICROBE_WEB_LICENSE_FILES = LICENSE
diff --git a/general/package/microsnander/microsnander.mk b/general/package/microsnander/microsnander.mk
index 53cd8fc0..0aef9018 100644
--- a/general/package/microsnander/microsnander.mk
+++ b/general/package/microsnander/microsnander.mk
@@ -6,7 +6,7 @@
 
 MICROSNANDER_SITE_METHOD = git
 MICROSNANDER_SITE = https://github.com/openipc/microsnander
-MICROSNANDER_VERSION = $(shell git ls-remote $(MICROSNANDER_SITE) HEAD | head -1 | awk '{ print $$1 }')
+MICROSNANDER_VERSION = $(call EXTERNAL_SHA,$(MICROSNANDER_SITE),HEAD)
 
 MICROSNANDER_LICENSE = MIT
 MICROSNANDER_LICENSE_FILES = LICENSE
diff --git a/general/package/mini/mini.mk b/general/package/mini/mini.mk
index 07e9e1d0..c5f7a306 100644
--- a/general/package/mini/mini.mk
+++ b/general/package/mini/mini.mk
@@ -6,7 +6,7 @@
 
 MINI_SITE_METHOD = git
 MINI_SITE = https://github.com/openipc/mini
-MINI_VERSION = $(shell git ls-remote $(MINI_SITE) HEAD | head -1 | awk '{ print $$1 }')
+MINI_VERSION = $(call EXTERNAL_SHA,$(MINI_SITE),HEAD)
 
 MINI_GIT_SUBMODULES = YES
 MINI_LICENSE = GPL-3.0
diff --git a/general/package/motors/motors.mk b/general/package/motors/motors.mk
index ddf83519..8c339f9d 100644
--- a/general/package/motors/motors.mk
+++ b/general/package/motors/motors.mk
@@ -6,7 +6,7 @@
 
 MOTORS_SITE_METHOD = git
 MOTORS_SITE = https://github.com/openipc/motors
-MOTORS_VERSION = $(shell git ls-remote $(MOTORS_SITE) HEAD | head -1 | awk '{ print $$1 }')
+MOTORS_VERSION = $(call EXTERNAL_SHA,$(MOTORS_SITE),HEAD)
 
 MOTORS_LICENSE = MIT
 MOTORS_LICENSE_FILES = LICENSE
diff --git a/general/package/mt7601u-ap-openipc/mt7601u-ap-openipc.mk b/general/package/mt7601u-ap-openipc/mt7601u-ap-openipc.mk
index 09962b0f..2dcf5aee 100644
--- a/general/package/mt7601u-ap-openipc/mt7601u-ap-openipc.mk
+++ b/general/package/mt7601u-ap-openipc/mt7601u-ap-openipc.mk
@@ -6,7 +6,7 @@
 
 MT7601U_AP_OPENIPC_SITE_METHOD = git
 MT7601U_AP_OPENIPC_SITE = https://github.com/openipc/mt7601u
-MT7601U_AP_OPENIPC_VERSION = $(shell git ls-remote $(MT7601U_AP_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+MT7601U_AP_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(MT7601U_AP_OPENIPC_SITE),HEAD)
 
 MT7601U_AP_OPENIPC_LICENSE = GPL-2.0
 
diff --git a/general/package/quirc-openipc/quirc-openipc.mk b/general/package/quirc-openipc/quirc-openipc.mk
index 5e6a83e8..d41aba8c 100644
--- a/general/package/quirc-openipc/quirc-openipc.mk
+++ b/general/package/quirc-openipc/quirc-openipc.mk
@@ -6,7 +6,7 @@
 
 QUIRC_OPENIPC_SITE_METHOD = git
 QUIRC_OPENIPC_SITE = https://github.com/openipc/quirc
-QUIRC_OPENIPC_VERSION = $(shell git ls-remote $(QUIRC_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+QUIRC_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(QUIRC_OPENIPC_SITE),HEAD)
 
 QUIRC_OPENIPC_DEPENDENCIES += libjpeg
 QUIRC_OPENIPC_LICENSE = ISC
diff --git a/general/package/rtl8188eus-openipc/rtl8188eus-openipc.mk b/general/package/rtl8188eus-openipc/rtl8188eus-openipc.mk
index b89e51ca..f268e8ac 100644
--- a/general/package/rtl8188eus-openipc/rtl8188eus-openipc.mk
+++ b/general/package/rtl8188eus-openipc/rtl8188eus-openipc.mk
@@ -7,7 +7,6 @@
 RTL8188EUS_OPENIPC_SITE_METHOD = git
 RTL8188EUS_OPENIPC_SITE = https://github.com/aircrack-ng/rtl8188eus
 RTL8188EUS_OPENIPC_VERSION = 6146193406b62e942d13d4d43580ed94ac70c218
-#RTL8188EUS_OPENIPC_VERSION = $(shell git ls-remote $(RTL8188EUS_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
 
 RTL8188EUS_OPENIPC_LICENSE = GPL-2.0, proprietary (rtl8188fufw.bin firmware blob)
 RTL8188EUS_OPENIPC_LICENSE_FILES = COPYING
diff --git a/general/package/rtl8188fu-openipc/rtl8188fu-openipc.mk b/general/package/rtl8188fu-openipc/rtl8188fu-openipc.mk
index a9b6c1b5..194ecdaf 100644
--- a/general/package/rtl8188fu-openipc/rtl8188fu-openipc.mk
+++ b/general/package/rtl8188fu-openipc/rtl8188fu-openipc.mk
@@ -7,7 +7,6 @@
 RTL8188FU_OPENIPC_SITE_METHOD = git
 RTL8188FU_OPENIPC_SITE = https://github.com/ulli-kroll/rtl8188fu
 RTL8188FU_OPENIPC_VERSION = e2d69b2b0c911c1b59daaf59a582ccdbb73fd97d
-#RTL8188FU_OPENIPC_VERSION = $(shell git ls-remote $(RTL8188FU_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
 
 RTL8188FU_OPENIPC_LICENSE = GPL-2.0
 
diff --git a/general/package/rtl8188fu/rtl8188fu.mk b/general/package/rtl8188fu/rtl8188fu.mk
index 51418ab6..fea34b50 100644
--- a/general/package/rtl8188fu/rtl8188fu.mk
+++ b/general/package/rtl8188fu/rtl8188fu.mk
@@ -6,7 +6,7 @@
 
 RTL8188FU_SITE_METHOD = git
 RTL8188FU_SITE = https://github.com/viktorxda/realtek_wlan
-RTL8188FU_VERSION = fe80762a68870d1c29111ea822d2be7f8fcdb935
+RTL8188FU_VERSION = $(call EXTERNAL_SHA,$(RTL8188FU_SITE),HEAD)
 
 RTL8188FU_LICENSE = GPL-2.0
 RTL8188FU_LICENSE_FILES = COPYING
diff --git a/general/package/rtl8189fs-openipc/rtl8189fs-openipc.mk b/general/package/rtl8189fs-openipc/rtl8189fs-openipc.mk
index 38a1b7c0..f6c77ddc 100644
--- a/general/package/rtl8189fs-openipc/rtl8189fs-openipc.mk
+++ b/general/package/rtl8189fs-openipc/rtl8189fs-openipc.mk
@@ -6,7 +6,7 @@
 
 RTL8189FS_OPENIPC_SITE_METHOD = git
 RTL8189FS_OPENIPC_SITE = https://github.com/jwrdegoede/rtl8189ES_linux
-RTL8189FS_OPENIPC_VERSION = $(shell git ls-remote $(RTL8189FS_OPENIPC_SITE) rtl8189fs | head -1 | awk '{ print $$1 }')
+RTL8189FS_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(RTL8189FS_OPENIPC_SITE),rtl8189fs)
 
 RTL8189FS_OPENIPC_LICENSE = GPL-2.0
 RTL8189FS_OPENIPC_LICENSE_FILES = COPYING
diff --git a/general/package/rtl8192eu-openipc/rtl8192eu-openipc.mk b/general/package/rtl8192eu-openipc/rtl8192eu-openipc.mk
index 998a08d5..92d5be2a 100644
--- a/general/package/rtl8192eu-openipc/rtl8192eu-openipc.mk
+++ b/general/package/rtl8192eu-openipc/rtl8192eu-openipc.mk
@@ -6,7 +6,7 @@
 
 RTL8192EU_OPENIPC_SITE_METHOD = git
 RTL8192EU_OPENIPC_SITE = https://github.com/mange/rtl8192eu-linux-driver
-RTL8192EU_OPENIPC_VERSION = $(shell git ls-remote $(RTL8192EU_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+RTL8192EU_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(RTL8192EU_OPENIPC_SITE),HEAD)
 
 RTL8192EU_OPENIPC_LICENSE = GPL-2.0
 RTL8192EU_OPENIPC_LICENSE_FILES = COPYING
diff --git a/general/package/rtl8733bu/rtl8733bu.mk b/general/package/rtl8733bu/rtl8733bu.mk
index 8ce1da4e..6f9a11c2 100644
--- a/general/package/rtl8733bu/rtl8733bu.mk
+++ b/general/package/rtl8733bu/rtl8733bu.mk
@@ -6,7 +6,7 @@
 
 RTL8733BU_SITE_METHOD = git
 RTL8733BU_SITE = https://github.com/viktorxda/realtek_wlan
-RTL8733BU_VERSION = 1c6ac15690e39570ffdeb81c16a136a35fe2563e
+RTL8733BU_VERSION = $(call EXTERNAL_SHA,$(RTL8733BU_SITE),HEAD)
 
 RTL8733BU_LICENSE = GPL-2.0
 RTL8733BU_LICENSE_FILES = COPYING
diff --git a/general/package/rtl8812au-openipc/rtl8812au-openipc.mk b/general/package/rtl8812au-openipc/rtl8812au-openipc.mk
index 82f24c45..99f3347d 100644
--- a/general/package/rtl8812au-openipc/rtl8812au-openipc.mk
+++ b/general/package/rtl8812au-openipc/rtl8812au-openipc.mk
@@ -5,8 +5,8 @@
 ################################################################################
 
 RTL8812AU_OPENIPC_SITE_METHOD = git
-RTL8812AU_OPENIPC_SITE = http://github.com/svpcom/rtl8812au
-RTL8812AU_OPENIPC_VERSION = $(shell git ls-remote $(RTL8812AU_OPENIPC_SITE) HEAD | head -1 | awk '{ print $$1 }')
+RTL8812AU_OPENIPC_SITE = https://github.com/svpcom/rtl8812au
+RTL8812AU_OPENIPC_VERSION = $(call EXTERNAL_SHA,$(RTL8812AU_OPENIPC_SITE),HEAD)
 
 RTL8812AU_OPENIPC_LICENSE = GPL-2.0
 RTL8812AU_OPENIPC_LICENSE_FILES = COPYING
diff --git a/general/package/ssw101b/ssw101b.mk b/general/package/ssw101b/ssw101b.mk
index 6d3e5d19..57d28687 100644
--- a/general/package/ssw101b/ssw101b.mk
+++ b/general/package/ssw101b/ssw101b.mk
@@ -6,7 +6,7 @@
 
 SSW101B_SITE_METHOD = git
 SSW101B_SITE = https://github.com/openipc/ssw101b
-SSW101B_VERSION = $(shell git ls-remote $(SSW101B_SITE) HEAD | head -1 | awk '{ print $$1 }')
+SSW101B_VERSION = $(call EXTERNAL_SHA,$(SSW101B_SITE),HEAD)
 
 SSW101B_LICENSE = GPL-2.0
 
diff --git a/general/package/yaml-cli/yaml-cli.mk b/general/package/yaml-cli/yaml-cli.mk
index aadbc4e9..a2249ddb 100644
--- a/general/package/yaml-cli/yaml-cli.mk
+++ b/general/package/yaml-cli/yaml-cli.mk
@@ -6,7 +6,7 @@
 
 YAML_CLI_SITE_METHOD = git
 YAML_CLI_SITE = https://github.com/openipc/yaml-cli
-YAML_CLI_VERSION = $(shell git ls-remote $(YAML_CLI_SITE) HEAD | head -1 | awk '{ print $$1 }')
+YAML_CLI_VERSION = $(call EXTERNAL_SHA,$(YAML_CLI_SITE),HEAD)
 
 YAML_CLI_LICENSE = MIT
 YAML_CLI_LICENSE_FILES = LICENSE