diff --git a/rebuild.sh b/rebuild.sh
index 96b4b06..885e2ac 100644
--- a/rebuild.sh
+++ b/rebuild.sh
@@ -1 +1,56 @@
-#!/bin/sh
\ No newline at end of file
+#!/bin/sh
+
+# Legend:
+# (A) - Database related operations
+# (B) - Aliases related operations
+# (C) - Strings related operations
+
+root=$(pwd)
+
+cd elliebot
+
+# build
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+dotnet restore -f --no-cache
+dotnet build src/EllieBot/EllieBot.csproj -c Release -o output/
+
+# go back
+cd "$root"
+
+# move creds from old to new
+mv -f elliebot_old/output/creds.yml elliebot/output/creds.yml 1>/dev/null 2>&1
+# also copy credentials.json for migration purposes
+mv -f elliebot_old/output/credentials.json elliebot/output/credentials.json 1>/dev/null 2>&1
+
+# on update, strings will be new version, user will have to manually re-add his strings after each update
+# as updates may cause big number of strings to become obsolete, changed, etc
+# however, old user's strings will be backed up to strings_old
+
+# (C) backup new strings to reverse rewrite
+rm -rf elliebot/output/data/strings_new 1>/dev/null 2>&1
+mv -fT elliebot/output/data/strings elliebot/output/data/strings_new 1>/dev/null 2>&1
+# (C) delete old strings backup
+rm -rf elliebot_old/output/data/strings_old 1>/dev/null 2>&1
+rm -rf elliebot_old/output/data/strings_new 1>/dev/null 2>&1
+
+# (B) backup new aliases to reverse rewrite
+mv -f elliebot/output/data/aliases.yml elliebot/output/data/aliases_new.yml 1>/dev/null 2>&1
+
+# (A) move old database
+mv -f elliebot_old/output/data/EllieBot.db elliebot/output/data/EllieBot.db 1>/dev/null 2>&1
+
+# move old data folder contents (and overwrite)
+cp -RT elliebot_old/output/data/ elliebot/output/data 1>/dev/null 2>&1
+
+# (B) backup old aliases
+mv -f elliebot/output/data/aliases.yml elliebot/output/data/aliases_old.yml 1>/dev/null 2>&1
+# (B) restore new aliases
+mv -f elliebot/output/data/aliases_new.yml elliebot/output/data/aliases.yml 1>/dev/null 2>&1
+
+# (C) backup old strings
+mv -f elliebot/output/data/strings elliebot/output/data/strings_old 1>/dev/null 2>&1
+# (C) restore new strings
+mv -f elliebot/output/data/strings_new elliebot/output/data/strings 1>/dev/null 2>&1
+
+rm "$root/rebuild.sh"
+exit 0