diff --git a/untetheredInject.js b/untetheredInject.js
new file mode 100644
index 0000000..5d74d16
--- /dev/null
+++ b/untetheredInject.js
@@ -0,0 +1,44 @@
+(async function() {
+ window.gmUntethered = '1.0';
+
+ // Bypass to get Local Storage (Discord block / remove it) - Source / credit: https://stackoverflow.com/questions/52509440/discord-window-localstorage-is-undefined-how-to-get-access-to-the-localstorage
+ function getLocalStoragePropertyDescriptor() {
+ const frame = document.createElement('frame');
+ frame.src = 'about:blank';
+
+ document.body.appendChild(frame);
+
+ let r = Object.getOwnPropertyDescriptor(frame.contentWindow, 'localStorage');
+
+ frame.remove();
+
+ return r;
+ }
+
+ // Re-make window.localStorage for Untethered settings
+ Object.defineProperty(window, 'localStorage', getLocalStoragePropertyDescriptor());
+
+ const branchURLs = {
+ 'release': `https://github.com/smartfrigde/HamsterMod/releases/download/dev/index.js?_=${Date.now()}`,
+ 'dev': `https://github.com/smartfrigde/HamsterMod/releases/download/dev/index.js?_=${Date.now()}`
+ };
+
+ const branch = localStorage.getItem('goosemodUntetheredBranch') || 'release';
+
+ let el2 = document.getElementsByClassName('tip-2cgoli')[0];
+ if (el2 !== undefined) el2.innerHTML += `
GooseMod Untethered v${window.gmUntethered}`;
+
+ const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
+
+ const code = await (await fetch(branchURLs[branch])).text();
+
+ if (el2 !== undefined) el2.innerHTML += `
Ready`;
+
+ while (true) {
+ if (document.querySelectorAll('.flex-1xMQg5.flex-1O1GKY.horizontal-1ae9ci.horizontal-2EEEnY.flex-1O1GKY.directionRow-3v3tfG.justifyStart-2NDFzi.alignStretch-DpGPf3.noWrap-3jynv6 > [type="button"]:last-child').length !== 0 && window.webpackJsonp !== undefined) break;
+
+ await sleep(50);
+ }
+
+ eval(code);
+}).bind({})();