diff --git a/general/overlay/usr/sbin/sysupgrade b/general/overlay/usr/sbin/sysupgrade
index afef8a0e..7cb88914 100755
--- a/general/overlay/usr/sbin/sysupgrade
+++ b/general/overlay/usr/sbin/sysupgrade
@@ -1,8 +1,12 @@
 #!/bin/sh
 #
-# OpenIPC.org | v.20220722
+# OpenIPC.org | v.20220726
 #
 
+scr_version=1.0.0
+
+args="$@"
+
 set -e
 
 echo_c() {
@@ -106,6 +110,24 @@ free_resources() {
 	sync; echo 3 > /proc/sys/vm/drop_caches
 }
 
+self_update() {
+  if echo ${args} | grep "rootfs" || echo  ${args} | grep "kernel" > /dev/null 2>&1; then
+	echo "Offline upgrade, skip sysupgrade version check."
+  else
+	echo "Online upgrade, checking sysupgrade version..."
+	curl -s -k -L -o /tmp/sysupgrade "https://raw.githubusercontent.com/cronyx/firmware/master/general/overlay/usr/sbin/sysupgrade"
+	dstv=`grep scr_version /tmp/sysupgrade | cut -f 2 -d '='`
+	if ! [ "${scr_version}" = "${dstv}" ]; then
+	  echo "A new version is available, trying to update..."
+	  mv /tmp/sysupgrade /usr/sbin/ ; chmod +x /usr/sbin/sysupgrade
+	  echo "Done. Try running sysupgrade again."
+	  exit 0
+	else
+	  echo "Ok, version match."
+	fi
+  fi
+}
+
 create_lock() {
   [ -f /tmp/sysupgrade.lock ] && echo -e "\e[1;31m\nAnother sysupgrade process is already running!\e[0m\n" && exit 1
   touch /tmp/sysupgrade.lock
@@ -249,8 +271,8 @@ print_sysinfo
 echo_c 97 "\nTry '$(basename "$0") --help' for options." && \
 exit 0
 
+self_update
 create_lock
-
 free_resources
 [ "$remote_update" -eq 1 ] && download_firmware
 [ "$update_kernel" -eq 1 ] && do_update_kernel "$kernel_file"