diff --git a/README.md b/README.md
index a24bb05..35f79ba 100644
--- a/README.md
+++ b/README.md
@@ -80,6 +80,20 @@ usage: ./scripts/create_sibling.sh [OPTIONS]
 
 If you connect to the unit via `usb0` (thus using the data port), you might want to use the `scripts/linux_connection_share.sh` script to bring the interface up on your end and share internet connectivity from another interface, so you can update the unit and generally download things from the internet on it.
 
+#### Update your pwnagotchi
+
+You can use the `scripts/update_pwnagotchi.sh` script to update to the most recent version of pwnagotchi.
+
+```shell
+Usage: ./update_pwnagitchi.sh [-m | --master] [-c | --commit | --branch] [-bc | --backupconfig] [-rc | --restoreconfig] [-h | --help]
+
+   -m, --master               Update to the master branch. Used by default.
+   -c, --commit, --branch     Update to the specific commit/branch.
+   -bc, --backupconfig        Backup the current pwnagotchi config.
+   -rc, --restoreconfig       Restore the current pwnagotchi config. -bc will be enabled.
+   -h, --help                 Shows this help.
+```
+
 ### UI
 
 The UI is available either via display if installed, or via http://pwnagotchi.local:8080/ if you connect to the unit via `usb0` and set a static address on the network interface (change `pwnagotchi` with the hostname of your unit).
diff --git a/scripts/update_pwnagotchi.sh b/scripts/update_pwnagotchi.sh
new file mode 100644
index 0000000..c5cb757
--- /dev/null
+++ b/scripts/update_pwnagotchi.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+# Default variables
+folder="/tmp/pwnagotchi"
+version="master"
+commit=0
+backupconfig=0
+restoreconfig=0
+
+# functions
+function display_help {
+        echo "Usage: $0 [-m | --master] [-c | --commit | --branch] [-bc | --backupconfig] [-rc | --restoreconfig] [-h | --help]" >&2
+        echo
+        echo "   -m, --master               Update to the master branch. Used by default."
+        echo "   -c, --commit, --branch     Update to the specific commit/branch."
+        echo "   -bc, --backupconfig        Backup the current pwnagotchi config."
+        echo "   -rc, --restoreconfig       Restore the current pwnagotchi config. -bc will be enabled."
+        echo "   -h, --help                 Shows this help."
+        echo ""
+        echo
+        exit 1
+}
+function test_root {
+# Check if we are running as root.
+    if ! [ $(id -u) = 0 ]; then
+            echo " [!] This script must be run as root."
+            exit 3
+    fi
+}
+function test_github {
+    wget -q  --spider https://github.com/evilsocket/pwnagotchi/
+    if [ $? -ne 0 ]; then
+            echo " [!] Cannot reach github. This script requires internet access, ensure connection sharing is working."
+            exit 4
+    fi
+}
+
+# Commandline arguments
+while [[ "$#" -gt 0 ]]; do case $1 in
+        -m|--master) version="master"; shift;;
+        -c|--commit|---branch) commit="$2" version="other"; shift;;
+        -bc|--backupconfig) backupconfig=1; shift;;
+        -rc|--restoreconfig) backupconfig=1 restoreconfig=1; shift;;
+        -h|--help) display_help;;
+        *) echo "Unknown parameter passed: $1"; exit 2;;
+esac; shift; done
+
+echo " [+] Checking prerequisites."
+test_root
+test_github
+
+# clean up old files, clone master, set checkout to commit if needed.
+echo " [+] Cloning to $folder..."
+rm $folder -rf
+git clone https://github.com/evilsocket/pwnagotchi $folder -q
+cd $folder
+if [ $version == "other" ]; then
+        git checkout $commit -q
+fi
+echo " [+] Installing $(git log -1 --format="%h")"
+
+echo " [+] Updating..."
+if [ $backupconfig -eq 1 ]; then
+        echo " [+] Creating backup of config.yml"
+        mv /root/pwnagotchi/config.yml ~/config.yml.bak -f
+fi
+rm /root/pwnagotchi -rf
+rsync -aPq $folder/sdcard/rootfs/* /
+cd /tmp
+rm $folder -rf
+if [ $restoreconfig -eq 1 ]; then
+        echo " [+] Restoring backup of config.yml"
+        mv ~/config.yml.bak /root/pwnagotchi/config.yml -f
+fi
+
+echo " [+] Restarting pwnagotchi in auto mode. $( screen -X -S pwnagotchi quit)"
+sudo -H -u root /usr/bin/screen -dmS pwnagotchi -c /root/pwnagotchi/data/screenrc.auto
+echo " [+] Finished"
\ No newline at end of file