From edf4aef6adf8a2a45c347f70804fc5ac93070576 Mon Sep 17 00:00:00 2001
From: Michael VanOverbeek <michaelshiftos@gmail.com>
Date: Fri, 7 Apr 2017 17:01:23 +0000
Subject: [PATCH] Merge

---
 ShiftOS.Server/Core.cs                        | 234 ------
 ShiftOS.WinForms/Applications/FormatEditor.cs | 186 -----
 .../Applications/Pong.Designer.cs             | 744 -----------------
 ShiftOS.WinForms/Applications/Pong.cs         | 675 ----------------
 .../ShiftoriumFrontend.Designer.cs            | 261 ------
 .../Applications/ShiftoriumFrontend.cs        | 196 -----
 ShiftOS.WinForms/Controls/TerminalBox.cs      | 115 ---
 ShiftOS.WinForms/Oobe.cs                      | 540 -------------
 ShiftOS.WinForms/Tools/ControlManager.cs      | 325 --------
 ShiftOS.WinForms/WindowBorder.cs              | 490 ------------
 ShiftOS.WinForms/WinformsDesktop.cs           | 746 ------------------
 ShiftOS.WinForms/WinformsWindowManager.cs     | 183 -----
 ShiftOS_TheReturn/AudioManager.cs             | 126 ---
 ShiftOS_TheReturn/Commands.cs                 | 739 -----------------
 ShiftOS_TheReturn/Localization.cs             | 201 -----
 ShiftOS_TheReturn/SaveSystem.cs               | 331 --------
 ShiftOS_TheReturn/ServerManager.cs            | 230 ------
 ShiftOS_TheReturn/Shiftorium.cs               | 285 -------
 ShiftOS_TheReturn/TerminalTextWriter.cs       | 131 ---
 19 files changed, 6738 deletions(-)
 delete mode 100644 ShiftOS.Server/Core.cs
 delete mode 100644 ShiftOS.WinForms/Applications/FormatEditor.cs
 delete mode 100644 ShiftOS.WinForms/Applications/Pong.Designer.cs
 delete mode 100644 ShiftOS.WinForms/Applications/Pong.cs
 delete mode 100644 ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs
 delete mode 100644 ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs
 delete mode 100644 ShiftOS.WinForms/Controls/TerminalBox.cs
 delete mode 100644 ShiftOS.WinForms/Oobe.cs
 delete mode 100644 ShiftOS.WinForms/Tools/ControlManager.cs
 delete mode 100644 ShiftOS.WinForms/WindowBorder.cs
 delete mode 100644 ShiftOS.WinForms/WinformsDesktop.cs
 delete mode 100644 ShiftOS.WinForms/WinformsWindowManager.cs
 delete mode 100644 ShiftOS_TheReturn/AudioManager.cs
 delete mode 100644 ShiftOS_TheReturn/Commands.cs
 delete mode 100644 ShiftOS_TheReturn/Localization.cs
 delete mode 100644 ShiftOS_TheReturn/SaveSystem.cs
 delete mode 100644 ShiftOS_TheReturn/ServerManager.cs
 delete mode 100644 ShiftOS_TheReturn/Shiftorium.cs
 delete mode 100644 ShiftOS_TheReturn/TerminalTextWriter.cs

diff --git a/ShiftOS.Server/Core.cs b/ShiftOS.Server/Core.cs
deleted file mode 100644
index 7fe600f..0000000
--- a/ShiftOS.Server/Core.cs
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using ShiftOS.Objects;
-using NetSockets;
-using Newtonsoft.Json;
-using System.IO;
-using static ShiftOS.Server.Program;
-
-
-namespace ShiftOS.Server
-{
-    public static class Core
-    {
-        [MudRequest("getguid_reply", typeof(string))]
-        public static void GuidBounce(string guid, object contents)
-        {
-            //The message's GUID was manipulated by the client to send to another client.
-            //So we can just bounce back the message to the other client.
-            server.DispatchTo(new Guid(guid), new NetObject("bounce", new ServerMessage
-            {
-                Name = "getguid_reply",
-                GUID = guid,
-                Contents = contents as string
-            }));
-
-        }
-
-        [MudRequest("getguid_send", typeof(string))]
-        public static void GuidReceiver(string guid, object contents)
-        {
-            string usrname = contents as string;
-            server.DispatchAll(new NetObject("are_you_this_guy", new ServerMessage
-            {
-                Name = "getguid_fromserver",
-                GUID = guid,
-                Contents = usrname,
-            }));
-
-        }
-
-        [MudRequest("script", typeof(Dictionary<string, object>))]
-        public static void RunScript(string guid, object contents)
-        {
-            try
-            {
-                var args = contents as Dictionary<string, object>;
-
-                string user = "";
-                string script = "";
-                string sArgs = "";
-
-                if (!args.ContainsKey("user"))
-                    throw new MudException("No 'user' arg specified in message to server");
-
-                if (!args.ContainsKey("script"))
-                    throw new MudException("No 'script' arg specified in message to server");
-
-                if (!args.ContainsKey("args"))
-                    throw new MudException("No 'args' arg specified in message to server");
-
-                user = args["user"] as string;
-                script = args["script"] as string;
-                sArgs = args["args"] as string;
-
-                if (File.Exists($"scripts/{user}/{script}.lua"))
-                {
-                    var script_arguments = JsonConvert.DeserializeObject<Dictionary<string, object>>(sArgs);
-                    server.DispatchTo(new Guid(guid), new NetObject("runme", new ServerMessage
-                    {
-                        Name = "run",
-                        GUID = "Server",
-                        Contents = JsonConvert.SerializeObject(new
-                        {
-                            script = File.ReadAllText($"scripts/{user}/{script}.lua"),
-                            args = sArgs
-                        })
-                    }));
-                }
-                else
-                {
-                    throw new MudException($"{user}.{script}: Script not found.");
-                }
-            }
-            catch
-            {
-                try
-                {
-                    Program.server.DispatchTo(new Guid(guid), new NetObject("error", new ServerMessage
-                    {
-                        Name = "Error",
-                        GUID = "Server",
-                        Contents = JsonConvert.SerializeObject(new MudException("<script_runner> Script not found or script error detected."))
-                    }));
-                }
-                catch
-                {
-                    //fuck.
-                }
-            }
-
-        }
-
-        [MudRequest("delete_dead_save", typeof(Save))]
-        public static void DeleteSave(string guid, Save save)
-        {
-            if (File.Exists("deadsaves/" + save.Username + ".save"))
-                File.Delete("deadsaves/" + save.Username + ".save");
-        }
-
-        [MudRequest("diag_log", typeof(string))]
-        public static void Diagnostic(string guid, string line)
-        {
-            List<string> lines = new List<string>();
-            if (File.Exists("diagnostics.log"))
-                lines = new List<string>(File.ReadAllLines("diagnostics.log"));
-
-            lines.Add(line);
-            File.WriteAllLines("diagnostics.log", lines.ToArray());
-        }
-
-        [MudRequest("getusers", typeof(string))]
-        public static void GetAllUsers(string guid, string contents)
-        {
-            List<string> accs = new List<string>();
-            if(contents == "dead")
-            {
-                foreach(var sve in Directory.GetFiles("deadsaves"))
-                {
-                    if (sve.EndsWith(".save"))
-                    {
-                        var save = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
-                        accs.Add($"{save.Username}@{save.SystemName}");
-                    }
-
-                }
-            }
-            server.DispatchTo(new Guid(guid), new NetObject("h4xx0r", new ServerMessage
-            {
-                Name = "allusers",
-                GUID = "server",
-                Contents = JsonConvert.SerializeObject(accs)
-            }));
-        }
-
-        [MudRequest("mud_save_allow_dead", typeof(Save))]
-        public static void SaveDead(string guid, Save sve)
-        {
-            if(File.Exists("saves/" + sve.Username + ".save"))
-            {
-                WriteEncFile("saves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
-            }
-            else if(File.Exists("deadsaves/" + sve.Username + ".save"))
-            {
-                File.WriteAllText("deadsaves/" + sve.Username + ".save", JsonConvert.SerializeObject(sve));
-            }
-        }
-
-        [MudRequest("get_user_data", typeof(Dictionary<string, string>))]
-        public static void GetUserData(string guid, Dictionary<string, string> contents)
-        {
-            string usr = contents["user"];
-            string sys = contents["sysname"];
-
-            foreach(var sve in Directory.GetFiles("deadsaves"))
-            {
-                if (sve.EndsWith(".save"))
-                {
-                    var saveFile = JsonConvert.DeserializeObject<Save>(File.ReadAllText(sve));
-                    if(saveFile.Username == usr && saveFile.SystemName == sys)
-                    {
-                        server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
-                        {
-                            Name = "user_data",
-                            GUID = "server",
-                            Contents = JsonConvert.SerializeObject(saveFile)
-                        }));
-                        return;
-                    }
-                }
-            }
-            foreach (var sve in Directory.GetFiles("saves"))
-            {
-                if (sve.EndsWith(".save"))
-                {
-                    var saveFile = JsonConvert.DeserializeObject<Save>(ReadEncFile(sve));
-                    if (saveFile.Username == usr && saveFile.SystemName == sys)
-                    {
-                        server.DispatchTo(new Guid(guid), new NetObject("1337", new ServerMessage
-                        {
-                            Name = "user_data",
-                            GUID = "server",
-                            Contents = JsonConvert.SerializeObject(saveFile)
-                        }));
-                        return;
-                    }
-                }
-            }
-
-            server.DispatchTo(new Guid(guid), new NetObject("n07_50_1337", new ServerMessage
-            {
-                Name = "user_data_not_found",
-                GUID = "server"
-            }));
-
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Applications/FormatEditor.cs b/ShiftOS.WinForms/Applications/FormatEditor.cs
deleted file mode 100644
index c5afc02..0000000
--- a/ShiftOS.WinForms/Applications/FormatEditor.cs
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-
-namespace ShiftOS.WinForms.Applications {
-    [MultiplayerOnly]
-    [Launcher("FormatEditor", true, "al_format_editor", "Games")]
-    [RequiresUpgrade("format_editor")]
-    [WinOpen("formateditor")]
-    [DefaultIcon("iconFormatEditor")]
-
-    public partial class FormatEditor : UserControl, IShiftOSWindow {
-
-        IList<CommandFormat> parts = new List<CommandFormat>();
-        CommandParser parser = new CommandParser();
-        IList<Panel> editorBoxes = new List<Panel>();
-
-        string commandMode = "namespace";
-        int avcount = 0;
-
-        public FormatEditor() {
-            InitializeComponent();
-        }
-
-        public void OnLoad() {
-            OnUpgrade();
-        }
-
-        public void OnSkinLoad() { }
-
-        public bool OnUnload() { return true; }
-
-        public void OnUpgrade() {
-            btnAddOptionalText.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_optional_text");
-            btnAddRegexText.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_regex");
-            btnAddColor.Visible = ShiftoriumFrontend.UpgradeInstalled("format_editor_syntax_highlighting");
-        }
-
-        private void addPart(CommandFormat part) {
-            parser.AddPart(part);
-
-            addPart(part.Draw());
-        }
-
-        private void addPart(Control part) {
-            Panel container = new Panel();
-
-            Control drawnPart = part;
-            container.Size = drawnPart.Size;
-            container.Controls.Add(drawnPart);
-
-            int woffset = 0;
-            if (editorBoxes.Count > 0) {
-                woffset = editorBoxes.Last().Width + editorBoxes.Last().Location.X;
-            } else {
-                woffset = 0;
-            }
-
-            container.Location = new Point(woffset, 0);
-            editorBoxes.Add(container);
-            panelEditor.Controls.Add(container);
-        }
-
-        private void btnAddText_Click(object sender, EventArgs e) {
-            addPart(new CommandFormatText());
-        }
-
-        private void btnAddOptionalText_Click(object sender, EventArgs e) {
-            addPart(new CommandFormatOptionalText());
-        }
-
-        private void btnAddRegexText_Click(object sender, EventArgs e) {
-            
-        }
-
-        private void btnAddColor_Click(object sender, EventArgs e) {
-
-        }
-
-        private void btnAddCommand_Click(object sender, EventArgs e) {
-            switch (commandMode) {
-                case "namespace":
-                    addPart(new CommandFormatNamespace());
-                    commandMode = "command";
-                    btnAddCommand.Text = "+ Command";
-                    break;
-                case "command":
-                    addPart(new CommandFormatCommand());
-                    commandMode = "argument";
-                    btnAddCommand.Text = "+ Argument";
-                    break;
-                case "argument":
-                    addPart(new CommandFormatArgument());
-                    commandMode = "value";
-                    btnAddCommand.Text = "+ \"Value\"";
-                    break;
-                case "value":
-                    addPart(new CommandFormatValue());
-                    avcount++;
-                    if (avcount >= 2) {
-                        commandMode = "";
-                        btnAddCommand.Text = "";
-                        btnAddCommand.Enabled = false;
-                    }else {
-                        commandMode = "argument";
-                        btnAddCommand.Text = "+ Argument";
-                    }
-                    break;
-            }
-        }
-
-        private void richTextBox1_TextChanged(object sender, EventArgs e) {
-            var result = parser.ParseCommand(richTextBox1.Text);
-
-            if (result.Equals(default(KeyValuePair<KeyValuePair<string, string>, Dictionary<string, string>>))) {
-                lblExampleCommand.Text = "Syntax Error";
-            } else {
-                string argvs = "{";
-
-                foreach (KeyValuePair<string, string> entry in result.Value) {
-                    argvs += entry.Key + "=\"" + entry.Value + "\", ";
-                }
-
-                argvs += "}";
-
-                lblExampleCommand.Text = result.Key + argvs;
-            }
-        }
-
-        private void btnTest_Click(object sender, EventArgs e) {
-
-        }
-
-        private void btnSave_Click(object sender, EventArgs e) {
-            CurrentCommandParser.parser = parser;
-
-            FileSkimmerBackend.GetFile(new string[] { ".cf" }, FileOpenerStyle.Save, new Action<string>((result) => {
-                Objects.ShiftFS.Utils.WriteAllText(result, parser.Save());
-            }));
-        }
-
-        private void btnLoad_Click(object sender, EventArgs e) {
-            FileSkimmerBackend.GetFile(new string[] { ".cf" }, FileOpenerStyle.Open, new Action<string>((result) => {
-                parser = CommandParser.Load(Objects.ShiftFS.Utils.ReadAllText(result));
-                foreach(CommandFormat part in parser.parts) {
-                    addPart(part.Draw());
-                }
-            }));
-        }
-
-        private void btnApply_Click(object sender, EventArgs e) {
-            CurrentCommandParser.parser = parser;
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Applications/Pong.Designer.cs b/ShiftOS.WinForms/Applications/Pong.Designer.cs
deleted file mode 100644
index faaf0f5..0000000
--- a/ShiftOS.WinForms/Applications/Pong.Designer.cs
+++ /dev/null
@@ -1,744 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using ShiftOS.WinForms.Controls;
-
-namespace ShiftOS.WinForms.Applications
-{
-    partial class Pong
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        private void InitializeComponent()
-        {
-            this.components = new System.ComponentModel.Container();
-            this.gameTimer = new System.Windows.Forms.Timer(this.components);
-            this.counter = new System.Windows.Forms.Timer(this.components);
-            this.tmrcountdown = new System.Windows.Forms.Timer(this.components);
-            this.tmrstoryline = new System.Windows.Forms.Timer(this.components);
-            this.pgcontents = new ShiftOS.WinForms.Controls.Canvas();
-            this.pnlgamestats = new System.Windows.Forms.Panel();
-            this.button1 = new System.Windows.Forms.Button();
-            this.label12 = new System.Windows.Forms.Label();
-            this.lblnextstats = new System.Windows.Forms.Label();
-            this.Label7 = new System.Windows.Forms.Label();
-            this.lblpreviousstats = new System.Windows.Forms.Label();
-            this.Label4 = new System.Windows.Forms.Label();
-            this.btnplayon = new System.Windows.Forms.Button();
-            this.Label3 = new System.Windows.Forms.Label();
-            this.btncashout = new System.Windows.Forms.Button();
-            this.Label2 = new System.Windows.Forms.Label();
-            this.lbllevelreached = new System.Windows.Forms.Label();
-            this.pnlhighscore = new System.Windows.Forms.Panel();
-            this.lbhighscore = new System.Windows.Forms.ListBox();
-            this.label10 = new System.Windows.Forms.Label();
-            this.pnlfinalstats = new System.Windows.Forms.Panel();
-            this.btnplayagain = new System.Windows.Forms.Button();
-            this.lblfinalcodepoints = new System.Windows.Forms.Label();
-            this.Label11 = new System.Windows.Forms.Label();
-            this.lblfinalcomputerreward = new System.Windows.Forms.Label();
-            this.Label9 = new System.Windows.Forms.Label();
-            this.lblfinallevelreward = new System.Windows.Forms.Label();
-            this.lblfinallevelreached = new System.Windows.Forms.Label();
-            this.lblfinalcodepointswithtext = new System.Windows.Forms.Label();
-            this.pnllose = new System.Windows.Forms.Panel();
-            this.lblmissedout = new System.Windows.Forms.Label();
-            this.lblbutyougained = new System.Windows.Forms.Label();
-            this.btnlosetryagain = new System.Windows.Forms.Button();
-            this.Label5 = new System.Windows.Forms.Label();
-            this.Label1 = new System.Windows.Forms.Label();
-            this.pnlintro = new System.Windows.Forms.Panel();
-            this.Label6 = new System.Windows.Forms.Label();
-            this.btnstartgame = new System.Windows.Forms.Button();
-            this.Label8 = new System.Windows.Forms.Label();
-            this.lblbeatai = new System.Windows.Forms.Label();
-            this.lblcountdown = new System.Windows.Forms.Label();
-            this.ball = new ShiftOS.WinForms.Controls.Canvas();
-            this.paddleHuman = new System.Windows.Forms.PictureBox();
-            this.paddleComputer = new System.Windows.Forms.Panel();
-            this.lbllevelandtime = new System.Windows.Forms.Label();
-            this.lblstatscodepoints = new System.Windows.Forms.Label();
-            this.lblstatsY = new System.Windows.Forms.Label();
-            this.lblstatsX = new System.Windows.Forms.Label();
-            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
-            this.button2 = new System.Windows.Forms.Button();
-            this.pgcontents.SuspendLayout();
-            this.pnlgamestats.SuspendLayout();
-            this.pnlhighscore.SuspendLayout();
-            this.pnlfinalstats.SuspendLayout();
-            this.pnllose.SuspendLayout();
-            this.pnlintro.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).BeginInit();
-            this.flowLayoutPanel1.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // gameTimer
-            // 
-            this.gameTimer.Interval = 30;
-            this.gameTimer.Tick += new System.EventHandler(this.gameTimer_Tick);
-            // 
-            // counter
-            // 
-            this.counter.Interval = 1000;
-            this.counter.Tick += new System.EventHandler(this.counter_Tick);
-            // 
-            // tmrcountdown
-            // 
-            this.tmrcountdown.Interval = 1000;
-            this.tmrcountdown.Tick += new System.EventHandler(this.countdown_Tick);
-            // 
-            // tmrstoryline
-            // 
-            this.tmrstoryline.Interval = 1000;
-            this.tmrstoryline.Tick += new System.EventHandler(this.tmrstoryline_Tick);
-            // 
-            // pgcontents
-            // 
-            this.pgcontents.BackColor = System.Drawing.Color.White;
-            this.pgcontents.Controls.Add(this.pnlhighscore);
-            this.pgcontents.Controls.Add(this.pnlgamestats);
-            this.pgcontents.Controls.Add(this.pnlfinalstats);
-            this.pgcontents.Controls.Add(this.pnllose);
-            this.pgcontents.Controls.Add(this.pnlintro);
-            this.pgcontents.Controls.Add(this.lblbeatai);
-            this.pgcontents.Controls.Add(this.lblcountdown);
-            this.pgcontents.Controls.Add(this.ball);
-            this.pgcontents.Controls.Add(this.paddleHuman);
-            this.pgcontents.Controls.Add(this.paddleComputer);
-            this.pgcontents.Controls.Add(this.lbllevelandtime);
-            this.pgcontents.Controls.Add(this.lblstatscodepoints);
-            this.pgcontents.Controls.Add(this.lblstatsY);
-            this.pgcontents.Controls.Add(this.lblstatsX);
-            this.pgcontents.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.pgcontents.Location = new System.Drawing.Point(0, 0);
-            this.pgcontents.Name = "pgcontents";
-            this.pgcontents.Size = new System.Drawing.Size(700, 400);
-            this.pgcontents.TabIndex = 20;
-            this.pgcontents.Paint += new System.Windows.Forms.PaintEventHandler(this.pgcontents_Paint);
-            this.pgcontents.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove);
-            // 
-            // pnlgamestats
-            // 
-            this.pnlgamestats.Controls.Add(this.button1);
-            this.pnlgamestats.Controls.Add(this.label12);
-            this.pnlgamestats.Controls.Add(this.lblnextstats);
-            this.pnlgamestats.Controls.Add(this.Label7);
-            this.pnlgamestats.Controls.Add(this.lblpreviousstats);
-            this.pnlgamestats.Controls.Add(this.Label4);
-            this.pnlgamestats.Controls.Add(this.btnplayon);
-            this.pnlgamestats.Controls.Add(this.Label3);
-            this.pnlgamestats.Controls.Add(this.btncashout);
-            this.pnlgamestats.Controls.Add(this.Label2);
-            this.pnlgamestats.Controls.Add(this.lbllevelreached);
-            this.pnlgamestats.Location = new System.Drawing.Point(56, 76);
-            this.pnlgamestats.Name = "pnlgamestats";
-            this.pnlgamestats.Size = new System.Drawing.Size(466, 284);
-            this.pnlgamestats.TabIndex = 6;
-            this.pnlgamestats.Visible = false;
-            // 
-            // button1
-            // 
-            this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.button1.Location = new System.Drawing.Point(32, 223);
-            this.button1.Name = "button1";
-            this.button1.Size = new System.Drawing.Size(191, 35);
-            this.button1.TabIndex = 10;
-            this.button1.Text = "{PONG_VIEW_HIGHSCORES}";
-            this.button1.UseVisualStyleBackColor = true;
-            this.button1.Click += new System.EventHandler(this.btnhighscore_Click);
-            // 
-            // label12
-            // 
-            this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label12.Location = new System.Drawing.Point(8, 187);
-            this.label12.Name = "label12";
-            this.label12.Size = new System.Drawing.Size(245, 33);
-            this.label12.TabIndex = 9;
-            this.label12.Text = "{PONG_HIGHSCORE_EXP}";
-            this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblnextstats
-            // 
-            this.lblnextstats.AutoSize = true;
-            this.lblnextstats.Location = new System.Drawing.Point(278, 136);
-            this.lblnextstats.Name = "lblnextstats";
-            this.lblnextstats.Size = new System.Drawing.Size(0, 13);
-            this.lblnextstats.TabIndex = 8;
-            // 
-            // Label7
-            // 
-            this.Label7.AutoSize = true;
-            this.Label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label7.Location = new System.Drawing.Point(278, 119);
-            this.Label7.Name = "Label7";
-            this.Label7.Size = new System.Drawing.Size(124, 16);
-            this.Label7.TabIndex = 7;
-            this.Label7.Text = "Next Level Stats:";
-            // 
-            // lblpreviousstats
-            // 
-            this.lblpreviousstats.AutoSize = true;
-            this.lblpreviousstats.Location = new System.Drawing.Point(278, 54);
-            this.lblpreviousstats.Name = "lblpreviousstats";
-            this.lblpreviousstats.Size = new System.Drawing.Size(0, 13);
-            this.lblpreviousstats.TabIndex = 6;
-            // 
-            // Label4
-            // 
-            this.Label4.AutoSize = true;
-            this.Label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label4.Location = new System.Drawing.Point(278, 37);
-            this.Label4.Name = "Label4";
-            this.Label4.Size = new System.Drawing.Size(154, 16);
-            this.Label4.TabIndex = 5;
-            this.Label4.Text = "Previous Level Stats:";
-            // 
-            // btnplayon
-            // 
-            this.btnplayon.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btnplayon.Location = new System.Drawing.Point(32, 147);
-            this.btnplayon.Name = "btnplayon";
-            this.btnplayon.Size = new System.Drawing.Size(191, 35);
-            this.btnplayon.TabIndex = 4;
-            this.btnplayon.Text = "Play on for 3 codepoints!";
-            this.btnplayon.UseVisualStyleBackColor = true;
-            this.btnplayon.Click += new System.EventHandler(this.btnplayon_Click);
-            // 
-            // Label3
-            // 
-            this.Label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label3.Location = new System.Drawing.Point(8, 111);
-            this.Label3.Name = "Label3";
-            this.Label3.Size = new System.Drawing.Size(245, 33);
-            this.Label3.TabIndex = 3;
-            this.Label3.Text = "{PONG_PLAYON_DESC}";
-            this.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // btncashout
-            // 
-            this.btncashout.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btncashout.Location = new System.Drawing.Point(32, 73);
-            this.btncashout.Name = "btncashout";
-            this.btncashout.Size = new System.Drawing.Size(191, 35);
-            this.btncashout.TabIndex = 2;
-            this.btncashout.Text = "Cash out with 1 codepoint!";
-            this.btncashout.UseVisualStyleBackColor = true;
-            this.btncashout.Click += new System.EventHandler(this.btncashout_Click);
-            // 
-            // Label2
-            // 
-            this.Label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label2.Location = new System.Drawing.Point(8, 37);
-            this.Label2.Name = "Label2";
-            this.Label2.Size = new System.Drawing.Size(245, 33);
-            this.Label2.TabIndex = 1;
-            this.Label2.Text = "{PONG_CASHOUT_DESC}";
-            this.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lbllevelreached
-            // 
-            this.lbllevelreached.AutoSize = true;
-            this.lbllevelreached.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lbllevelreached.Location = new System.Drawing.Point(149, 6);
-            this.lbllevelreached.Name = "lbllevelreached";
-            this.lbllevelreached.Size = new System.Drawing.Size(185, 20);
-            this.lbllevelreached.TabIndex = 0;
-            this.lbllevelreached.Text = "You Reached Level 2!";
-            // 
-            // pnlhighscore
-            // 
-            this.pnlhighscore.Controls.Add(this.lbhighscore);
-            this.pnlhighscore.Controls.Add(this.flowLayoutPanel1);
-            this.pnlhighscore.Controls.Add(this.label10);
-            this.pnlhighscore.Location = new System.Drawing.Point(67, 29);
-            this.pnlhighscore.Name = "pnlhighscore";
-            this.pnlhighscore.Size = new System.Drawing.Size(539, 311);
-            this.pnlhighscore.TabIndex = 14;
-            this.pnlhighscore.Visible = false;
-            // 
-            // lbhighscore
-            // 
-            this.lbhighscore.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.lbhighscore.FormattingEnabled = true;
-            this.lbhighscore.Location = new System.Drawing.Point(0, 36);
-            this.lbhighscore.MultiColumn = true;
-            this.lbhighscore.Name = "lbhighscore";
-            this.lbhighscore.SelectionMode = System.Windows.Forms.SelectionMode.None;
-            this.lbhighscore.Size = new System.Drawing.Size(539, 246);
-            this.lbhighscore.TabIndex = 1;
-            // 
-            // label10
-            // 
-            this.label10.Dock = System.Windows.Forms.DockStyle.Top;
-            this.label10.Location = new System.Drawing.Point(0, 0);
-            this.label10.Name = "label10";
-            this.label10.Size = new System.Drawing.Size(539, 36);
-            this.label10.TabIndex = 0;
-            this.label10.Text = "{HIGH_SCORES}";
-            this.label10.TextAlign = System.Drawing.ContentAlignment.TopCenter;
-            // 
-            // pnlfinalstats
-            // 
-            this.pnlfinalstats.Controls.Add(this.btnplayagain);
-            this.pnlfinalstats.Controls.Add(this.lblfinalcodepoints);
-            this.pnlfinalstats.Controls.Add(this.Label11);
-            this.pnlfinalstats.Controls.Add(this.lblfinalcomputerreward);
-            this.pnlfinalstats.Controls.Add(this.Label9);
-            this.pnlfinalstats.Controls.Add(this.lblfinallevelreward);
-            this.pnlfinalstats.Controls.Add(this.lblfinallevelreached);
-            this.pnlfinalstats.Controls.Add(this.lblfinalcodepointswithtext);
-            this.pnlfinalstats.Location = new System.Drawing.Point(172, 74);
-            this.pnlfinalstats.Name = "pnlfinalstats";
-            this.pnlfinalstats.Size = new System.Drawing.Size(362, 226);
-            this.pnlfinalstats.TabIndex = 9;
-            this.pnlfinalstats.Visible = false;
-            // 
-            // btnplayagain
-            // 
-            this.btnplayagain.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btnplayagain.Location = new System.Drawing.Point(5, 194);
-            this.btnplayagain.Name = "btnplayagain";
-            this.btnplayagain.Size = new System.Drawing.Size(352, 29);
-            this.btnplayagain.TabIndex = 16;
-            this.btnplayagain.Text = "{PLAY}";
-            this.btnplayagain.UseVisualStyleBackColor = true;
-            this.btnplayagain.Click += new System.EventHandler(this.btnplayagain_Click);
-            // 
-            // lblfinalcodepoints
-            // 
-            this.lblfinalcodepoints.Font = new System.Drawing.Font("Microsoft Sans Serif", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblfinalcodepoints.Location = new System.Drawing.Point(3, 124);
-            this.lblfinalcodepoints.Name = "lblfinalcodepoints";
-            this.lblfinalcodepoints.Size = new System.Drawing.Size(356, 73);
-            this.lblfinalcodepoints.TabIndex = 15;
-            this.lblfinalcodepoints.Text = "134 CP";
-            this.lblfinalcodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // Label11
-            // 
-            this.Label11.AutoSize = true;
-            this.Label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label11.Location = new System.Drawing.Point(162, 82);
-            this.Label11.Name = "Label11";
-            this.Label11.Size = new System.Drawing.Size(33, 33);
-            this.Label11.TabIndex = 14;
-            this.Label11.Text = "+";
-            this.Label11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblfinalcomputerreward
-            // 
-            this.lblfinalcomputerreward.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblfinalcomputerreward.Location = new System.Drawing.Point(193, 72);
-            this.lblfinalcomputerreward.Name = "lblfinalcomputerreward";
-            this.lblfinalcomputerreward.Size = new System.Drawing.Size(151, 52);
-            this.lblfinalcomputerreward.TabIndex = 12;
-            this.lblfinalcomputerreward.Text = "34";
-            this.lblfinalcomputerreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // Label9
-            // 
-            this.Label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label9.Location = new System.Drawing.Point(179, 31);
-            this.Label9.Name = "Label9";
-            this.Label9.Size = new System.Drawing.Size(180, 49);
-            this.Label9.TabIndex = 11;
-            this.Label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblfinallevelreward
-            // 
-            this.lblfinallevelreward.Font = new System.Drawing.Font("Microsoft Sans Serif", 27.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblfinallevelreward.Location = new System.Drawing.Point(12, 72);
-            this.lblfinallevelreward.Name = "lblfinallevelreward";
-            this.lblfinallevelreward.Size = new System.Drawing.Size(151, 52);
-            this.lblfinallevelreward.TabIndex = 10;
-            this.lblfinallevelreward.Text = "100";
-            this.lblfinallevelreward.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblfinallevelreached
-            // 
-            this.lblfinallevelreached.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblfinallevelreached.Location = new System.Drawing.Point(3, 31);
-            this.lblfinallevelreached.Name = "lblfinallevelreached";
-            this.lblfinallevelreached.Size = new System.Drawing.Size(170, 49);
-            this.lblfinallevelreached.TabIndex = 9;
-            this.lblfinallevelreached.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblfinalcodepointswithtext
-            // 
-            this.lblfinalcodepointswithtext.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblfinalcodepointswithtext.Location = new System.Drawing.Point(3, 2);
-            this.lblfinalcodepointswithtext.Name = "lblfinalcodepointswithtext";
-            this.lblfinalcodepointswithtext.Size = new System.Drawing.Size(356, 26);
-            this.lblfinalcodepointswithtext.TabIndex = 1;
-            this.lblfinalcodepointswithtext.Text = "You cashed out with 134 codepoints!";
-            this.lblfinalcodepointswithtext.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // pnllose
-            // 
-            this.pnllose.Controls.Add(this.lblmissedout);
-            this.pnllose.Controls.Add(this.lblbutyougained);
-            this.pnllose.Controls.Add(this.btnlosetryagain);
-            this.pnllose.Controls.Add(this.Label5);
-            this.pnllose.Controls.Add(this.Label1);
-            this.pnllose.Location = new System.Drawing.Point(209, 71);
-            this.pnllose.Name = "pnllose";
-            this.pnllose.Size = new System.Drawing.Size(266, 214);
-            this.pnllose.TabIndex = 10;
-            this.pnllose.Visible = false;
-            // 
-            // lblmissedout
-            // 
-            this.lblmissedout.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblmissedout.Location = new System.Drawing.Point(3, 175);
-            this.lblmissedout.Name = "lblmissedout";
-            this.lblmissedout.Size = new System.Drawing.Size(146, 35);
-            this.lblmissedout.TabIndex = 3;
-            this.lblmissedout.Text = "You Missed Out On: 500 Codepoints";
-            this.lblmissedout.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblbutyougained
-            // 
-            this.lblbutyougained.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblbutyougained.Location = new System.Drawing.Point(3, 125);
-            this.lblbutyougained.Name = "lblbutyougained";
-            this.lblbutyougained.Size = new System.Drawing.Size(146, 35);
-            this.lblbutyougained.TabIndex = 3;
-            this.lblbutyougained.Text = "But you gained 5 Codepoints";
-            this.lblbutyougained.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // btnlosetryagain
-            // 
-            this.btnlosetryagain.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btnlosetryagain.Location = new System.Drawing.Point(155, 176);
-            this.btnlosetryagain.Name = "btnlosetryagain";
-            this.btnlosetryagain.Size = new System.Drawing.Size(106, 35);
-            this.btnlosetryagain.TabIndex = 2;
-            this.btnlosetryagain.Text = "Try Again";
-            this.btnlosetryagain.UseVisualStyleBackColor = true;
-            this.btnlosetryagain.Click += new System.EventHandler(this.btnlosetryagain_Click);
-            // 
-            // Label5
-            // 
-            this.Label5.Location = new System.Drawing.Point(7, 26);
-            this.Label5.Name = "Label5";
-            this.Label5.Size = new System.Drawing.Size(260, 163);
-            this.Label5.TabIndex = 1;
-            // 
-            // Label1
-            // 
-            this.Label1.Dock = System.Windows.Forms.DockStyle.Top;
-            this.Label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label1.Location = new System.Drawing.Point(0, 0);
-            this.Label1.Name = "Label1";
-            this.Label1.Size = new System.Drawing.Size(266, 16);
-            this.Label1.TabIndex = 0;
-            this.Label1.Text = "You lose!";
-            this.Label1.TextAlign = System.Drawing.ContentAlignment.TopCenter;
-            // 
-            // pnlintro
-            // 
-            this.pnlintro.Controls.Add(this.Label6);
-            this.pnlintro.Controls.Add(this.btnstartgame);
-            this.pnlintro.Controls.Add(this.Label8);
-            this.pnlintro.Location = new System.Drawing.Point(52, 29);
-            this.pnlintro.Name = "pnlintro";
-            this.pnlintro.Size = new System.Drawing.Size(595, 303);
-            this.pnlintro.TabIndex = 13;
-            // 
-            // Label6
-            // 
-            this.Label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label6.Location = new System.Drawing.Point(3, 39);
-            this.Label6.Name = "Label6";
-            this.Label6.Size = new System.Drawing.Size(589, 227);
-            this.Label6.TabIndex = 15;
-            this.Label6.Text = "{PONG_DESC}";
-            this.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.Label6.Click += new System.EventHandler(this.Label6_Click);
-            // 
-            // btnstartgame
-            // 
-            this.btnstartgame.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.btnstartgame.Location = new System.Drawing.Point(186, 273);
-            this.btnstartgame.Name = "btnstartgame";
-            this.btnstartgame.Size = new System.Drawing.Size(242, 28);
-            this.btnstartgame.TabIndex = 15;
-            this.btnstartgame.Text = "{PLAY}";
-            this.btnstartgame.UseVisualStyleBackColor = true;
-            this.btnstartgame.Click += new System.EventHandler(this.btnstartgame_Click);
-            // 
-            // Label8
-            // 
-            this.Label8.AutoSize = true;
-            this.Label8.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.Label8.ForeColor = System.Drawing.Color.Black;
-            this.Label8.Location = new System.Drawing.Point(250, 5);
-            this.Label8.Name = "Label8";
-            this.Label8.Size = new System.Drawing.Size(280, 31);
-            this.Label8.TabIndex = 14;
-            this.Label8.Text = "{PONG_WELCOME}";
-            this.Label8.Click += new System.EventHandler(this.Label8_Click);
-            // 
-            // lblbeatai
-            // 
-            this.lblbeatai.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblbeatai.Location = new System.Drawing.Point(47, 41);
-            this.lblbeatai.Name = "lblbeatai";
-            this.lblbeatai.Size = new System.Drawing.Size(600, 30);
-            this.lblbeatai.TabIndex = 8;
-            this.lblbeatai.Text = "You got 2 codepoints for beating the Computer!";
-            this.lblbeatai.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.lblbeatai.Visible = false;
-            // 
-            // lblcountdown
-            // 
-            this.lblcountdown.Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblcountdown.Location = new System.Drawing.Point(182, 152);
-            this.lblcountdown.Name = "lblcountdown";
-            this.lblcountdown.Size = new System.Drawing.Size(315, 49);
-            this.lblcountdown.TabIndex = 7;
-            this.lblcountdown.Text = "3";
-            this.lblcountdown.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.lblcountdown.Visible = false;
-            // 
-            // ball
-            // 
-            this.ball.BackColor = System.Drawing.Color.Black;
-            this.ball.Location = new System.Drawing.Point(300, 152);
-            this.ball.Name = "ball";
-            this.ball.Size = new System.Drawing.Size(20, 20);
-            this.ball.TabIndex = 2;
-            this.ball.MouseEnter += new System.EventHandler(this.ball_MouseEnter);
-            this.ball.MouseLeave += new System.EventHandler(this.ball_MouseLeave);
-            // 
-            // paddleHuman
-            // 
-            this.paddleHuman.BackColor = System.Drawing.Color.Black;
-            this.paddleHuman.Location = new System.Drawing.Point(10, 134);
-            this.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150);
-            this.paddleHuman.Name = "paddleHuman";
-            this.paddleHuman.Size = new System.Drawing.Size(20, 100);
-            this.paddleHuman.TabIndex = 3;
-            this.paddleHuman.TabStop = false;
-            // 
-            // paddleComputer
-            // 
-            this.paddleComputer.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
-            this.paddleComputer.BackColor = System.Drawing.Color.Black;
-            this.paddleComputer.Location = new System.Drawing.Point(666, 134);
-            this.paddleComputer.MaximumSize = new System.Drawing.Size(20, 150);
-            this.paddleComputer.Name = "paddleComputer";
-            this.paddleComputer.Size = new System.Drawing.Size(20, 100);
-            this.paddleComputer.TabIndex = 1;
-            // 
-            // lbllevelandtime
-            // 
-            this.lbllevelandtime.Dock = System.Windows.Forms.DockStyle.Top;
-            this.lbllevelandtime.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lbllevelandtime.Location = new System.Drawing.Point(0, 0);
-            this.lbllevelandtime.Name = "lbllevelandtime";
-            this.lbllevelandtime.Size = new System.Drawing.Size(700, 22);
-            this.lbllevelandtime.TabIndex = 4;
-            this.lbllevelandtime.Text = "Level: 1 - 58 Seconds Left";
-            this.lbllevelandtime.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblstatscodepoints
-            // 
-            this.lblstatscodepoints.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.lblstatscodepoints.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblstatscodepoints.Location = new System.Drawing.Point(239, 356);
-            this.lblstatscodepoints.Name = "lblstatscodepoints";
-            this.lblstatscodepoints.Size = new System.Drawing.Size(219, 35);
-            this.lblstatscodepoints.TabIndex = 12;
-            this.lblstatscodepoints.Text = "Codepoints: ";
-            this.lblstatscodepoints.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblstatsY
-            // 
-            this.lblstatsY.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.lblstatsY.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblstatsY.Location = new System.Drawing.Point(542, 356);
-            this.lblstatsY.Name = "lblstatsY";
-            this.lblstatsY.Size = new System.Drawing.Size(144, 35);
-            this.lblstatsY.TabIndex = 11;
-            this.lblstatsY.Text = "Yspeed:";
-            this.lblstatsY.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // lblstatsX
-            // 
-            this.lblstatsX.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.lblstatsX.Font = new System.Drawing.Font("Georgia", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.lblstatsX.Location = new System.Drawing.Point(3, 356);
-            this.lblstatsX.Name = "lblstatsX";
-            this.lblstatsX.Size = new System.Drawing.Size(144, 35);
-            this.lblstatsX.TabIndex = 5;
-            this.lblstatsX.Text = "Xspeed: ";
-            this.lblstatsX.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            // 
-            // flowLayoutPanel1
-            // 
-            this.flowLayoutPanel1.AutoSize = true;
-            this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-            this.flowLayoutPanel1.Controls.Add(this.button2);
-            this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft;
-            this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 282);
-            this.flowLayoutPanel1.Name = "flowLayoutPanel1";
-            this.flowLayoutPanel1.Size = new System.Drawing.Size(539, 29);
-            this.flowLayoutPanel1.TabIndex = 2;
-            // 
-            // button2
-            // 
-            this.button2.AutoSize = true;
-            this.button2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-            this.button2.Location = new System.Drawing.Point(476, 3);
-            this.button2.Name = "button2";
-            this.button2.Size = new System.Drawing.Size(60, 23);
-            this.button2.TabIndex = 0;
-            this.button2.Text = "{CLOSE}";
-            this.button2.UseVisualStyleBackColor = true;
-            this.button2.Click += new System.EventHandler(this.button2_Click);
-            // 
-            // Pong
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.BackColor = System.Drawing.Color.White;
-            this.Controls.Add(this.pgcontents);
-            this.DoubleBuffered = true;
-            this.Name = "Pong";
-            this.Text = "{PONG_NAME}";
-            this.Size = new System.Drawing.Size(820, 500);
-            this.Load += new System.EventHandler(this.Pong_Load);
-            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pongMain_MouseMove);
-            this.pgcontents.ResumeLayout(false);
-            this.pnlgamestats.ResumeLayout(false);
-            this.pnlgamestats.PerformLayout();
-            this.pnlhighscore.ResumeLayout(false);
-            this.pnlhighscore.PerformLayout();
-            this.pnlfinalstats.ResumeLayout(false);
-            this.pnlfinalstats.PerformLayout();
-            this.pnllose.ResumeLayout(false);
-            this.pnlintro.ResumeLayout(false);
-            this.pnlintro.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)(this.paddleHuman)).EndInit();
-            this.flowLayoutPanel1.ResumeLayout(false);
-            this.flowLayoutPanel1.PerformLayout();
-            this.ResumeLayout(false);
-
-        }
-        internal System.Windows.Forms.Panel paddleComputer;
-        internal System.Windows.Forms.Timer gameTimer;
-        internal System.Windows.Forms.PictureBox paddleHuman;
-        internal System.Windows.Forms.Label lbllevelandtime;
-        internal System.Windows.Forms.Label lblstatsX;
-        internal System.Windows.Forms.Timer counter;
-        internal System.Windows.Forms.Panel pnlgamestats;
-        internal System.Windows.Forms.Label lblnextstats;
-        internal System.Windows.Forms.Label Label7;
-        internal System.Windows.Forms.Label lblpreviousstats;
-        internal System.Windows.Forms.Label Label4;
-        internal System.Windows.Forms.Button btnplayon;
-        internal System.Windows.Forms.Label Label3;
-        internal System.Windows.Forms.Button btncashout;
-        internal System.Windows.Forms.Label Label2;
-        internal System.Windows.Forms.Label lbllevelreached;
-        internal System.Windows.Forms.Label lblcountdown;
-        internal System.Windows.Forms.Timer tmrcountdown;
-        internal System.Windows.Forms.Label lblbeatai;
-        internal System.Windows.Forms.Panel pnlfinalstats;
-        internal System.Windows.Forms.Button btnplayagain;
-        internal System.Windows.Forms.Label lblfinalcodepoints;
-        internal System.Windows.Forms.Label Label11;
-        internal System.Windows.Forms.Label lblfinalcomputerreward;
-        internal System.Windows.Forms.Label Label9;
-        internal System.Windows.Forms.Label lblfinallevelreward;
-        internal System.Windows.Forms.Label lblfinallevelreached;
-        internal System.Windows.Forms.Label lblfinalcodepointswithtext;
-        internal System.Windows.Forms.Panel pnllose;
-        internal System.Windows.Forms.Label lblmissedout;
-        internal System.Windows.Forms.Label lblbutyougained;
-        internal System.Windows.Forms.Button btnlosetryagain;
-        internal System.Windows.Forms.Label Label5;
-        internal System.Windows.Forms.Label Label1;
-        internal System.Windows.Forms.Label lblstatscodepoints;
-        internal System.Windows.Forms.Label lblstatsY;
-        internal System.Windows.Forms.Panel pnlintro;
-        internal System.Windows.Forms.Label Label6;
-        internal System.Windows.Forms.Button btnstartgame;
-        internal System.Windows.Forms.Label Label8;
-        internal System.Windows.Forms.Timer tmrstoryline;
-        private System.Windows.Forms.Panel pnlhighscore;
-        private System.Windows.Forms.ListBox lbhighscore;
-        private System.Windows.Forms.Label label10;
-        internal Canvas pgcontents;
-        internal Canvas ball;
-        internal System.Windows.Forms.Button button1;
-        internal System.Windows.Forms.Label label12;
-        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
-        private System.Windows.Forms.Button button2;
-    }
-}
diff --git a/ShiftOS.WinForms/Applications/Pong.cs b/ShiftOS.WinForms/Applications/Pong.cs
deleted file mode 100644
index 157ce8c..0000000
--- a/ShiftOS.WinForms/Applications/Pong.cs
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Newtonsoft.Json;
-using ShiftOS.Engine;
-using ShiftOS.Objects;
-
-namespace ShiftOS.WinForms.Applications
-{
-    [MultiplayerOnly]
-    [Launcher("Pong", true, "al_pong", "Games")]
-    [WinOpen("pong")]
-    [DefaultIcon("iconPong")]
-    public partial class Pong : UserControl, IShiftOSWindow
-    {
-        //I can assure you guaranteed that there is an acorn somewhere, in this place, and the sailors are looking for it
-        int xVel = 7;
-        int yVel = 8;
-        int computerspeed = 8;
-        int level = 1;
-        int secondsleft = 60;
-        int casualposition;
-        double xveldec = 3.0;
-        double yveldec = 3.0;
-        double incrementx = 0.4;
-        double incrementy = 0.2;
-        int levelxspeed = 3;
-        int levelyspeed = 3;
-        int beatairewardtotal;
-        int beataireward = 1;
-        int[] levelrewards = new int[50];
-        int totalreward;
-        int countdown = 3;
-
-        bool aiShouldIsbeEnabled = true;
-
-        public Pong()
-        {
-            InitializeComponent();
-        }
-
-        private void Pong_Load(object sender, EventArgs e)
-        {
-            setuplevelrewards();
-        }
-
-
-
-        // Move the paddle according to the mouse position.
-        private void pongMain_MouseMove(object sender, MouseEventArgs e)
-        {
-            var loc = this.PointToClient(MousePosition);
-            paddleHuman.Location = new Point(paddleHuman.Location.X, (loc.Y) - (paddleHuman.Height / 2));
-        }
-
-
-        // ERROR: Handles clauses are not supported in C#
-        private void gameTimer_Tick(object sender, EventArgs e)
-        {
-            if (this.Left < Screen.PrimaryScreen.Bounds.Width)
-            {
-                ball.BackColor = SkinEngine.LoadedSkin.ControlTextColor;
-                paddleComputer.BackColor = SkinEngine.LoadedSkin.ControlTextColor;
-                paddleHuman.BackColor = SkinEngine.LoadedSkin.ControlTextColor;
-
-                //Check if paddle upgrade has been bought and change paddles accordingly
-                if (ShiftoriumFrontend.UpgradeInstalled("pong_increased_paddle_size"))
-                {
-                    paddleHuman.Height = 150;
-                    paddleComputer.Height = 150;
-                }
-
-                //Set the computer player to move according to the ball's position.
-                if (aiShouldIsbeEnabled)
-                    if (ball.Location.X > 500 - xVel * 10 && xVel > 0)
-                    {
-                        if (ball.Location.Y > paddleComputer.Location.Y + 50)
-                        {
-                            paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed);
-                        }
-                        if (ball.Location.Y < paddleComputer.Location.Y + 50)
-                        {
-                            paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed);
-                        }
-                        casualposition = rand.Next(-150, 201);
-                    }
-                    else
-                    {
-                        //used to be me.location.y
-                        if (paddleComputer.Location.Y > this.Size.Height / 2 - paddleComputer.Height + casualposition)
-                        {
-                            paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed);
-                        }
-                        //used to be me.location.y
-                        if (paddleComputer.Location.Y < this.Size.Height / 2 - paddleComputer.Height + casualposition)
-                        {
-                            paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed);
-                        }
-                    }
-
-                //Set Xvel and Yvel speeds from decimal
-                if (xVel > 0)
-                    xVel = (int)Math.Round(xveldec);
-                if (xVel < 0)
-                    xVel = (int)-Math.Round(xveldec);
-                if (yVel > 0)
-                    yVel = (int)Math.Round(yveldec);
-                if (yVel < 0)
-                    yVel = (int)-Math.Round(yveldec);
-
-                // Move the game ball.
-                ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel);
-
-                // Check for top wall.
-                if (ball.Location.Y < 0)
-                {
-                    ball.Location = new Point(ball.Location.X, 0);
-                    yVel = -yVel;
-                }
-
-                // Check for bottom wall.
-                if (ball.Location.Y > pgcontents.Height - ball.Height)
-                {
-                    ball.Location = new Point(ball.Location.X, pgcontents.Height - ball.Size.Height);
-                    yVel = -yVel;
-                }
-
-                // Check for player paddle.
-                if (ball.Bounds.IntersectsWith(paddleHuman.Bounds))
-                {
-                    ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width, ball.Location.Y);
-                    //randomly increase x or y speed of ball
-                    switch (rand.Next(1, 3))
-                    {
-                        case 1:
-                            xveldec = xveldec + incrementx;
-                            break;
-                        case 2:
-                            if (yveldec > 0)
-                                yveldec = yveldec + incrementy;
-                            if (yveldec < 0)
-                                yveldec = yveldec - incrementy;
-                            break;
-                    }
-                    xVel = -xVel;
-                }
-
-                // Check for computer paddle.
-                if (ball.Bounds.IntersectsWith(paddleComputer.Bounds))
-                {
-                    ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width + 1, ball.Location.Y);
-                    xveldec = xveldec + incrementx;
-                    xVel = -xVel;
-                }
-
-                // Check for left wall.
-                if (ball.Location.X < -100)
-                {
-                    ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2);
-                    paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y);
-                    if (xVel > 0)
-                        xVel = -xVel;
-                    pnllose.Show();
-                    gameTimer.Stop();
-                    counter.Stop();
-                    lblmissedout.Text = Localization.Parse("{YOU_MISSED_OUT_ON}:") + Environment.NewLine + lblstatscodepoints.Text.Replace(Localization.Parse("{CODEPOINTS}: "), "") + Localization.Parse(" {CODEPOINTS}");
-                    if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade_2"))
-                    {
-                        totalreward = levelrewards[level - 1] + beatairewardtotal;
-                        double onePercent = (totalreward / 100);
-                        lblbutyougained.Show();
-                        lblbutyougained.Text = Localization.Parse("{BUT_YOU_GAINED}:") + Environment.NewLine + onePercent.ToString("") + (Localization.Parse(" {CODEPOINTS}"));
-                        SaveSystem.TransferCodepointsFrom("pong", (totalreward / 100));
-                    }
-                    else
-                    {
-                        lblbutyougained.Hide();
-                    }
-                }
-
-                // Check for right wall.
-                if (ball.Location.X > this.Width - ball.Size.Width - paddleComputer.Width + 100)
-                {
-                    ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2);
-                    paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y);
-                    if (xVel > 0)
-                        xVel = -xVel;
-                    beatairewardtotal = beatairewardtotal + beataireward;
-                    lblbeatai.Show();
-                    lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD_SECONDARY}}: {beataireward}");
-                    tmrcountdown.Start();
-                    gameTimer.Stop();
-                    counter.Stop();
-                }
-
-                //lblstats.Text = "Xspeed: " & Math.Abs(xVel) & " Yspeed: " & Math.Abs(yVel) & " Human Location: " & paddleHuman.Location.ToString & " Computer Location: " & paddleComputer.Location.ToString & Environment.NewLine & " Ball Location: " & ball.Location.ToString & " Xdec: " & xveldec & " Ydec: " & yveldec & " Xinc: " & incrementx & " Yinc: " & incrementy
-                lblstatsX.Text = Localization.Parse("{H_VEL}: ") + xveldec;
-                lblstatsY.Text = Localization.Parse("{V_VEL}: ") + yveldec;
-                lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ") + (levelrewards[level - 1] + beatairewardtotal).ToString();
-                lbllevelandtime.Text = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}");
-
-                if (xVel > 20 || xVel < -20)
-                {
-                    paddleHuman.Width = Math.Abs(xVel);
-                    paddleComputer.Width = Math.Abs(xVel);
-                }
-                else
-                {
-                    paddleHuman.Width = 20;
-                    paddleComputer.Width = 20;
-                }
-
-                computerspeed = Math.Abs(yVel);
-
-                //  pgcontents.Refresh()
-                // pgcontents.CreateGraphics.FillRectangle(Brushes.Black, ball.Location.X, ball.Location.Y, ball.Width, ball.Height)
-
-            }
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void counter_Tick(object sender, EventArgs e)
-        {
-            if (this.Left < Screen.PrimaryScreen.Bounds.Width)
-            {
-                secondsleft = secondsleft - 1;
-                if (secondsleft == 1)
-                {
-                    secondsleft = 60;
-                    level = level + 1;
-                    generatenextlevel();
-                    pnlgamestats.Show();
-                    pnlgamestats.BringToFront();
-                    pnlgamestats.Location = new Point((pgcontents.Width / 2) - (pnlgamestats.Width / 2), (pgcontents.Height / 2) - (pnlgamestats.Height / 2));
-
-                    counter.Stop();
-                    gameTimer.Stop();
-                    SendHighscores();
-                }
-                lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ") + (levelrewards[level - 1] + beatairewardtotal).ToString();
-            }
-        }
-
-        public void SendHighscores()
-        {
-            var highscore = new PongHighscore
-            {
-                UserName = $"{SaveSystem.CurrentSave.Username}@{SaveSystem.CurrentSave.SystemName}",
-                HighestLevel = level,
-                HighestCodepoints = totalreward
-            };
-            ServerManager.SendMessage("pong_sethighscore", JsonConvert.SerializeObject(highscore));
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void btnplayon_Click(object sender, EventArgs e)
-        {
-            xveldec = levelxspeed;
-            yveldec = levelyspeed;
-
-            secondsleft = 60;
-
-            tmrcountdown.Start();
-            lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD}}: {beataireward}");
-            pnlgamestats.Hide();
-            lblbeatai.Show();
-            ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, paddleHuman.Location.Y + paddleHuman.Height / 2);
-            if (xVel < 0)
-                xVel = Math.Abs(xVel);
-            lbllevelandtime.Text = Localization.Parse("{LEVEL}: " + level + " - " + secondsleft + " {SECONDS_LEFT}");
-        }
-
-        //Increase the ball speed stats for the next level
-        private void generatenextlevel()
-        {
-            lbllevelreached.Text = Localization.Parse("{YOU_REACHED_LEVEL} " + level + "!");
-
-            lblpreviousstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy);
-
-            switch (rand.Next(1, 3))
-            {
-                case 1:
-                    levelxspeed = levelxspeed + 1;
-                    break;
-                case 2:
-                    levelxspeed = levelxspeed + 2;
-                    break;
-            }
-
-            switch (rand.Next(1, 3))
-            {
-                case 1:
-                    levelyspeed = levelyspeed + 1;
-                    break;
-                case 2:
-                    levelyspeed = levelyspeed + 2;
-                    break;
-            }
-
-            switch (rand.Next(1, 6))
-            {
-                case 1:
-                    incrementx = incrementx + 0.1;
-                    break;
-                case 2:
-                    incrementx = incrementx + 0.2;
-                    break;
-                case 3:
-                    incrementy = incrementy + 0.1;
-                    break;
-                case 4:
-                    incrementy = incrementy + 0.2;
-                    break;
-                case 5:
-                    incrementy = incrementy + 0.3;
-                    break;
-            }
-
-            lblnextstats.Text = Localization.Parse("{INITIAL_H_VEL}: " + levelxspeed + Environment.NewLine + "{INITIAL_V_VEL}: " + levelyspeed + Environment.NewLine + "{INC_H_VEL}: " + incrementx + Environment.NewLine + "{INC_V_VEL}: " + incrementy);
-
-            if (level < 15)
-            {
-                if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
-                {
-                    beataireward = level * 10;
-                } else
-                {
-                    beataireward = level * 5;
-                }
-            }
-            else
-            {
-                if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
-                {
-                    double br = levelrewards[level - 1] / 10;
-                    beataireward = (int)Math.Round(br) * 10;
-                } else
-                {
-                    double br = levelrewards[level - 1] / 10;
-                    beataireward = (int)Math.Round(br) * 5;
-                }
-            }
-
-            totalreward = levelrewards[level - 1] + beatairewardtotal;
-
-            btncashout.Text = Localization.Parse("{CASH_OUT_WITH_CODEPOINTS}");
-            btnplayon.Text = Localization.Parse("{PONG_PLAY_ON_FOR_MORE}");
-        }
-
-        private void setuplevelrewards()
-        {
-            if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
-            {
-                levelrewards[0] = 0;
-                levelrewards[1] = 40;
-                levelrewards[2] = 120;
-                levelrewards[3] = 280;
-                levelrewards[4] = 580;
-                levelrewards[5] = 800;
-                levelrewards[6] = 1200;
-                levelrewards[7] = 1800;
-                levelrewards[8] = 2400;
-                levelrewards[9] = 3200;
-                levelrewards[10] = 4000;
-                levelrewards[11] = 5000;
-                levelrewards[12] = 6000;
-                levelrewards[13] = 8000;
-                levelrewards[14] = 10000;
-                levelrewards[15] = 12000;
-                levelrewards[16] = 16000;
-                levelrewards[17] = 20000;
-                levelrewards[18] = 26000;
-                levelrewards[19] = 32000;
-                levelrewards[20] = 40000;
-                levelrewards[21] = 50000;
-                levelrewards[22] = 64000;
-                levelrewards[23] = 80000;
-                levelrewards[24] = 100000;
-                levelrewards[25] = 120000;
-                levelrewards[26] = 150000;
-                levelrewards[27] = 180000;
-                levelrewards[28] = 220000;
-                levelrewards[29] = 280000;
-                levelrewards[30] = 360000;
-                levelrewards[31] = 440000;
-                levelrewards[32] = 540000;
-                levelrewards[33] = 640000;
-                levelrewards[34] = 800000;
-                levelrewards[35] = 1000000;
-                levelrewards[36] = 1280000;
-                levelrewards[37] = 1600000;
-                levelrewards[38] = 2000000;
-                levelrewards[39] = 3000000;
-                levelrewards[40] = 4000000;
-            } else
-            {
-                levelrewards[0] = 0;
-                levelrewards[1] = 20;
-                levelrewards[2] = 60;
-                levelrewards[3] = 140;
-                levelrewards[4] = 290;
-                levelrewards[5] = 400;
-                levelrewards[6] = 600;
-                levelrewards[7] = 900;
-                levelrewards[8] = 1200;
-                levelrewards[9] = 1600;
-                levelrewards[10] = 2000;
-                levelrewards[11] = 2500;
-                levelrewards[12] = 3000;
-                levelrewards[13] = 4000;
-                levelrewards[14] = 5000;
-                levelrewards[15] = 6000;
-                levelrewards[16] = 8000;
-                levelrewards[17] = 10000;
-                levelrewards[18] = 13000;
-                levelrewards[19] = 16000;
-                levelrewards[20] = 20000;
-                levelrewards[21] = 25000;
-                levelrewards[22] = 32000;
-                levelrewards[23] = 40000;
-                levelrewards[24] = 50000;
-                levelrewards[25] = 60000;
-                levelrewards[26] = 75000;
-                levelrewards[27] = 90000;
-                levelrewards[28] = 110000;
-                levelrewards[29] = 140000;
-                levelrewards[30] = 180000;
-                levelrewards[31] = 220000;
-                levelrewards[32] = 270000;
-                levelrewards[33] = 320000;
-                levelrewards[34] = 400000;
-                levelrewards[35] = 500000;
-                levelrewards[36] = 640000;
-                levelrewards[37] = 800000;
-                levelrewards[38] = 1000000;
-                levelrewards[39] = 1500000;
-                levelrewards[40] = 2000000;
-            }
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void countdown_Tick(object sender, EventArgs e)
-        {
-            if (this.Left < Screen.PrimaryScreen.Bounds.Width)
-            {
-                switch (countdown)
-                {
-                    case 0:
-                        countdown = 3;
-                        lblcountdown.Hide();
-                        lblbeatai.Hide();
-                        gameTimer.Start();
-                        counter.Start();
-                        tmrcountdown.Stop();
-                        break;
-                    case 1:
-                        lblcountdown.Text = "1";
-                        countdown = countdown - 1;
-                        break;
-                    case 2:
-                        lblcountdown.Text = "2";
-                        countdown = countdown - 1;
-                        break;
-                    case 3:
-                        lblcountdown.Text = "3";
-                        countdown = countdown - 1;
-                        lblcountdown.Show();
-                        break;
-                }
-            
-            }
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void btncashout_Click(object sender, EventArgs e)
-        {
-            pnlgamestats.Hide();
-            pnlfinalstats.Show();
-            lblfinalcodepointswithtext.Text = Localization.Parse("{YOU_WON} " + totalreward + " {CODEPOINTS}!");
-            lblfinallevelreached.Text = Localization.Parse("{CODEPOINTS_FOR_BEATING_LEVEL}: ") + (level - 1).ToString();
-            lblfinallevelreward.Text = levelrewards[level - 1].ToString();
-            lblfinalcomputerreward.Text = beatairewardtotal.ToString();
-            lblfinalcodepoints.Text = totalreward + Localization.Parse(" {CODEPOINTS_SHORT}");
-            SaveSystem.TransferCodepointsFrom("pong", totalreward);
-        }
-
-        private void newgame()
-        {
-            pnlfinalstats.Hide();
-            pnllose.Hide();
-            pnlintro.Hide();
-
-            level = 1;
-            totalreward = 0;
-            if (ShiftoriumFrontend.UpgradeInstalled("pong_upgrade"))
-            {
-                beataireward = 10;
-            } else
-            {
-                beataireward = 5;
-            }
-            beatairewardtotal = 0;
-            secondsleft = 60;
-            lblstatscodepoints.Text = Localization.Parse("{CODEPOINTS}: ");
-            //reset stats text
-            lblstatsX.Text = Localization.Parse("{H_VEL}: ");
-            lblstatsY.Text = Localization.Parse("{V_VEL}: ");
-
-            levelxspeed = 3;
-            levelyspeed = 3;
-
-            incrementx = 0.4;
-            incrementy = 0.2;
-
-            xveldec = levelxspeed;
-            yveldec = levelyspeed;
-
-            tmrcountdown.Start();
-            lblbeatai.Text = Localization.Parse($"{{PONG_BEAT_AI_REWARD}}: {beataireward}");
-            pnlgamestats.Hide();
-            lblbeatai.Show();
-            ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, (paddleHuman.Location.Y + paddleHuman.Height) / 2);
-            if (xVel < 0)
-                xVel = Math.Abs(xVel);
-            lbllevelandtime.Text = Localization.Parse("{{LEVEL}}: " + level + " - " + secondsleft + " {SECONDS_LEFT}");
-        }
-
-        public void btnhighscore_Click(object s, EventArgs a)
-        {
-            pnlhighscore.BringToFront();
-            SetupHighScores();
-        }
-
-        public void SetupHighScores()
-        {
-            lbhighscore.Items.Clear();
-            ServerManager.MessageReceived += (msg) =>
-            {
-                if(msg.Name == "pong_highscores")
-                {
-                    var hs = JsonConvert.DeserializeObject<List<PongHighscore>>(msg.Contents);
-
-                    var orderedhs = hs.OrderByDescending(i => i.HighestLevel);
-
-                    foreach(var score in orderedhs)
-                    {
-                        this.Invoke(new Action(() =>
-                        {
-                            lbhighscore.Items.Add($"{score.UserName}\t\t\t{score.HighestLevel}\t\t{score.HighestCodepoints} CP");
-                        }));
-                    }
-                }
-            };
-            ServerManager.SendMessage("pong_gethighscores", null);
-            pnlhighscore.Show();
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void btnplayagain_Click(object sender, EventArgs e)
-        {
-            newgame();
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void btnlosetryagain_Click(object sender, EventArgs e)
-        {
-            newgame();
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void btnstartgame_Click(object sender, EventArgs e)
-        {
-            newgame();
-        }
-
-        Random rand = new Random();
-        // ERROR: Handles clauses are not supported in C#
-        private void tmrstoryline_Tick(object sender, EventArgs e)
-        {
-            // Random chance of showing getshiftnet storyline
-            int i = rand.Next(0, 100);
-
-            if (i >= 25 && i <= 50)
-            {
-                tmrstoryline.Stop();
-            }
-
-        }
-
-        // ERROR: Handles clauses are not supported in C#
-        private void me_closing(object sender, FormClosingEventArgs e)
-        {
-            tmrstoryline.Stop();
-        }
-
-        private void Label6_Click(object sender, EventArgs e)
-        {
-
-        }
-
-        private void Label8_Click(object sender, EventArgs e)
-        {
-
-        }
-
-        private void pgcontents_Paint(object sender, PaintEventArgs e) {
-
-        }
-
-        private void ball_MouseEnter(object sender, EventArgs e) {
-            aiShouldIsbeEnabled = false;
-        }
-
-        private void ball_MouseLeave(object sender, EventArgs e) {
-            aiShouldIsbeEnabled = true;
-        }
-
-        public void OnLoad()
-        {
-            pnlintro.BringToFront();
-            pnlintro.Show();
-            pnlhighscore.Hide();
-            pnlgamestats.Hide();
-            pnlfinalstats.Hide();
-        }
-
-        public void OnSkinLoad()
-        {
-        }
-
-        public bool OnUnload()
-        {
-            return true;
-        }
-
-        public void OnUpgrade()
-        {
-        }
-
-        private void button2_Click(object sender, EventArgs e)
-        {
-            pnlhighscore.Hide();
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs
deleted file mode 100644
index e0e76fa..0000000
--- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.Designer.cs
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using ShiftOS.WinForms.Controls;
-
-namespace ShiftOS.WinForms.Applications
-{
-    partial class ShiftoriumFrontend
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Windows Form Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.panel1 = new System.Windows.Forms.Panel();
-            this.panel2 = new System.Windows.Forms.Panel();
-            this.label2 = new System.Windows.Forms.Label();
-            this.label3 = new System.Windows.Forms.Label();
-            this.lbupgradedesc = new System.Windows.Forms.Label();
-            this.pnlupgradeactions = new System.Windows.Forms.Panel();
-            this.btnbuy = new System.Windows.Forms.Button();
-            this.lbupgradetitle = new System.Windows.Forms.Label();
-            this.pnllist = new System.Windows.Forms.Panel();
-            this.label1 = new System.Windows.Forms.Label();
-            this.pgupgradeprogress = new ShiftOS.WinForms.Controls.ShiftedProgressBar();
-            this.lbupgrades = new System.Windows.Forms.ListBox();
-            this.panel1.SuspendLayout();
-            this.panel2.SuspendLayout();
-            this.pnlupgradeactions.SuspendLayout();
-            this.pnllist.SuspendLayout();
-            this.SuspendLayout();
-            // 
-            // panel1
-            // 
-            this.panel1.Controls.Add(this.panel2);
-            this.panel1.Controls.Add(this.pnllist);
-            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.panel1.Location = new System.Drawing.Point(0, 0);
-            this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(782, 427);
-            this.panel1.TabIndex = 0;
-            // 
-            // panel2
-            // 
-            this.panel2.Controls.Add(this.lbupgradedesc);
-            this.panel2.Controls.Add(this.pnlupgradeactions);
-            this.panel2.Controls.Add(this.lbupgradetitle);
-            this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.panel2.Location = new System.Drawing.Point(406, 0);
-            this.panel2.Name = "panel2";
-            this.panel2.Size = new System.Drawing.Size(376, 427);
-            this.panel2.TabIndex = 1;
-            // 
-            // label2
-            // 
-            if (ShiftoriumFrontend.UpgradeInstalled("shiftorium_gui_codepoints_display"))
-            {
-                this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-                this.label2.AutoSize = true;
-                this.label2.Location = new System.Drawing.Point(128, 357);
-                this.label2.Name = "label2";
-                this.label2.Size = new System.Drawing.Size(135, 13);
-                this.label2.TabIndex = 3;
-                this.label2.Text = "You have: %cp Codepoints";
-                this.label2.Click += new System.EventHandler(this.label2_Click);
-            } else
-            {
-                this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-                this.label2.AutoSize = true;
-                this.label2.Location = new System.Drawing.Point(128, 357);
-                this.label2.Name = "label2";
-                this.label2.Size = new System.Drawing.Size(1, 1);
-                this.label2.TabIndex = 3;
-                this.label2.Text = "";
-                this.label2.Click += new System.EventHandler(this.label2_Click);
-            }
-            // 
-            // lbupgradedesc
-            // 
-            this.lbupgradedesc.Dock = System.Windows.Forms.DockStyle.Fill;
-            this.lbupgradedesc.Location = new System.Drawing.Point(0, 42);
-            this.lbupgradedesc.Name = "lbupgradedesc";
-            this.lbupgradedesc.Size = new System.Drawing.Size(376, 348);
-            this.lbupgradedesc.TabIndex = 2;
-            this.lbupgradedesc.Text = "{SHIFTORIUM_EXP}";
-            this.lbupgradedesc.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.lbupgradedesc.UseCompatibleTextRendering = true;
-            // 
-            // pnlupgradeactions
-            // 
-            this.pnlupgradeactions.Controls.Add(this.btnbuy);
-            this.pnlupgradeactions.Dock = System.Windows.Forms.DockStyle.Bottom;
-            this.pnlupgradeactions.Location = new System.Drawing.Point(0, 390);
-            this.pnlupgradeactions.Name = "pnlupgradeactions";
-            this.pnlupgradeactions.Size = new System.Drawing.Size(376, 37);
-            this.pnlupgradeactions.TabIndex = 1;
-            // 
-            // btnbuy
-            // 
-            this.btnbuy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.btnbuy.AutoSize = true;
-            this.btnbuy.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
-            this.btnbuy.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.btnbuy.Location = new System.Drawing.Point(327, 9);
-            this.btnbuy.Name = "btnbuy";
-            this.btnbuy.Size = new System.Drawing.Size(37, 25);
-            this.btnbuy.TabIndex = 0;
-            this.btnbuy.Text = "Buy";
-            this.btnbuy.UseVisualStyleBackColor = true;
-            this.btnbuy.Visible = false;
-            this.btnbuy.Click += new System.EventHandler(this.btnbuy_Click);
-            // 
-            // lbupgradetitle
-            // 
-            this.lbupgradetitle.Dock = System.Windows.Forms.DockStyle.Top;
-            this.lbupgradetitle.Location = new System.Drawing.Point(0, 0);
-            this.lbupgradetitle.Name = "lbupgradetitle";
-            this.lbupgradetitle.Size = new System.Drawing.Size(376, 42);
-            this.lbupgradetitle.TabIndex = 0;
-            this.lbupgradetitle.Text = "{WELCOME_TO_SHIFTORIUM}";
-            this.lbupgradetitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
-            this.lbupgradetitle.UseCompatibleTextRendering = true;
-            // 
-            // pnllist
-            // 
-            this.pnllist.Controls.Add(this.label2);
-            this.pnllist.Controls.Add(this.label1);
-            this.pnllist.Controls.Add(this.pgupgradeprogress);
-            this.pnllist.Controls.Add(this.lbupgrades);
-            this.pnllist.Dock = System.Windows.Forms.DockStyle.Left;
-            this.pnllist.Location = new System.Drawing.Point(0, 0);
-            this.pnllist.Name = "pnllist";
-            this.pnllist.Size = new System.Drawing.Size(406, 427);
-            this.pnllist.TabIndex = 0;
-            // 
-            // label1
-            // 
-            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.label1.AutoSize = true;
-            this.label1.Location = new System.Drawing.Point(3, 399);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(137, 13);
-            this.label1.TabIndex = 2;
-            this.label1.Text = "{UPGRADE_PROGRESS}:";
-            // 
-            // label3
-            // 
-            this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.label3.AutoSize = true;
-            this.label3.Location = new System.Drawing.Point(3, 399);
-            this.label3.Name = "label3";
-            this.label3.Size = new System.Drawing.Size(137, 13);
-            this.label3.TabIndex = 2;
-            int upgradepercent = (pgupgradeprogress.Value / 100) * 100;
-            this.label3.Text = upgradepercent.ToString();
-            // 
-            // pgupgradeprogress
-            // 
-            this.pgupgradeprogress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.pgupgradeprogress.BlockSize = 5;
-            this.pgupgradeprogress.Location = new System.Drawing.Point(146, 390);
-            this.pgupgradeprogress.Maximum = 100;
-            this.pgupgradeprogress.Name = "pgupgradeprogress";
-            this.pgupgradeprogress.Size = new System.Drawing.Size(254, 23);
-            this.pgupgradeprogress.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
-            this.pgupgradeprogress.TabIndex = 1;
-            this.pgupgradeprogress.Value = 25;
-            // 
-            // lbupgrades
-            // 
-            this.lbupgrades.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-            this.lbupgrades.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
-            this.lbupgrades.FormattingEnabled = true;
-            this.lbupgrades.Location = new System.Drawing.Point(3, 66);
-            this.lbupgrades.Name = "lbupgrades";
-            this.lbupgrades.Size = new System.Drawing.Size(397, 277);
-            this.lbupgrades.TabIndex = 0;
-            this.lbupgrades.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.lbupgrades_DrawItem);
-            // 
-            // ShiftoriumFrontend
-            // 
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.BackColor = System.Drawing.Color.Black;
-            this.Controls.Add(this.panel1);
-            this.ForeColor = System.Drawing.Color.LightGreen;
-            this.Name = "ShiftoriumFrontend";
-            this.Text = "{SHIFTORIUM_NAME}";
-            this.Size = new System.Drawing.Size(782, 427);
-            this.Load += new System.EventHandler(this.Shiftorium_Load);
-            this.panel1.ResumeLayout(false);
-            this.panel2.ResumeLayout(false);
-            this.pnlupgradeactions.ResumeLayout(false);
-            this.pnlupgradeactions.PerformLayout();
-            this.pnllist.ResumeLayout(false);
-            this.pnllist.PerformLayout();
-            this.ResumeLayout(false);
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.Panel panel1;
-        private System.Windows.Forms.Panel panel2;
-        private System.Windows.Forms.Panel pnllist;
-        private System.Windows.Forms.ListBox lbupgrades;
-        private System.Windows.Forms.Label lbupgradedesc;
-        private System.Windows.Forms.Panel pnlupgradeactions;
-        private System.Windows.Forms.Label lbupgradetitle;
-        private System.Windows.Forms.Button btnbuy;
-        private ShiftedProgressBar pgupgradeprogress;
-        private System.Windows.Forms.Label label1;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Label label3;
-    }
-}
\ No newline at end of file
diff --git a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs b/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs
deleted file mode 100644
index 0580b47..0000000
--- a/ShiftOS.WinForms/Applications/ShiftoriumFrontend.cs
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-using static ShiftOS.Engine.SkinEngine;
-using backend = ShiftOS.Engine.Shiftorium;
-namespace ShiftOS.WinForms.Applications
-{
-    [Launcher("Shiftorium", true, "al_shiftorium", "Utilities")]
-    [RequiresUpgrade("shiftorium_gui")]
-    [MultiplayerOnly]
-    [WinOpen("shiftorium")]
-    [DefaultTitle("Shiftorium")]
-    [DefaultIcon("iconShiftorium")]
-    public partial class ShiftoriumFrontend : UserControl, IShiftOSWindow
-    {
-
-        public static System.Timers.Timer timer100;
-
-
-        public ShiftoriumFrontend()
-        {
-
-            InitializeComponent();
-            PopulateShiftorium();
-            lbupgrades.SelectedIndexChanged += (o, a) =>
-            {
-                try
-                {
-                    lbupgrades.Refresh();
-                    SelectUpgrade(lbupgrades.SelectedItem.ToString());
-                }
-                catch { }
-            };
-            this.pgupgradeprogress.Maximum = backend.GetDefaults().Count;
-            this.pgupgradeprogress.Value = SaveSystem.CurrentSave.CountUpgrades();
-            backend.Installed += () =>
-            {
-                this.pgupgradeprogress.Maximum = backend.GetDefaults().Count;
-                this.pgupgradeprogress.Value = SaveSystem.CurrentSave.CountUpgrades();
-            };
-
-        }
-
-        public void SelectUpgrade(string name)
-        {
-            btnbuy.Show();
-            var upg = upgrades[name];
-            lbupgradetitle.Text = Localization.Parse(upg.Name);
-            lbupgradedesc.Text = Localization.Parse(upg.Description);
-        }
-
-        Dictionary<string, ShiftoriumUpgrade> upgrades = new Dictionary<string, ShiftoriumUpgrade>();
-
-        public void PopulateShiftorium()
-        {
-            lbupgrades.Items.Clear();
-            upgrades.Clear();
-            Timer();
-            label2.Text = "You have: " + SaveSystem.CurrentSave.Codepoints.ToString() + " Codepoints";
-
-            foreach (var upg in backend.GetAvailable())
-            {
-                String name = Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP";
-                upgrades.Add(name, upg);
-                lbupgrades.Items.Add(name);
-            }
-        }
-
-        public static bool UpgradeInstalled(string upg)
-        {
-            return backend.UpgradeInstalled(upg);
-        }
-
-        public static bool UpgradeAttributesUnlocked(FieldInfo finf)
-        {
-            return backend.UpgradeAttributesUnlocked(finf);
-        }
-
-        public static bool UpgradeAttributesUnlocked(MethodInfo finf)
-        {
-            return backend.UpgradeAttributesUnlocked(finf);
-        }
-
-        public static bool UpgradeAttributesUnlocked(Type finf)
-        {
-            return backend.UpgradeAttributesUnlocked(finf);
-        }
-
-        public static bool UpgradeAttributesUnlocked(PropertyInfo finf)
-        {
-            return backend.UpgradeAttributesUnlocked(finf);
-        }
-
-        private void lbupgrades_DrawItem(object sender, DrawItemEventArgs e)
-        {
-            var foreground = new SolidBrush(LoadedSkin.ControlTextColor);
-            var background = new SolidBrush(LoadedSkin.ControlColor);
-
-            e.Graphics.FillRectangle(background, e.Bounds);
-            try
-            {
-                if (lbupgrades.GetSelected(e.Index) == true)
-                {
-                    e.Graphics.FillRectangle(foreground, e.Bounds);
-                    e.Graphics.DrawString(lbupgrades.Items[e.Index].ToString(), e.Font, background, e.Bounds.Location);
-                }
-                else
-                {
-                    e.Graphics.FillRectangle(background, e.Bounds);
-                    e.Graphics.DrawString(lbupgrades.Items[e.Index].ToString(), e.Font, foreground, e.Bounds.Location);
-                }
-            }
-            catch
-            {
-            }
-        }
-
-        private void btnbuy_Click(object sender, EventArgs e)
-        {
-            backend.Silent = true;
-            backend.Buy(upgrades[lbupgrades.SelectedItem.ToString()].ID, upgrades[lbupgrades.SelectedItem.ToString()].Cost);
-            backend.Silent = false;
-            PopulateShiftorium();
-            btnbuy.Hide();
-        }
-
-        private void Shiftorium_Load(object sender, EventArgs e) {
-
-        }
-
-        public void OnLoad()
-        {
-        }
-
-        public void OnSkinLoad()
-        {
-
-        }
-
-        public bool OnUnload()
-        {
-            return true;
-        }
-
-        public void OnUpgrade()
-        {
-
-        }
-
-        private void label2_Click(object sender, EventArgs e)
-        {
-
-        }
-
-        void Timer()
-        {
-            timer100 = new System.Timers.Timer();
-            timer100.Interval = 2000;
-            //timer100.Elapsed += ???;
-            timer100.AutoReset = true;
-            timer100.Enabled = true;
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Controls/TerminalBox.cs b/ShiftOS.WinForms/Controls/TerminalBox.cs
deleted file mode 100644
index 9e4c61c..0000000
--- a/ShiftOS.WinForms/Controls/TerminalBox.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-using ShiftOS.WinForms.Tools;
-
-namespace ShiftOS.WinForms.Controls
-{
-    public class TerminalBox : RichTextBox, ITerminalWidget
-    {
-        public void SelectBottom()
-        {
-            try
-            {
-                this.Select(this.Text.Length, 0);
-                this.ScrollToCaret();
-            }
-            catch { }
-        }
-
-        protected override void OnClick(EventArgs e)
-        {
-            base.OnClick(e);
-            this.Select(this.TextLength, 0);
-        }
-
-        public void Write(string text)
-        {
-            this.HideSelection = true;
-            this.Select(this.TextLength, 0);
-            this.SelectionFont = ConstructFont();
-            this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
-            this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
-            this.AppendText(Localization.Parse(text));
-            this.HideSelection = false;
-        }
-
-        private Font ConstructFont()
-        {
-            FontStyle fs = FontStyle.Regular;
-            if (ConsoleEx.Bold)
-                fs = fs | FontStyle.Bold;
-            if (ConsoleEx.Italic)
-                fs = fs | FontStyle.Italic;
-            if (ConsoleEx.Underline)
-                fs = fs | FontStyle.Underline;
-
-            return new Font(this.Font, fs);
-        }
-
-        public void WriteLine(string text)
-        {
-            this.HideSelection = true;
-            this.Select(this.TextLength, 0);
-            this.SelectionFont = ConstructFont();
-            this.SelectionColor = ControlManager.ConvertColor(ConsoleEx.ForegroundColor);
-            this.SelectionBackColor = ControlManager.ConvertColor(ConsoleEx.BackgroundColor);
-            this.AppendText(Localization.Parse(text) + Environment.NewLine);
-            this.HideSelection = false;
-        }
-
-        bool quickCopying = false;
-
-        protected override void OnMouseDown(MouseEventArgs e)
-        {
-            //if right-clicking, then we initiate a quick-copy.
-            if (e.Button == MouseButtons.Right)
-                quickCopying = true;
-            
-            //Override the mouse event so that it's a left-click at all times.
-            base.OnMouseDown(new MouseEventArgs(MouseButtons.Left, e.Clicks, e.X, e.Y, e.Delta));
-        }
-
-        protected override void OnMouseUp(MouseEventArgs mevent)
-        {
-            if(quickCopying == true)
-            {
-                if (!string.IsNullOrWhiteSpace(this.SelectedText))
-                {
-                    this.Copy();
-                }
-            }
-            base.OnMouseUp(mevent);
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Oobe.cs b/ShiftOS.WinForms/Oobe.cs
deleted file mode 100644
index 7370396..0000000
--- a/ShiftOS.WinForms/Oobe.cs
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Newtonsoft.Json;
-using ShiftOS.Engine;
-using ShiftOS.Objects;
-using ShiftOS.Objects.ShiftFS;
-
-namespace ShiftOS.WinForms
-{
-    public partial class Oobe : Form, IOobe, ITutorial
-    {
-        public Oobe()
-        {
-            InitializeComponent();
-            this.FormBorderStyle = FormBorderStyle.None;
-            this.WindowState = FormWindowState.Maximized;
-            this.BackColor = Color.Black;
-
-        }
-
-
-        string rtext;
-        string gtexttotype;
-        int charcount;
-        int slashcount;
-        Label textgeninput;
-        public bool upgraded = false;
-        
-        private bool typing = false;
-        
-        public void TextType(string texttotype)
-        {
-            while(typing == true)
-            {
-
-            }
-            
-            charcount = texttotype.Length;
-            gtexttotype = texttotype;
-            slashcount = 1;
-            foreach (var c in gtexttotype)
-            {
-                typing = true;
-                rtext += c;
-
-                this.Invoke(new Action(() =>
-                {
-                    textgeninput.Text = rtext + "|";
-                }));
-                slashcount++;
-                if (slashcount == 5)
-                    slashcount = 1;
-                Thread.Sleep(50);
-            }
-            rtext += Environment.NewLine;
-            typing = false;
-        }
-
-        public Save MySave = null;
-
-        public event EventHandler OnComplete;
-
-        private int tutPrg = 0;
-
-        public int TutorialProgress
-        {
-            get
-            {
-                return tutPrg;
-            }
-
-            set
-            {
-                tutPrg = value;
-            }
-        }
-
-        public void StartShowing(Save save)
-        {
-            var t = new Thread(new ThreadStart(() =>
-            {
-                try
-                {
-                    textgeninput = this.lblHijack;
-                    TextType("Your system is now being hijacked.");
-                    rtext = "";
-                    Thread.Sleep(1000);
-                    textgeninput = this.lblhackwords;
-                    this.Invoke(new Action(() =>
-                    {
-                        lblHijack.Hide();
-                    }));
-                    TextType("Hello, and welcome to ShiftOS.");
-                    Thread.Sleep(500);
-                    TextType("You have been cordially and involuntarily selected to participate in the development and testing of this operating system.");
-                    Thread.Sleep(500);
-                    TextType("My identity shall remain secret, but if you've been through this before, you'll know exactly who I am.");
-                    Thread.Sleep(500);
-                    TextType("But that doesn't matter.");
-                    Thread.Sleep(500);
-                    TextType("I will now begin to prepare your system for the installation of ShiftOS.");
-                    Thread.Sleep(1000);
-                    FakeSetupScreen fakeForm = null;
-                    this.Invoke(new Action(() =>
-                    {
-                        fakeForm = new FakeSetupScreen(this);
-                        fakeForm.Show();
-                        MySave = save;
-                        lblhackwords.GotFocus += (o, a) =>
-                        {
-                            try
-                            {
-                                fakeForm.Invoke(new Action(() =>
-                                {
-                                    fakeForm.Focus();
-                                    fakeForm.BringToFront();
-                                }));
-                            }
-                            catch { }
-                        };
-                        fakeForm.TextSent += (txt) =>
-                        {
-                            TextType(txt);
-                        };
-                    }));
-                    while (fakeForm?.Visible == true)
-                    {
-                        Thread.Sleep(10);
-                    }
-                    if (fakeForm.CreateNewSave == true)
-                    {
-                        TextType("That's all the information I need for now.");
-                        Thread.Sleep(2000);
-                        TextType("Beginning installation of ShiftOS on " + MySave.SystemName + ".");
-                        Thread.Sleep(500);
-                        TextType("Creating new user: " + MySave.Username);
-                        TextType("...with 0 Codepoints, 0 installed upgrades, no legion, and no user shops...");
-                        MySave.Codepoints = 0;
-                        MySave.CurrentLegions = new List<string>();
-                        MySave.MyShop = "";
-                        TextType("User created successfully.");
-                        Thread.Sleep(450);
-                        TextType("You may be wondering what all that meant... You see, in ShiftOS, your user account holds everything I need to know about you.");
-                        Thread.Sleep(640);
-                        TextType("It holds the amount of Codepoints you have - Codepoints are a special currency you can get by doing various tasks in ShiftOS.");
-                        Thread.Sleep(500);
-                        TextType("It also holds all the upgrades you've installed onto ShiftOS - features, applications, enhancements, patches, all that stuff.");
-                        Thread.Sleep(500);
-                        TextType("As for the legions and the shop thing, I'll reveal that to you when it becomes necessary.");
-                        Thread.Sleep(500);
-                        TextType("Your user account is stored on a server of mine called the multi-user domain. It holds every single user account, every script, every application, every thing within ShiftOS.");
-                        Thread.Sleep(600);
-                        TextType("Every time you boot ShiftOS, if you are connected to the Internet, you will immediately connect to the multi-user domain and ShiftOS will attempt to authenticate using the last ");
-                        TextType("successful username and password pair.");
-                        Thread.Sleep(500);
-                        TextType("When you are in the MUD, you are in the middle of a free-for-all. I don't want it to be this way, it just is. I've employed you to help me develop and test the MUD and ShiftOS, ");
-                        TextType("but you have a secondary task if you choose to accept it.");
-                        Thread.Sleep(500);
-                        TextType("There have been a few rebelious groups in the MUD - who have cracked ShiftOS's security barriers - and they're using these exploits to steal others' Codepoints, upgrades, ");
-                        TextType("and even spread damaging viruses.");
-                        Thread.Sleep(500);
-                        TextType("I want you to stop them.");
-                        Thread.Sleep(500);
-                        TextType("Whoever can stop these hackers will gain eternal control over the multi-user domain. They will be given the ability to do as they please, so long as it doesn't interfere with my experiments.");
-                        Thread.Sleep(500);
-                        TextType("I have been installing ShiftOS on your system in the background as I was talking with you. Before I can set you free, I need to give you a tutorial on how to use the system.");
-                        Thread.Sleep(500);
-                        TextType("I will reboot your system in Tutorial Mode now. Complete the tutorial, and you shall be on your way.");
-
-                        Thread.Sleep(3000);
-                        SaveSystem.CurrentSave = MySave;
-                        SaveSystem.CurrentSave.StoryPosition = 1;
-                        Utils.WriteAllText(Paths.GetPath("user.dat"), JsonConvert.SerializeObject(new
-                        {
-                            username = MySave.Username,
-                            password = MySave.Password
-                        }));
-                        Shiftorium.Silent = true;
-                        SaveSystem.SaveGame(); //Yknow, just incase it crashes.
-                    }
-                    else
-                    {
-                        TextType("Your login attempt was successful, " + SaveSystem.CurrentSave.Username + ".");
-                        Thread.Sleep(500);
-                        TextType($"According to my data on you, you have earned {SaveSystem.CurrentSave.Codepoints} Codepoints so far.");
-                        Thread.Sleep(500);
-                        TextType($"You have also acquired {SaveSystem.CurrentSave.CountUpgrades()} Shiftorium upgrades out of the {SaveSystem.CurrentSave.Upgrades.Count} available.");
-                        Thread.Sleep(500);
-                        TextType("I will now let you proceed to your system.");
-                        Thread.Sleep(1000);
-                    }
-                    this.Invoke(new Action(this.Close));
-                }
-                catch (Exception e)
-                {
-                    TextType("I have experienced an error.");
-                    TextType(e.ToString());
-                }
-            }));
-            this.Show();
-            this.BringToFront();
-            this.TopMost = true;
-            t.IsBackground = true;
-            t.Start();
-        }
-
-        public void Clear()
-        {
-            this.Invoke(new Action(() =>
-            {
-                rtext = "";
-                textgeninput.Text = "";
-            }));
-        }
-
-        public void ShowSaveTransfer(Save save)
-        {
-            this.Show();
-            var fSetup = new FakeSetupScreen(this, 7);
-
-            var t = new Thread(() =>
-            {
-                textgeninput = lblhackwords;
-                Clear();
-                TextType("Welcome back to ShiftOS.");
-                Thread.Sleep(500);
-                TextType("Since your last time inside ShiftOS, the operating system has changed. Your user account is no longer stored on your local system.");
-                Thread.Sleep(500);
-                this.Invoke(new Action(() =>
-                {
-                    //UPS is drunky heaven over here... it's a liquor store, I think... - Drunk Michael
-                    fSetup.UserReregistered += (u, p, s) =>
-                    {
-                        save.Username = u;
-                        save.Password = p;
-                        save.SystemName = s;
-                        SaveSystem.CurrentSave = save;
-                        SaveSystem.CurrentSave.Upgrades = new Dictionary<string, bool>();
-                        Shiftorium.Init();
-
-                        SaveSystem.SaveGame();
-                        if(Utils.FileExists(Paths.SaveFileInner))
-                            Utils.Delete(Paths.SaveFileInner);
-                        this.Close();
-                    };
-                    fSetup.Show();
-                }));
-            });
-            t.IsBackground = true;
-            t.Start();
-        }
-
-        public void PromptForLogin()
-        {
-            this.Show();
-            this.TopMost = true;
-            lblHijack.Text = "";
-            textgeninput = lblhackwords;
-
-            var fsw = new FakeSetupScreen(this, 10);
-            fsw.Show();
-            fsw.TopMost = true;
-            fsw.DoneLoggingIn += () =>
-            {
-                this.Close();
-            };
-        }
-
-        public void StartTrailer()
-        {
-            while(AppearanceManager.OpenForms.Count > 0)
-            {
-                AppearanceManager.OpenForms[0].Close();
-            }
-            
-            this.Show();
-            this.TopMost = true;
-            this.TransparencyKey = Color.Magenta;
-            this.BackColor = this.TransparencyKey;
-            textgeninput = lblHijack;
-            textgeninput.BackColor = Color.Black;
-            textgeninput.Font = new Font("Lucida Console", 13F, FontStyle.Bold);
-            textgeninput.AutoSize = true;
-            textgeninput.TextAlign = ContentAlignment.MiddleCenter;
-            textgeninput.TextChanged += (o, a) =>
-            {
-                textgeninput.Location = new Point(
-                        (this.Width - textgeninput.Width) / 2,
-                        (this.Height - textgeninput.Height) / 2
-                    );
-            };
-            var t = new Thread(() =>
-            {
-                Clear();
-                Thread.Sleep(5000);
-                TextType("Michael VanOverbeek");
-                TextType("presents...");
-                Thread.Sleep(2000);
-                Clear();
-                Thread.Sleep(1000);
-                TextType("A community-developed game");
-                Thread.Sleep(3000);
-                Clear();
-                Thread.Sleep(1000);
-                this.Invoke(new Action(() =>
-                {
-                    textgeninput.Font = new Font("Lucida Console", 14F, FontStyle.Bold);
-                    this.BackColor = Color.Black;
-                }));
-                TextType("Welcome to ShiftOS.");
-                Thread.Sleep(4000);
-                Clear();
-                textgeninput = lblhackwords;
-                TextType("Hello.");
-                Thread.Sleep(500);
-                TextType("You have been cordially and involuntarily selected to participate in the development and testing of an experimental operating system called ShiftOS.");
-                Thread.Sleep(500);
-                TextType("I want ShiftOS to be the most advanced operating system in the world.");
-                Thread.Sleep(500);
-                TextType("In ShiftOS, you start out with nothing.");
-                Thread.Sleep(500);
-                TextType("And your goal is to upgrade the operating system from a barebones command line to a fully graphical operating system.");
-                Thread.Sleep(500);
-                TextType("Along the way, you'll meet many people - hackers, rebels, programmers, administrators and many more.");
-                Thread.Sleep(500);
-                TextType("You'll meet new friends and foes.");
-                Thread.Sleep(500);
-                TextType("Your goal: Take it over. Upgrade the operating system, and take over its multi-user domain.");
-                Thread.Sleep(500);
-                TextType("I won't reveal quite what you have to do, but if you can handle it, head over to http://getshiftos.ml/ and download the operating system now.");
-                Thread.Sleep(5000);
-                Clear();
-                textgeninput = lblHijack;
-                TextType("Think you can handle it?");
-            });
-            t.IsBackground = false;
-            t.Start();
-        }
-
-        public void Start()
-        {
-            Shiftorium.Silent = false;
-            foreach(var frm in AppearanceManager.OpenForms)
-            {
-                (frm as Form).Invoke(new Action(() => {
-                    frm.Close();
-                }));
-            }
-
-            TerminalBackend.CommandProcessed += (cmd, args) =>
-            {
-                if(cmd == "sos.help")
-                {
-                    if (TutorialProgress == 0)
-                        TutorialProgress = 1;
-                }
-                else if(cmd == "sos.status")
-                {
-                    if (TutorialProgress == 1)
-                        TutorialProgress = 2;
-
-                }
-                else if(cmd == "shiftorium.list")
-                {
-                    if (TutorialProgress == 2)
-                    {
-                        TutorialProgress = 3;
-                        SaveSystem.TransferCodepointsFrom("sys", 50);
-                    }
-                }
-                else if(cmd == "shiftorium.info" && args == "{\"upgrade\":\"mud_fundamentals\"}")
-                {
-                    if (TutorialProgress == 3)
-                        TutorialProgress = 4;
-                }
-                else if(cmd == "win.open")
-                {
-                    if (TutorialProgress == 4)
-                        TutorialProgress = 5;
-                }
-            };
-            if(this.Visible == false)
-                this.Show();
-            var t = new Thread(() =>
-            {
-                textgeninput = lblHijack;
-                Clear();
-                textgeninput = lblhackwords;
-                Clear();
-                
-                this.Invoke(new Action(() =>
-                {
-                    textgeninput.Font = SkinEngine.LoadedSkin.TerminalFont;
-                }));
-                TextType("ShiftOS has been installed successfully.");
-                Thread.Sleep(500);
-                TextType("Before you can continue to the operating system, here's a little tutorial on how to use it.");
-                Thread.Sleep(500);
-                TextType("Starting a Terminal...");
-                Applications.Terminal term = null;
-                this.Invoke(new Action(() =>
-                {
-                    term = new Applications.Terminal();
-                    this.Controls.Add(term);
-                    term.Location = new Point(
-                            (this.Width - term.Width) / 2,
-                            (this.Height - term.Height) / 2
-                        );
-                    term.Show();
-                    term.OnLoad();
-                    term.OnSkinLoad();
-                    term.OnUpgrade();
-                }));
-                TextType("This little text box is called a Terminal.");
-                Thread.Sleep(500);
-                TextType("Normally, it would appear in full-screen, but this window is hosting it as a control so you can see this text as well.");
-                Thread.Sleep(500);
-                TextType("In ShiftOS, the Terminal is your main control centre for the operating system. You can see system status, check Codepoints, open other programs, buy upgrades, and more.");
-                Thread.Sleep(500);
-                TextType("Go ahead and type 'sos.help' to see a list of commands.");
-                while(TutorialProgress == 0)
-                {
-
-                }
-                TextType("As you can see, sos.help gives you a list of all commands in the system.");
-                Thread.Sleep(500);
-                TextType("You can run any command, by typing in their Namespace, followed by a period (.), followed by their Command Name.");
-                Thread.Sleep(500);
-                TextType("Go ahead and run the 'status' command within the 'sos' namespace to see what the command does.");
-                while(TutorialProgress == 1)
-                {
-
-                }
-                TextType("Brilliant. The sos.status command will tell you how many Codepoints you have, as well as how many upgrades you have installed and how many are available.");
-                Thread.Sleep(500);
-                TextType("Codepoints, as you know, are a special currency within ShiftOS. They are used to buy things within the multi-user domain, such as upgrades, scripts, and applications.");
-                Thread.Sleep(500);
-                TextType("You can earn Codepoints by doing things in ShiftOS - such as completing jobs for other users, making things like skins, scripts, documents, etc, and playing games like Pong.");
-                Thread.Sleep(500);
-                TextType("At times, you'll be given Codepoints to help complete a task. You will receive Codepoints from 'sys' - the multi-user domain itself.");
-                //SaveSystem.TransferCodepointsFrom("sys", 50);
-                TextType("Right now, you don't have any upgrades. Upgrades can give ShiftOS additional features and capabilities - like new core applications, supported file types, and new Terminal commands.");
-                Thread.Sleep(500);
-                TextType("You can easily get upgrades using the Shiftorium - a repository of approved ShiftOS upgrades.");
-                Thread.Sleep(500);
-                TextType("To start using the Shiftorium, simply type 'shiftorium.list' to see available upgrades.");
-                while(TutorialProgress == 2)
-                {
-
-                }
-                Clear();
-                TextType("Right now, you have enough Codepoints to buy the 'mud_fundamentals' upgrade. You can use shiftorium.info to see information about this upgrade.");
-                Thread.Sleep(500);
-                TextType("Some commands, like shiftorium.info, require you to pass information to them in the form of arguments.");
-                Thread.Sleep(500);
-                TextType("Argument pairs sit at the end of the command, and are enclosed in curly braces.");
-                Thread.Sleep(500);
-                TextType("Inside these curly braces, you can input an argument key, followed by a colon, followed by the value. Then, if you need multiple arguments, you can put a comma after the value, and then insert another argument pair.");
-                Thread.Sleep(500);
-                TextType("There are different value types - numeric values, which can be any positive or negative 32-bit integer");
-                Thread.Sleep(500);
-                TextType("Then there are boolean values which can be either 'true' or 'false'");
-                Thread.Sleep(500);
-                TextType("Then there are string values, which are enclosed in double-quotes.");
-                Thread.Sleep(500);
-                TextType(" If for some reason you need to use a double-quote inside a string, you must escape it using a single backslash followed by the quote, like this: key:\"My \\\"awesome\\\" value.\"");
-                Thread.Sleep(500);
-                TextType("If you want to escape a backslash inside a string, simply type two backslashes instead of one - for example key:\"Back\\\\slash.\"");
-                Thread.Sleep(500);
-                TextType("shiftorium.info requires an upgrade argument, which is a string type. Go ahead and give shiftorium.info's upgrade argument the 'mud_fundamentals' upgrade's ID.");
-                while(TutorialProgress == 3)
-                {
-
-                } 
-                TextType("As you can see, mud_fundamentals is very useful. In fact, a lot of useful upgrades depend on it. You should buy it!");
-                Thread.Sleep(500);
-                TextType("shiftorium.info already gave you a command that will let you buy the upgrade - go ahead and run that command!");
-                while (!Shiftorium.UpgradeInstalled("mud_fundamentals"))
-                {
-
-                } 
-                TextType("Hooray! You now have the MUD Fundamentals upgrade.");
-                Thread.Sleep(500);
-                TextType("You can also earn more Codepoints by playing Pong. To open Pong, you can use the win.open command.");
-                Thread.Sleep(500);
-                TextType("If you run win.open without arguments, you can see a list of applications that you can open.");
-                Thread.Sleep(500);
-                TextType("Just run win.open without arguments, and this tutorial will be completed!");
-                while(TutorialProgress == 4)
-                {
-
-                }
-                TextType("This concludes the ShiftOS beginners' guide brought to you by the multi-user domain. Stay safe in a connected world.");
-                Thread.Sleep(2000);
-                this.Invoke(new Action(() =>
-                {
-                    OnComplete?.Invoke(this, EventArgs.Empty);
-                    this.Close();
-                    SaveSystem.CurrentSave.StoryPosition = 2;
-                    SaveSystem.SaveGame();
-                    AppearanceManager.SetupWindow(new Applications.Terminal());
-                }));
-            });
-            t.IsBackground = true;
-            t.Start();
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/Tools/ControlManager.cs b/ShiftOS.WinForms/Tools/ControlManager.cs
deleted file mode 100644
index 52663d7..0000000
--- a/ShiftOS.WinForms/Tools/ControlManager.cs
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-using static ShiftOS.Engine.AppearanceManager;
-
-
-namespace ShiftOS.WinForms.Tools
-{
-    public static class ControlManager
-    {
-        [DllImport("user32.dll")]
-        public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
-
-        private const int WM_SETREDRAW = 11;
-
-        public static void SuspendDrawing(Control parent)
-        {
-            SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
-        }
-
-        public static void ResumeDrawing(Control parent)
-        {
-            SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
-            parent.Refresh();
-        }
-
-        public static void Close(this UserControl ctrl)
-        {
-            for (int i = 0; i < AppearanceManager.OpenForms.Count; i++)
-            {
-                if (OpenForms[i].ParentWindow == ctrl)
-                {
-                    (OpenForms[i] as Form).Close();
-                    return;
-                }
-            }
-        }
-
-
-        public static void SetupWindows()
-        {
-            if (SaveSystem.CurrentSave != null)
-            {
-                int screen_height_start = 0;
-                if (Shiftorium.UpgradeInstalled("wm_free_placement"))
-                {
-                }
-                else if (Shiftorium.UpgradeInstalled("wm_4_windows"))
-                {
-                    int screen_width_half = Screen.PrimaryScreen.Bounds.Width / 2;
-                    int screen_height_half = (Screen.PrimaryScreen.Bounds.Height - screen_height_start) / 2;
-
-                    for (int i = 0; i < OpenForms.Count; i++)
-                    {
-                        var frm = OpenForms[i] as WindowBorder;
-
-                        switch (i)
-                        {
-                            case 0:
-                                frm.Location = new System.Drawing.Point(0, screen_height_start);
-                                frm.Size = new System.Drawing.Size((OpenForms.Count > 1) ? screen_width_half : screen_width_half * 2, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
-
-                                break;
-                            case 1:
-                                frm.Location = new System.Drawing.Point(screen_width_half, screen_height_start);
-                                frm.Size = new System.Drawing.Size(screen_width_half, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
-                                break;
-                            case 2:
-                                frm.Location = new System.Drawing.Point(0, screen_height_half + screen_height_start);
-                                frm.Size = new System.Drawing.Size((OpenForms.Count > 3) ? screen_width_half : screen_width_half * 2, screen_height_half);
-                                break;
-                            case 3:
-                                frm.Location = new System.Drawing.Point(screen_width_half, screen_height_half + screen_height_start);
-                                frm.Size = new System.Drawing.Size(screen_width_half, (OpenForms.Count > 2) ? screen_height_half : screen_height_half * 2);
-                                break;
-                        }
-                    }
-
-                }
-                else if (Shiftorium.UpgradeInstalled("window_manager"))
-                {
-                    int screen_width_half = Screen.PrimaryScreen.Bounds.Width / 2;
-                    int screen_height = (Screen.PrimaryScreen.Bounds.Height) - screen_height_start;
-
-
-
-                    for (int i = 0; i < OpenForms.Count; i++)
-                    {
-
-
-                        var frm = OpenForms[i] as WindowBorder;
-                        switch (i)
-                        {
-                            case 0:
-                                frm.Location = new System.Drawing.Point(0, screen_height_start);
-                                frm.Size = new System.Drawing.Size((OpenForms.Count > 1) ? screen_width_half : screen_width_half * 2, screen_height);
-                                break;
-                            case 1:
-                                frm.Location = new System.Drawing.Point(screen_width_half, screen_height_start);
-                                frm.Size = new System.Drawing.Size(screen_width_half, screen_height);
-                                break;
-                        }
-                        OpenForms[i] = frm;
-                    }
-                }
-                else
-                {
-                    var frm = OpenForms[0] as WindowBorder;
-                    frm.Location = new Point(0, 0);
-                    frm.Size = Desktop.Size;
-                    OpenForms[0] = frm;
-
-                }
-            }
-            else
-            {
-                var frm = OpenForms[0] as WindowBorder;
-                frm.Location = new Point(0, 0);
-                frm.Size = Desktop.Size;
-                OpenForms[0] = frm;
-
-            }
-        }
-
-        internal static Color ConvertColor(ConsoleColor cCol)
-        {
-            switch (cCol)
-            {
-                case ConsoleColor.Black:
-                    return Color.Black;
-                case ConsoleColor.Gray:
-                    return Color.Gray;
-                case ConsoleColor.DarkGray:
-                    return Color.DarkGray;
-                case ConsoleColor.Blue:
-                    return Color.Blue;
-                case ConsoleColor.Cyan:
-                    return Color.Cyan;
-                case ConsoleColor.DarkBlue:
-                    return Color.DarkBlue;
-                case ConsoleColor.DarkCyan:
-                    return Color.DarkCyan;
-                case ConsoleColor.DarkGreen:
-                    return Color.DarkGreen;
-                case ConsoleColor.DarkMagenta:
-                    return Color.DarkMagenta;
-                case ConsoleColor.DarkRed:
-                    return Color.DarkRed;
-                case ConsoleColor.DarkYellow:
-                    return Color.YellowGreen;
-                case ConsoleColor.Yellow:
-                    return Color.Yellow;
-                case ConsoleColor.Green:
-                    return Color.Green;
-                case ConsoleColor.Magenta:
-                    return Color.Magenta;
-                case ConsoleColor.Red:
-                    return Color.Red;
-                case ConsoleColor.White:
-                    return Color.White;
-                default:
-                    return Color.Black;
-            }
-
-        }
-
-        public static void SetCursor(Control ctrl)
-        {
-#if STUPID
-            if (!(ctrl is WebBrowser))
-            {
-                var mouse = SkinEngine.GetImage("mouse");
-                if (mouse == null)
-                    mouse = Properties.Resources.DefaultMouse;
-
-                var mBmp = new Bitmap(mouse);
-                mBmp.MakeTransparent(Color.FromArgb(1, 0, 1));
-                var gfx = Graphics.FromImage(mBmp);
-                var handle = mBmp.GetHicon();
-
-                var cursor = new Cursor(handle);
-                ctrl.Cursor = cursor;
-            }
-#endif
-        }
-
-        public static void SetupControl(Control ctrl)
-        {
-            SuspendDrawing(ctrl);
-            SetCursor(ctrl);
-            if (!(ctrl is MenuStrip) && !(ctrl is ToolStrip) && !(ctrl is StatusStrip) && !(ctrl is ContextMenuStrip))
-            {
-                string tag = "";
-
-                try
-                {
-                    tag = ctrl.Tag.ToString();
-                }
-                catch { }
-
-                if (!tag.Contains("keepbg"))
-                {
-                    if (ctrl.BackColor != Control.DefaultBackColor)
-                    {
-                        ctrl.BackColor = SkinEngine.LoadedSkin.ControlColor;
-                    }
-                }
-
-                ctrl.ForeColor = SkinEngine.LoadedSkin.ControlTextColor;
-
-                ctrl.Font = SkinEngine.LoadedSkin.MainFont;
-
-                if (tag.Contains("header1"))
-                {
-                    ctrl.Font = SkinEngine.LoadedSkin.HeaderFont;
-                }
-
-                if (tag.Contains("header2"))
-                {
-                    ctrl.Font = SkinEngine.LoadedSkin.Header2Font;
-                }
-
-                if (tag.Contains("header3"))
-                {
-                    ctrl.Font = SkinEngine.LoadedSkin.Header3Font;
-                }
-
-                try
-                {
-                    ctrl.Text = Localization.Parse(ctrl.Text);
-                }
-                catch
-                {
-
-                }
-                ctrl.KeyDown += (o, a) =>
-                {
-                    if (a.Control && a.KeyCode == Keys.T)
-                    {
-                        a.SuppressKeyPress = true;
-
-
-                        if (SaveSystem.CurrentSave != null)
-                        {
-                            if (Shiftorium.UpgradeInstalled("window_manager"))
-                            {
-                                Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
-                            }
-                        }
-                    }
-
-                    ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
-                    //a.Handled = true;
-                };
-                if (ctrl is Button)
-                {
-                    (ctrl as Button).FlatStyle = FlatStyle.Flat;
-                }
-                else if (ctrl is WindowBorder)
-                {
-                    (ctrl as WindowBorder).Setup();
-                }
-            }
-
-            MakeDoubleBuffered(ctrl);
-            ResumeDrawing(ctrl);
-        }
-
-        public static void MakeDoubleBuffered(Control c)
-        {
-            if (System.Windows.Forms.SystemInformation.TerminalServerSession)
-                return;
-
-            System.Reflection.PropertyInfo aProp =
-                  typeof(System.Windows.Forms.Control).GetProperty(
-                        "DoubleBuffered",
-                        System.Reflection.BindingFlags.NonPublic |
-                        System.Reflection.BindingFlags.Instance);
-
-            aProp.SetValue(c, true, null);
-
-        }
-
-        public static void SetupControls(Control frm)
-        {
-            SetupControl(frm);
-
-            for (int i = 0; i < frm.Controls.Count; i++)
-            {
-                SetupControls(frm.Controls[i]);
-            }
-        }
-
-    }
-}
diff --git a/ShiftOS.WinForms/WindowBorder.cs b/ShiftOS.WinForms/WindowBorder.cs
deleted file mode 100644
index 0308f8a..0000000
--- a/ShiftOS.WinForms/WindowBorder.cs
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Drawing;
-using System.Data;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-
-using static ShiftOS.Engine.SkinEngine;
-using System.Runtime.InteropServices;
-using ShiftOS.Engine;
-using ShiftOS.WinForms.Tools;
-using ShiftOS.WinForms.Applications;
-
-/// <summary>
-/// Window border.
-/// </summary>
-namespace ShiftOS.WinForms
-{
-	/// <summary>
-	/// Window border.
-	/// </summary>
-    public partial class WindowBorder : Form, IWindowBorder
-    {
-		/// <summary>
-		/// Raises the closing event.
-		/// </summary>
-		/// <param name="e">E.</param>
-        protected override void OnClosing(CancelEventArgs e)
-        {
-            if ((ParentWindow as IShiftOSWindow).OnUnload())
-            {
-                if (!SaveSystem.ShuttingDown)
-                {
-                    if(Engine.AppearanceManager.OpenForms.Contains(this))
-                        Engine.AppearanceManager.OpenForms.Remove(this);
-                    Desktop.ResetPanelButtons();
-                }
-            }
-            base.OnClosing(e);
-        }
-
-		/// <summary>
-		/// The parent window.
-		/// </summary>
-        private UserControl _parentWindow = null;
-
-        /// <summary>
-        /// Gets or sets the parent window.
-        /// </summary>
-        /// <value>The parent window.</value>
-        public IShiftOSWindow ParentWindow
-        {
-            get
-            {
-                return (IShiftOSWindow)_parentWindow;
-            }
-            set
-            {
-                _parentWindow = (UserControl)value;
-            }
-        }
-
-        internal void SetTitle(string title)
-        {
-            lbtitletext.Text = title;
-        }
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ShiftOS.WinForms.WindowBorder"/> class.
-        /// </summary>
-        /// <param name="win">Window.</param>
-        public WindowBorder(UserControl win)
-        {
-            InitializeComponent();
-            this._parentWindow = win;
-            Shiftorium.Installed += () =>
-            {
-                try
-                {
-                    this.ParentForm.Invoke(new Action(() =>
-                    {
-                        Setup();
-                    }));
-                }
-                catch { }
-            };
-            SkinEngine.SkinLoaded += () =>
-            {
-                try
-                {
-                    Setup();
-                    (ParentWindow as IShiftOSWindow).OnSkinLoad();
-                    ControlManager.SetupControls(this.pnlcontents);
-                }
-                catch
-                {
-
-                }
-            };
-
-            this.Width = LoadedSkin.LeftBorderWidth + _parentWindow.Width + LoadedSkin.RightBorderWidth;
-            this.Height = LoadedSkin.TitlebarHeight + _parentWindow.Height + LoadedSkin.BottomBorderWidth;
-
-            this.pnlcontents.Controls.Add(this._parentWindow);
-            this._parentWindow.Dock = DockStyle.Fill;
-            this._parentWindow.Show();
-            ControlManager.SetupControls(this._parentWindow);
-
-
-            Desktop.ShowWindow(this);
-
-        }
-
-        /// <summary>
-        /// Universals the key down.
-        /// </summary>
-        /// <returns>The key down.</returns>
-        /// <param name="o">O.</param>
-        /// <param name="a">The alpha component.</param>
-        public static void Universal_KeyDown(object o, KeyEventArgs a)
-        {
-            if (a.Control && a.KeyCode == Keys.T)
-            {
-                a.SuppressKeyPress = true;
-
-
-                if (SaveSystem.CurrentSave != null)
-                {
-                    if (Shiftorium.UpgradeInstalled("window_manager"))
-                    {
-                        Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
-                    }
-                }
-            }
-
-            ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
-        }
-
-        /// <summary>
-        /// Windows the border load.
-        /// </summary>
-        /// <returns>The border load.</returns>
-        /// <param name="sender">Sender.</param>
-        /// <param name="e">E.</param>
-        public void WindowBorder_Load(object sender, EventArgs e)
-        {
-            this.DoubleBuffered = true;
-
-            this._parentWindow.TextChanged += (o, a) =>
-            {
-                Setup();
-                Desktop.ResetPanelButtons();
-
-            };
-
-            this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
-            this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;
-
-            if (!this.IsDialog)
-            {
-                Engine.AppearanceManager.OpenForms.Add(this);
-            }
-
-            SaveSystem.GameReady += () =>
-            {
-                if (Shiftorium.UpgradeInstalled("wm_free_placement"))
-                {
-                    AppearanceManager.Invoke(new Action(() =>
-                    {
-                        this.Left = (Screen.PrimaryScreen.Bounds.Width - this.Width) / 2;
-                        this.Top = (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2;
-
-                    }));
-                }
-                AppearanceManager.Invoke(new Action(() =>
-                {
-                    Setup();
-                }));
-            };
-
-            ControlManager.SetupControls(this);
-
-            Setup();
-
-            var sWin = (IShiftOSWindow)ParentWindow;
-
-            sWin.OnLoad();
-        }
-
-        /// <summary>
-        /// Setup this instance.
-        /// </summary>
-        public void Setup()
-        {
-            this.lbtitletext.Text = NameChangerBackend.GetName(ParentWindow);
-            
-            if (SaveSystem.CurrentSave != null)
-            {
-                this.pnltitle.Visible = Shiftorium.UpgradeInstalled("wm_titlebar");
-                this.pnlclose.Visible = Shiftorium.UpgradeInstalled("close_button");
-                this.pnlminimize.Visible = (IsDialog == false) && Shiftorium.UpgradeInstalled("minimize_button");
-                this.pnlmaximize.Visible = (IsDialog == false) && Shiftorium.UpgradeInstalled("maximize_button");
-                SetupSkin();
-            }
-            else
-            {
-                this.pnltitle.Visible = false;
-                this.pnlclose.Visible = false;
-                this.pnlminimize.Visible = false;
-                this.pnlmaximize.Visible = false;
-
-            }
-        }
-
-        /// <summary>
-        /// Setups the skin.
-        /// </summary>
-        /// <returns>The skin.</returns>
-        public void SetupSkin()
-        {
-            this.DoubleBuffered = true;
-            this.TransparencyKey = LoadedSkin.SystemKey;
-            pnltitle.Height = LoadedSkin.TitlebarHeight;
-            pnltitle.BackColor = LoadedSkin.TitleBackgroundColor;
-            pnltitle.BackgroundImage = GetImage("titlebar");
-            pnltitleleft.Visible = LoadedSkin.ShowTitleCorners;
-            pnltitleright.Visible = LoadedSkin.ShowTitleCorners;
-            pnltitleleft.BackColor = LoadedSkin.TitleLeftCornerBackground;
-            pnltitleright.BackColor = LoadedSkin.TitleRightCornerBackground;
-            pnltitleleft.Width = LoadedSkin.TitleLeftCornerWidth;
-            pnltitleright.Width = LoadedSkin.TitleRightCornerWidth;
-            pnltitleleft.BackgroundImage = GetImage("titleleft");
-            pnltitleleft.BackgroundImageLayout = GetImageLayout("titleleft");
-            pnltitleright.BackgroundImage = GetImage("titleright");
-            pnltitleright.BackgroundImageLayout = GetImageLayout("titleright");
-            pnltitle.BackgroundImageLayout = GetImageLayout("titlebar"); //RETARD ALERT. WHY WASN'T THIS THERE WHEN IMAGELAYOUTS WERE FIRST IMPLEMENTED?
-
-            lbtitletext.BackColor = (pnltitle.BackgroundImage != null) ? Color.Transparent : LoadedSkin.TitleBackgroundColor;
-            lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
-            lbtitletext.Font = LoadedSkin.TitleFont;
-
-            pnlleft.BackColor = LoadedSkin.BorderLeftBackground;
-            pnlleft.BackgroundImage = GetImage("leftborder");
-            pnlleft.BackgroundImageLayout = GetImageLayout("leftborder");
-            pnlleft.Width = LoadedSkin.LeftBorderWidth;
-            pnlright.BackColor = LoadedSkin.BorderRightBackground;
-            pnlright.BackgroundImage = GetImage("rightborder");
-            pnlright.BackgroundImageLayout = GetImageLayout("rightborder");
-            pnlright.Width = LoadedSkin.RightBorderWidth;
-
-            pnlbottom.BackColor = LoadedSkin.BorderBottomBackground;
-            pnlbottom.BackgroundImage = GetImage("bottomborder");
-            pnlbottom.BackgroundImageLayout = GetImageLayout("bottomborder");
-            pnlbottom.Height = LoadedSkin.BottomBorderWidth;
-
-            pnlbottomr.BackColor = LoadedSkin.BorderBottomRightBackground;
-            pnlbottomr.BackgroundImage = GetImage("bottomrborder");
-            pnlbottomr.BackgroundImageLayout = GetImageLayout("bottomrborder");
-            pnlbottoml.BackColor = LoadedSkin.BorderBottomLeftBackground;
-            pnlbottoml.BackgroundImage = GetImage("bottomlborder");
-            pnlbottoml.BackgroundImageLayout = GetImageLayout("bottomlborder");
-
-            lbtitletext.ForeColor = LoadedSkin.TitleTextColor;
-            lbtitletext.Font = LoadedSkin.TitleFont;
-            pnlclose.BackColor = LoadedSkin.CloseButtonColor;
-            pnlclose.BackgroundImage = GetImage("closebutton");
-            pnlclose.BackgroundImageLayout = GetImageLayout("closebutton");
-            pnlminimize.BackColor = LoadedSkin.MinimizeButtonColor;
-            pnlminimize.BackgroundImage = GetImage("minimizebutton");
-            pnlminimize.BackgroundImageLayout = GetImageLayout("minimizebutton");
-            pnlmaximize.BackColor = LoadedSkin.MaximizeButtonColor;
-            pnlmaximize.BackgroundImage = GetImage("maximizebutton");
-            pnlmaximize.BackgroundImageLayout = GetImageLayout("maximizebutton");
-
-            pnlclose.Size = LoadedSkin.CloseButtonSize;
-            pnlminimize.Size = LoadedSkin.MinimizeButtonSize;
-            pnlmaximize.Size = LoadedSkin.MaximizeButtonSize;
-            pnlclose.Location = FromRight(LoadedSkin.CloseButtonFromSide);
-            pnlminimize.Location = FromRight(LoadedSkin.MinimizeButtonFromSide);
-            pnlmaximize.Location = FromRight(LoadedSkin.MaximizeButtonFromSide);
-            pnlclose.Left -= pnlclose.Width;
-            pnlmaximize.Left -= pnlmaximize.Width;
-            pnlminimize.Left -= pnlminimize.Width;
-
-            switch (LoadedSkin.TitleTextCentered)
-            {
-                case false:
-                    lbtitletext.Location = new Point(16 + LoadedSkin.TitlebarIconFromSide.X + LoadedSkin.TitleTextLeft.X,
-                            LoadedSkin.TitleTextLeft.Y);
-                    break;
-                default:
-                    lbtitletext.Left = (pnltitle.Width - lbtitletext.Width) / 2;
-                    lbtitletext.Top = LoadedSkin.TitleTextLeft.Y;
-                    break;
-            }
-
-            if (Shiftorium.UpgradeInstalled("app_icons"))
-            {
-                pnlicon.Show();
-                pnlicon.Size = new Size(16, 16);
-                pnlicon.BackColor = Color.Transparent;
-                pnlicon.BackgroundImage = GetIcon(this.ParentWindow.GetType().Name);
-                pnlicon.BackgroundImageLayout = ImageLayout.Stretch;
-                pnlicon.Location = LoadedSkin.TitlebarIconFromSide;
-            }
-            else
-            {
-                pnlicon.Hide();
-            }
-        }
-
-        /// <summary>
-        /// Froms the right.
-        /// </summary>
-        /// <returns>The right.</returns>
-        /// <param name="input">Input.</param>
-        public Point FromRight(Point input)
-        {
-            return new Point(pnltitle.Width - input.X, input.Y);
-        }
-
-		/// <summary>
-		/// Lbtitletexts the click.
-		/// </summary>
-		/// <returns>The click.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void lbtitletext_Click(object sender, EventArgs e)
-        {
-
-        }
-
-		/// <summary>
-		/// Pnlcloses the click.
-		/// </summary>
-		/// <returns>The click.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void pnlclose_Click(object sender, EventArgs e)
-        {
-            this.Close();
-        }
-
-		/// <summary>
-		/// Pnlmaximizes the click.
-		/// </summary>
-		/// <returns>The click.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void pnlmaximize_Click(object sender, EventArgs e)
-        {
-            if (maximized == false)
-                Desktop.MaximizeWindow(this);
-            else
-                Desktop.RestoreWindow(this);
-            maximized = !maximized;
-            SetupSkin();
-        }
-
-        bool minimized = false;
-        bool maximized = false;
-
-        public bool IsMinimized
-        {
-            get
-            {
-                return minimized;
-            }
-        }
-
-        public bool IsMaximized
-        {
-            get
-            {
-                return maximized;
-            }
-        }
-
-
-        /// <summary>
-        /// Pnlminimizes the click.
-        /// </summary>
-        /// <returns>The click.</returns>
-        /// <param name="sender">Sender.</param>
-        /// <param name="e">E.</param>
-        private void pnlminimize_Click(object sender, EventArgs e)
-        {
-            if (minimized == false)
-                Desktop.MinimizeWindow(this);
-            else
-                Desktop.RestoreWindow(this);
-            minimized = !minimized;
-        }
-
-
-        /// <summary>
-        /// The W m NCLBUTTONDOW.
-        /// </summary>
-        public const int WM_NCLBUTTONDOWN = 0xA1;
-        /// <summary>
-        /// The H t CAPTIO.
-        /// </summary>
-        public const int HT_CAPTION = 0x2;
-
-        /// <summary>
-        /// The is dialog.
-        /// </summary>
-        public bool IsDialog = false;
-
-
-        [DllImportAttribute("user32.dll")]
-        /// <summary>
-        /// Sends the message.
-        /// </summary>
-        /// <returns>The message.</returns>
-        /// <param name="hWnd">H window.</param>
-        /// <param name="Msg">Message.</param>
-        /// <param name="wParam">W parameter.</param>
-        /// <param name="lParam">L parameter.</param>
-        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
-        [DllImportAttribute("user32.dll")]
-        /// <summary>
-        /// Releases the capture.
-        /// </summary>
-        /// <returns>The capture.</returns>
-        public static extern bool ReleaseCapture();
-
-		/// <summary>
-		/// Pnltitles the mouse move.
-		/// </summary>
-		/// <returns>The mouse move.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void pnltitle_MouseMove(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Left && Shiftorium.UpgradeInstalled("draggable_windows"))
-            {
-                ReleaseCapture();
-                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
-            }
-        }
-
-		/// <summary>
-		/// Pnltitles the paint.
-		/// </summary>
-		/// <returns>The paint.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void pnltitle_Paint(object sender, PaintEventArgs e) {
-
-        }
-
-		/// <summary>
-		/// Lbtitletexts the mouse move.
-		/// </summary>
-		/// <returns>The mouse move.</returns>
-		/// <param name="sender">Sender.</param>
-		/// <param name="e">E.</param>
-        private void lbtitletext_MouseMove(object sender, MouseEventArgs e) {
-            pnltitle_MouseMove(sender, e);
-        }
-    }
-}
diff --git a/ShiftOS.WinForms/WinformsDesktop.cs b/ShiftOS.WinForms/WinformsDesktop.cs
deleted file mode 100644
index d30adb4..0000000
--- a/ShiftOS.WinForms/WinformsDesktop.cs
+++ /dev/null
@@ -1,746 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-using static ShiftOS.Engine.SkinEngine;
-using ShiftOS.WinForms.Tools;
-using ShiftOS.WinForms.Applications;
-using Newtonsoft.Json;
-using ShiftOS.Engine.Scripting;
-using System.Threading;
-
-/// <summary>
-/// Winforms desktop.
-/// </summary>
-namespace ShiftOS.WinForms
-{
-    /// <summary>
-    /// Winforms desktop.
-    /// </summary>
-    public partial class WinformsDesktop : Form, IDesktop
-    {
-        private bool InScreensaver = false;
-        private int millisecondsUntilScreensaver = 300000;
-
-        /// <summary>
-        /// Initializes a new instance of the <see cref="ShiftOS.WinForms.WinformsDesktop"/> class.
-        /// </summary>
-        public WinformsDesktop()
-        {
-            InitializeComponent();
-            this.TopMost = false;
-
-            NotificationDaemon.NotificationMade += (note) =>
-            {
-                //Soon this will pop a balloon note.
-                this.Invoke(new Action(() =>
-                {
-                    btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
-                }));
-            };
-
-            NotificationDaemon.NotificationRead += () =>
-            {
-                //Soon this will pop a balloon note.
-                this.Invoke(new Action(() =>
-                {
-                    btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
-                }));
-            };
-
-            this.LocationChanged += (o, a) =>
-            {
-                if (this.Left != 0)
-                    this.Left = 0;
-                if (this.Top != 0)
-                    this.Top = 0;
-            };
-
-            this.SizeChanged += (o, a) =>
-            {
-                if (this.ClientRectangle != Screen.PrimaryScreen.Bounds)
-                {
-                    this.WindowState = FormWindowState.Maximized;
-                }
-            };
-
-            SaveSystem.GameReady += () =>
-            {
-                if (this.Visible == true)
-                    this.Invoke(new Action(() => SetupDesktop()));
-                this.Invoke(new Action(() =>
-                {
-                    btnnotifications.Text = "Notifications (" + NotificationDaemon.GetUnreadCount().ToString() + ")";
-                }));
-            };
-            Shiftorium.Installed += () =>
-            {
-                if (this.Visible == true)
-                    this.Invoke(new Action(() => SetupDesktop()));
-            };
-            var time = new System.Windows.Forms.Timer();
-            time.Interval = 100;
-            this.KeyDown += (o, a) =>
-            {
-                if (a.Control && a.KeyCode == Keys.T)
-                {
-                    Engine.AppearanceManager.SetupWindow(new Applications.Terminal());
-                }
-                /*if (a.Control && a.KeyCode == Keys.Tab)
-                {
-                    // CtrlTabMenu 
-                    CtrlTabMenu.Show();
-                    if (a.Shift) CtrlTabMenu.CycleBack();
-                    else CtrlTabMenu.CycleForwards();
-                }*/ //nyi
-
-                ShiftOS.Engine.Scripting.LuaInterpreter.RaiseEvent("on_key_down", a);
-            };
-            SkinEngine.SkinLoaded += () =>
-            {
-                SetupDesktop();
-            };
-            time.Tick += (o, a) =>
-            {
-                if (Shiftorium.IsInitiated == true)
-                {
-                    if (SaveSystem.CurrentSave != null && TutorialManager.IsInTutorial == false)
-                    {
-                        lbtime.Text = Applications.Terminal.GetTime();
-                        lbtime.Left = desktoppanel.Width - lbtime.Width - LoadedSkin.DesktopPanelClockFromRight.X;
-                        lbtime.Top = LoadedSkin.DesktopPanelClockFromRight.Y;
-                    }
-                }
-
-                try
-                {
-                    if (SaveSystem.CurrentSave != null)
-                    {
-                        if (SaveSystem.CurrentSave.LastMonthPaid != DateTime.Now.Month)
-                        {
-                            if (SaveSystem.CurrentSave.Codepoints >= DownloadManager.GetAllSubscriptions()[SaveSystem.CurrentSave.ShiftnetSubscription].CostPerMonth)
-                            {
-                                SaveSystem.CurrentSave.Codepoints -= DownloadManager.GetAllSubscriptions()[SaveSystem.CurrentSave.ShiftnetSubscription].CostPerMonth;
-                                SaveSystem.CurrentSave.LastMonthPaid = DateTime.Now.Month;
-                            }
-                            else
-                            {
-                                SaveSystem.CurrentSave.ShiftnetSubscription = 0;
-                                SaveSystem.CurrentSave.LastMonthPaid = DateTime.Now.Month;
-                                Infobox.Show("Shiftnet", "You do not have enough Codepoints to pay for your Shiftnet subscription this month. You have been downgraded to the free plan.");
-                            }
-                        }
-                    }
-                }
-                catch { }
-
-
-                btnnotifications.Left = lbtime.Left - btnnotifications.Width - 2;
-                btnnotifications.Top = (desktoppanel.Height - btnnotifications.Height) / 2;
-            };
-            time.Start();
-
-            var ssThread = new Thread(() =>
-            {
-                while(this.Visible == true)
-                {
-                    var mousePos = Cursor.Position;
-                    while(Cursor.Position == mousePos)
-                    {
-                        if(millisecondsUntilScreensaver <= 0)
-                        {
-                            ShowScreensaver();
-                            InScreensaver = true;
-                        }
-                        millisecondsUntilScreensaver--;
-                        Thread.Sleep(1);
-                    }
-                    millisecondsUntilScreensaver = 300000;
-                    InScreensaver = false;
-                    HideScreensaver();
-                }
-            });
-            ssThread.IsBackground = true;
-            ssThread.Start();
-
-            this.DoubleBuffered = true;
-        }
-
-        public void HideScreensaver()
-        {
-            if (ResetDesktop == true)
-            {
-                this.Invoke(new Action(() =>
-                {
-                    this.TopMost = false;
-                    pnlscreensaver.Hide();
-                    Cursor.Show();
-                    SetupDesktop();
-                    ResetDesktop = false;
-
-                }));
-            }
-        }
-
-        private bool ResetDesktop = false;
-
-        private void ShowScreensaver()
-        {
-            if (Shiftorium.UpgradeInstalled("screensavers"))
-            {
-                this.Invoke(new Action(() =>
-                {
-                    pnlscreensaver.Show();
-                    this.TopMost = true;
-                    pnlssicon.Show();
-                    pnlssicon.BackColor = Color.Green;
-                    pnlssicon.BackgroundImage = GetImage("screensaver");
-                    pnlssicon.BackgroundImageLayout = GetImageLayout("screensaver");
-
-                    if (pnlssicon.BackgroundImage != null)
-                    {
-                        pnlssicon.Size = pnlssicon.BackgroundImage.Size;
-                    }
-
-                    Cursor.Hide();
-
-                    var t = new Thread(() =>
-                    {
-                        var rnd = new Random();
-                        while (InScreensaver == true)
-                        {
-                            int x = rnd.Next(0, this.Width);
-                            int y = rnd.Next(0, this.Height);
-
-                            this.Invoke(new Action(() =>
-                            {
-                                pnlssicon.Location = new Point(x, y);
-                            }));
-
-                            Thread.Sleep(5000);
-                        }
-                        ResetDesktop = true;
-                    });
-                    t.IsBackground = true;
-                    t.Start();
-                }));
-            }
-        }
-
-
-        /// <summary>
-        /// Populates the panel buttons.
-        /// </summary>
-        /// <returns>The panel buttons.</returns>
-        public void PopulatePanelButtons()
-        {
-            if (DesktopFunctions.ShowDefaultElements == true)
-            {
-                panelbuttonholder.Controls.Clear();
-                if (Shiftorium.IsInitiated == true)
-                {
-                    if (Shiftorium.UpgradeInstalled("wm_panel_buttons"))
-                    {
-                        foreach (WindowBorder form in Engine.AppearanceManager.OpenForms)
-                        {
-                            if (form != null)
-                            {
-                                if (form.Visible == true)
-                                {
-                                    EventHandler onClick = (o, a) =>
-                                    {
-                                        if (form == focused)
-                                        {
-                                            if (form.IsMinimized)
-                                            {
-                                                RestoreWindow(form);
-                                            }
-                                            else
-                                            {
-                                                MinimizeWindow(form);
-                                            }
-                                        }
-                                        else
-                                        {
-                                            form.BringToFront();
-                                            focused = form;
-                                        }
-                                    };
-
-                                    var pnlbtn = new Panel();
-                                    pnlbtn.Margin = new Padding(2, LoadedSkin.PanelButtonFromTop, 0, 0);
-                                    pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
-                                    pnlbtn.BackgroundImage = GetImage("panelbutton");
-                                    pnlbtn.BackgroundImageLayout = GetImageLayout("panelbutton");
-
-                                    var pnlbtntext = new Label();
-                                    pnlbtntext.Text = NameChangerBackend.GetName(form.ParentWindow);
-                                    pnlbtntext.AutoSize = true;
-                                    pnlbtntext.Location = LoadedSkin.PanelButtonFromLeft;
-                                    pnlbtntext.ForeColor = LoadedSkin.PanelButtonTextColor;
-                                    pnlbtntext.BackColor = Color.Transparent;
-
-                                    pnlbtn.BackColor = LoadedSkin.PanelButtonColor;
-                                    if (pnlbtn.BackgroundImage != null)
-                                    {
-                                        pnlbtntext.BackColor = Color.Transparent;
-                                    }
-                                    pnlbtn.Size = LoadedSkin.PanelButtonSize;
-                                    pnlbtn.Tag = "keepbg";
-                                    pnlbtntext.Tag = "keepbg";
-                                    pnlbtn.Controls.Add(pnlbtntext);
-                                    this.panelbuttonholder.Controls.Add(pnlbtn);
-                                    pnlbtn.Show();
-                                    pnlbtntext.Show();
-
-                                    if (Shiftorium.UpgradeInstalled("useful_panel_buttons"))
-                                    {
-                                        pnlbtn.Click += onClick;
-                                        pnlbtntext.Click += onClick;
-                                    }
-                                    pnlbtntext.Font = LoadedSkin.PanelButtonFont;
-
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            LuaInterpreter.RaiseEvent("on_panelbutton_populate", this);
-        }
-
-        /// <summary>
-        /// Setups the desktop.
-        /// </summary>
-        /// <returns>The desktop.</returns>
-        public void SetupDesktop()
-        {
-            if (DesktopFunctions.ShowDefaultElements == true)
-            {
-                ToolStripManager.Renderer = new ShiftOSMenuRenderer();
-
-                this.DoubleBuffered = true;
-                this.FormBorderStyle = FormBorderStyle.None;
-                this.WindowState = FormWindowState.Maximized;
-                desktoppanel.BackColor = Color.Green;
-
-                //upgrades
-
-                if (Shiftorium.IsInitiated == true)
-                {
-                    desktoppanel.Visible = Shiftorium.UpgradeInstalled("desktop");
-                    lbtime.Visible = Shiftorium.UpgradeInstalled("desktop_clock_widget");
-
-                    btnnotifications.Visible = Shiftorium.UpgradeInstalled("panel_notifications");
-
-                    //skinning
-                    lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor;
-
-                    panelbuttonholder.Top = 0;
-                    panelbuttonholder.Left = LoadedSkin.PanelButtonHolderFromLeft;
-                    panelbuttonholder.Height = desktoppanel.Height;
-                    panelbuttonholder.BackColor = Color.Transparent;
-                    panelbuttonholder.Margin = new Padding(0, 0, 0, 0);
-
-                    sysmenuholder.Visible = Shiftorium.UpgradeInstalled("app_launcher");
-
-                    //The Color Picker can give us transparent colors - which Windows Forms fucking despises when dealing with form backgrounds.
-                    //To compensate, we must recreate the desktop color and make the alpha channel '255'.
-                    this.BackColor = Color.FromArgb(LoadedSkin.DesktopColor.R, LoadedSkin.DesktopColor.G, LoadedSkin.DesktopColor.B);
-                    //Not doing this will cause an ArgumentException.
-
-                    DitheringEngine.DitherImage(SkinEngine.GetImage("desktopbackground"), new Action<Image>((img) =>
-                    {
-                        this.BackgroundImage = img;
-                    }));
-                    this.BackgroundImageLayout = GetImageLayout("desktopbackground");
-                    desktoppanel.BackColor = LoadedSkin.DesktopPanelColor;
-
-                    var pnlimg = GetImage("desktoppanel");
-                    if (pnlimg != null)
-                    {
-                        var bmp = new Bitmap(pnlimg);
-                        bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
-                        pnlimg = bmp;
-                    }
-
-                    desktoppanel.BackgroundImage = pnlimg;
-                    if (desktoppanel.BackgroundImage != null)
-                    {
-                        desktoppanel.BackColor = Color.Transparent;
-                    }
-                    var appimg = GetImage("applauncher");
-                    if (appimg != null)
-                    {
-                        var bmp = new Bitmap(appimg);
-                        bmp.MakeTransparent(Color.FromArgb(1, 0, 1));
-                        appimg = bmp;
-                    }
-                    menuStrip1.BackgroundImage = appimg;
-                    lbtime.ForeColor = LoadedSkin.DesktopPanelClockColor;
-                    lbtime.Font = LoadedSkin.DesktopPanelClockFont;
-                    if (desktoppanel.BackgroundImage == null)
-                    {
-                        lbtime.BackColor = LoadedSkin.DesktopPanelClockBackgroundColor;
-                    }
-                    else
-                    {
-                        lbtime.BackColor = Color.Transparent;
-                    }
-                    apps.Text = LoadedSkin.AppLauncherText;
-                    sysmenuholder.Location = LoadedSkin.AppLauncherFromLeft;
-                    sysmenuholder.Size = LoadedSkin.AppLauncherHolderSize;
-                    apps.Size = sysmenuholder.Size;
-                    menuStrip1.Renderer = new ShiftOSMenuRenderer(new AppLauncherColorTable());
-                    desktoppanel.BackgroundImageLayout = GetImageLayout("desktoppanel");
-                    desktoppanel.Height = LoadedSkin.DesktopPanelHeight;
-                    if (LoadedSkin.DesktopPanelPosition == 1)
-                    {
-                        desktoppanel.Dock = DockStyle.Bottom;
-                    }
-                    else
-                    {
-                        desktoppanel.Dock = DockStyle.Top;
-                    }
-                }
-            }
-            else
-            {
-                desktoppanel.Hide();
-            }
-
-            LuaInterpreter.RaiseEvent("on_desktop_skin", this);
-
-            PopulatePanelButtons();
-        }
-
-        public ToolStripMenuItem GetALCategoryWithName(string text)
-        {
-            foreach (ToolStripMenuItem menuitem in apps.DropDownItems)
-            {
-                if (menuitem.Text == text)
-                    return menuitem;
-            }
-
-            var itm = new ToolStripMenuItem();
-            itm.Text = text;
-            apps.DropDownItems.Add(itm);
-            return itm;
-        }
-
-        /// <summary>
-        /// Populates the app launcher.
-        /// </summary>
-        /// <returns>The app launcher.</returns>
-        /// <param name="items">Items.</param>
-        public void PopulateAppLauncher(LauncherItem[] items)
-        {
-            if (DesktopFunctions.ShowDefaultElements == true)
-            {
-                apps.DropDownItems.Clear();
-
-                Dictionary<string, List<ToolStripMenuItem>> sortedItems = new Dictionary<string, List<ToolStripMenuItem>>();
-
-
-
-                foreach (var kv in items)
-                {
-                    var item = new ToolStripMenuItem();
-                    item.Text = (kv.LaunchType == null) ? kv.DisplayData.Name : Applications.NameChangerBackend.GetNameRaw(kv.LaunchType);
-                    item.Image = (kv.LaunchType == null) ? null : SkinEngine.GetIcon(kv.LaunchType.Name);
-                    item.Click += (o, a) =>
-                    {
-                        if (kv is LuaLauncherItem)
-                        {
-                            var interpreter = new Engine.Scripting.LuaInterpreter();
-                            interpreter.ExecuteFile((kv as LuaLauncherItem).LaunchPath);
-                        }
-                        else
-                        {
-                            Engine.AppearanceManager.SetupWindow(Activator.CreateInstance(kv.LaunchType) as IShiftOSWindow);
-                        }
-
-                    };
-                    if (sortedItems.ContainsKey(kv.DisplayData.Category))
-                    {
-                        sortedItems[kv.DisplayData.Category].Add(item);
-                    }
-                    else
-                    {
-                        sortedItems.Add(kv.DisplayData.Category, new List<ToolStripMenuItem>());
-                        sortedItems[kv.DisplayData.Category].Add(item);
-                    }
-                }
-
-                foreach (var kv in sortedItems)
-                {
-                    if (Shiftorium.IsInitiated == true)
-                    {
-                        if (Shiftorium.UpgradeInstalled("app_launcher_categories"))
-                        {
-                            var cat = GetALCategoryWithName(kv.Key);
-                            foreach (var subItem in kv.Value)
-                            {
-                                cat.DropDownItems.Add(subItem);
-                            }
-                        }
-
-                        else
-                        {
-                            foreach (var subItem in kv.Value)
-                            {
-                                apps.DropDownItems.Add(subItem);
-                            }
-                        }
-                    }
-                }
-
-                if (Shiftorium.IsInitiated == true)
-                {
-                    if (Shiftorium.UpgradeInstalled("al_shutdown"))
-                    {
-                        apps.DropDownItems.Add(new ToolStripSeparator());
-                        var item = new ToolStripMenuItem();
-                        item.Text = Localization.Parse("{SHUTDOWN}");
-                        item.Click += (o, a) =>
-                        {
-                            TerminalBackend.InvokeCommand("sos.shutdown");
-                        };
-                        apps.DropDownItems.Add(item);
-
-                    }
-                }
-            }
-            LuaInterpreter.RaiseEvent("on_al_populate", items);
-        }
-
-
-        /// <summary>
-        /// Desktops the load.
-        /// </summary>
-        /// <returns>The load.</returns>
-        /// <param name="sender">Sender.</param>
-        /// <param name="e">E.</param>
-        private void Desktop_Load(object sender, EventArgs e)
-        {
-
-            SaveSystem.Begin();
-
-            SetupDesktop();
-
-            SaveSystem.GameReady += () =>
-            {
-                this.Invoke(new Action(() =>
-                {
-                    LuaInterpreter.RaiseEvent("on_desktop_load", this);
-                }));
-            };
-        }
-
-        /// <summary>
-        /// Shows the window.
-        /// </summary>
-        /// <returns>The window.</returns>
-        /// <param name="border">Border.</param>
-        public void ShowWindow(IWindowBorder border)
-        {
-            var brdr = border as Form;
-            focused = border;
-            brdr.GotFocus += (o, a) =>
-            {
-                focused = border;
-            };
-            brdr.FormBorderStyle = FormBorderStyle.None;
-            brdr.Show();
-            brdr.TopMost = true;
-        }
-
-        /// <summary>
-        /// Kills the window.
-        /// </summary>
-        /// <returns>The window.</returns>
-        /// <param name="border">Border.</param>
-        public void KillWindow(IWindowBorder border)
-        {
-            border.Close();
-        }
-
-        private IWindowBorder focused = null;
-
-        public string DesktopName
-        {
-            get
-            {
-                return "ShiftOS Desktop";
-            }
-        }
-
-
-        /// <summary>
-        /// Minimizes the window.
-        /// </summary>
-        /// <param name="brdr">Brdr.</param>
-        public void MinimizeWindow(IWindowBorder brdr)
-        {
-            var loc = (brdr as WindowBorder).Location;
-            var sz = (brdr as WindowBorder).Size;
-            (brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
-            {
-                Size = sz,
-                Location = loc
-            });
-            (brdr as WindowBorder).Location = new Point(this.GetSize().Width * 2, this.GetSize().Height * 2);
-        }
-
-        /// <summary>
-        /// Maximizes the window.
-        /// </summary>
-        /// <returns>The window.</returns>
-        /// <param name="brdr">Brdr.</param>
-        public void MaximizeWindow(IWindowBorder brdr)
-        {
-            int startY = (LoadedSkin.DesktopPanelPosition == 1) ? 0 : LoadedSkin.DesktopPanelHeight;
-            int h = this.GetSize().Height - LoadedSkin.DesktopPanelHeight;
-            var loc = (brdr as WindowBorder).Location;
-            var sz = (brdr as WindowBorder).Size;
-            (brdr as WindowBorder).Tag = JsonConvert.SerializeObject(new
-            {
-                Size = sz,
-                Location = loc
-            });
-            (brdr as WindowBorder).Location = new Point(0, startY);
-            (brdr as WindowBorder).Size = new Size(this.GetSize().Width, h);
-
-        }
-
-        /// <summary>
-        /// Restores the window.
-        /// </summary>
-        /// <returns>The window.</returns>
-        /// <param name="brdr">Brdr.</param>
-        public void RestoreWindow(IWindowBorder brdr)
-        {
-            dynamic tag = JsonConvert.DeserializeObject<dynamic>((brdr as WindowBorder).Tag.ToString());
-            (brdr as WindowBorder).Location = tag.Location;
-            (brdr as WindowBorder).Size = tag.Size;
-
-        }
-
-        /// <summary>
-        /// Invokes the on worker thread.
-        /// </summary>
-        /// <returns>The on worker thread.</returns>
-        /// <param name="act">Act.</param>
-        public void InvokeOnWorkerThread(Action act)
-        {
-            this.Invoke(act);
-        }
-
-        public void OpenAppLauncher(Point loc)
-        {
-            apps.DropDown.Left = loc.X;
-            apps.DropDown.Top = loc.Y;
-            apps.ShowDropDown();
-        }
-
-        /// <summary>
-        /// Gets the size.
-        /// </summary>
-        /// <returns>The size.</returns>
-        public Size GetSize()
-        {
-            return this.Size;
-        }
-
-        private void btnnotifications_Click(object sender, EventArgs e)
-        {
-            AppearanceManager.SetupWindow(new Applications.Notifications());
-        }
-
-        private void desktoppanel_Paint(object sender, PaintEventArgs e)
-        {
-            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
-        }
-    }
-
-    [ShiftOS.Engine.Scripting.Exposed("desktop")]
-    public class DesktopFunctions
-    {
-        public static bool ShowDefaultElements = true;
-
-        public dynamic getWindow()
-        {
-            return Desktop.CurrentDesktop;
-        }
-
-        public void showDefaultElements(bool val)
-        {
-            ShowDefaultElements = val;
-            SkinEngine.LoadSkin();
-        }
-
-        public dynamic getOpenWindows()
-        {
-            return AppearanceManager.OpenForms;
-        }
-
-        public string getALItemName(LauncherItem kv)
-        {
-            return (kv.LaunchType == null) ? kv.DisplayData.Name : Applications.NameChangerBackend.GetNameRaw(kv.LaunchType);
-        }
-
-        public void openAppLauncher(Point loc)
-        {
-            Desktop.OpenAppLauncher(loc);
-        }
-
-        public string getWindowTitle(IWindowBorder form)
-        {
-            return NameChangerBackend.GetName(form.ParentWindow);
-        }
-
-        public void openApp(LauncherItem kv)
-        {
-            if (kv is LuaLauncherItem)
-            {
-                var interpreter = new Engine.Scripting.LuaInterpreter();
-                interpreter.ExecuteFile((kv as LuaLauncherItem).LaunchPath);
-            }
-            else
-            {
-                Engine.AppearanceManager.SetupWindow(Activator.CreateInstance(kv.LaunchType) as IShiftOSWindow);
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/ShiftOS.WinForms/WinformsWindowManager.cs b/ShiftOS.WinForms/WinformsWindowManager.cs
deleted file mode 100644
index eeaa6c9..0000000
--- a/ShiftOS.WinForms/WinformsWindowManager.cs
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine;
-using ShiftOS.WinForms.Tools;
-
-namespace ShiftOS.WinForms
-{
-    internal class WinformsWindowManager : WindowManager
-    {
-        public override void Close(IShiftOSWindow win)
-        {
-            (win as UserControl).Close();
-        }
-
-        public override void InvokeAction(Action act)
-        {
-            Desktop.InvokeOnWorkerThread(act);
-        }
-
-        public override void Maximize(IWindowBorder form)
-        {
-            try
-            {
-                var deskSize = new Size(0, 0);
-                deskSize.Width = Screen.PrimaryScreen.Bounds.Width;
-                deskSize.Height = Screen.PrimaryScreen.Bounds.Height;
-
-                deskSize.Height -= SkinEngine.LoadedSkin.DesktopPanelHeight;
-
-                var deskStart = new Point((SkinEngine.LoadedSkin.DesktopPanelPosition == 0) ? SkinEngine.LoadedSkin.DesktopPanelHeight : 0, 0);
-
-                (form as WindowBorder).Location = deskStart;
-                (form as WindowBorder).Size = deskSize;
-
-
-            }
-            catch
-            {
-            }
-        }
-
-        public override void Minimize(IWindowBorder border)
-        {
-            try
-            {
-
-            }
-            catch { }
-        }
-
-        public override void SetTitle(IShiftOSWindow win, string title)
-        {
-            var wb = (win as UserControl).ParentForm as WindowBorder;
-            wb.SetTitle(title);
-        }
-
-        public override void SetupDialog(IShiftOSWindow form)
-        {
-            if (!Shiftorium.UpgradeAttributesUnlocked(form.GetType()))
-            {
-                Console.WriteLine("{APP_NOT_FOUND}");
-                return;
-            }
-
-            var wb = new WindowBorder(form as UserControl);
-            wb.IsDialog = true;
-
-
-            wb.Show();
-        }
-
-        public override void SetupWindow(IShiftOSWindow form)
-        {
-            if (!AppearanceManager.CanOpenWindow(form))
-            {
-                Infobox.Show("{MULTIPLAYER_ONLY}", "{MULTIPLAYER_ONLY_EXP}");
-                return;
-            }
-
-            foreach(var attr in form.GetType().GetCustomAttributes(true))
-            {
-                if(attr is MultiplayerOnlyAttribute)
-                {
-                    if(KernelWatchdog.MudConnected == false)
-                    {
-                        Infobox.PromptYesNo("Disconnected from MUD", "This application requires a connection to the MUD. Would you like to reconnect?", new Action<bool>((answer) =>
-                        {
-                            if(answer == true)
-                            {
-                                KernelWatchdog.MudConnected = true;
-                                SetupWindow(form);
-                            }
-                        }));
-                        return;
-                    }
-                }
-            }
-
-            if (!Shiftorium.UpgradeAttributesUnlocked(form.GetType()))
-            {
-                Console.WriteLine("{APP_NOT_FOUND}");
-                return;
-            }
-
-            if (SaveSystem.CurrentSave != null)
-            {
-                if (!form.GetType().Name.Contains(typeof(Applications.Dialog).Name))
-                {
-                    int maxWindows = 0;
-
-                    //Window manager will step in here.
-                    if (Shiftorium.UpgradeInstalled("wm_unlimited_windows"))
-                    {
-                        maxWindows = 0;
-                    }
-                    else if (Shiftorium.UpgradeInstalled("wm_4_windows"))
-                    {
-                        maxWindows = 4;
-                    }
-                    else if (Shiftorium.UpgradeInstalled("window_manager"))
-                    {
-                        maxWindows = 2;
-                    }
-                    else
-                    {
-                        maxWindows = 1;
-                    }
-
-
-                    if (maxWindows > 0)
-                    {
-                        List<WindowBorder> formstoclose = new List<WindowBorder>();
-
-                        foreach (WindowBorder frm in AppearanceManager.OpenForms)
-                        {
-                            formstoclose.Add(frm);
-
-                        }
-
-                        while (formstoclose.Count > maxWindows - 1)
-                        {
-                            formstoclose[0].Close();
-                            formstoclose.RemoveAt(0);
-                        }
-                    }
-                }
-            }
-
-            var wb = new WindowBorder(form as UserControl);
-
-            ControlManager.SetupWindows();
-        }
-    }
-}
diff --git a/ShiftOS_TheReturn/AudioManager.cs b/ShiftOS_TheReturn/AudioManager.cs
deleted file mode 100644
index 7f6f5e9..0000000
--- a/ShiftOS_TheReturn/AudioManager.cs
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-//#define NOSOUND
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using NAudio;
-using NAudio.Wave;
-
-namespace ShiftOS.Engine
-{
-    public static class AudioManager
-    {
-        private static WaveOut _out = null;
-        private static AudioFileReader _reader = null;
-        private static IAudioProvider _provider = null;
-        private static bool _running = true;
-
-        public static void Init(IAudioProvider _p)
-        {
-#if !NOSOUND
-            _provider = _p;
-            AppearanceManager.OnExit += () =>
-            {
-                _running = false;
-                _out?.Stop();
-                _reader?.Dispose();
-                _out?.Dispose();
-                System.IO.File.Delete("temp.mp3");
-            };
-            var t = new Thread(() =>
-            {
-                SaveSystem.GameReady += () =>
-                {
-                    while(_out == null)
-                    {
-
-                    }
-                    _out.Volume = _provider.Volume;
-                };
-                Random rnd = new Random();
-                while(_running == true)
-                {
-                    int track = rnd.Next(0, _provider.Count);
-                    byte[] mp3 = _provider.GetTrack(track);
-                     System.IO.File.WriteAllBytes("temp.mp3", mp3);
-                    _reader = new AudioFileReader("temp.mp3");
-                    _out = new WaveOut();
-                    _out.Init(_reader);
-                    _out.Volume = _provider.Volume;
-
-                    _out.Play();
-                    while(_out.PlaybackState == PlaybackState.Playing)
-                    {
-                        Thread.Sleep(5000); //even when the player isn't playing, this will give a good delay between songs.
-                    }
-                    _reader.Dispose();
-                    _out.Dispose();
-                }
-            });
-            t.IsBackground = true;
-            t.Start();
-#endif
-        }
-
-        public static void SetVolume(float volume)
-        {
-            _provider.Volume = volume; //persist between songs
-            _out.Volume = volume;
-        }
-
-        internal static void Kill()
-        {
-            _running = false;
-            _out.Stop();
-            _out.Dispose();
-            _reader.Dispose();
-        }
-    }
-
-    public interface IAudioProvider
-    {
-        /// <summary>
-        /// Gets a byte[] array corresponding to an MP3 track given an index.
-        /// </summary>
-        /// <param name="index">A track index to use when finding the right track.</param>
-        /// <returns>The MP3 byte[] array.</returns>
-        byte[] GetTrack(int index);
-
-        /// <summary>
-        /// Gets the 1-based count of all available tracks.
-        /// </summary>
-        int Count { get; }
-
-        /// <summary>
-        /// Gets or sets the track player's volume.
-        /// </summary>
-        float Volume { get; set; }
-    }
-}
diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs
deleted file mode 100644
index 73a7e2d..0000000
--- a/ShiftOS_TheReturn/Commands.cs
+++ /dev/null
@@ -1,739 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-#define DEVEL
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using ShiftOS.Engine.Properties;
-using System.IO;
-using Newtonsoft.Json;
-using System.IO.Compression;
-
-using ShiftOS.Objects;
-using Discoursistency.Base.Models.Authentication;
-using ShiftOS.Engine.Scripting;
-using ShiftOS.Objects.ShiftFS;
-
-namespace ShiftOS.Engine
-{
-    [Namespace("infobox", hide = true)]
-    [RequiresUpgrade("desktop;wm_free_placement")]
-    public static class InfoboxDebugCommands
-    {
-
-        [RequiresArgument("title")]
-        [RequiresArgument("msg")]
-        [Command("show")]
-        public static bool ShowInfo(Dictionary<string, object> args)
-        {
-            Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                Infobox.Show(args["title"].ToString(), args["msg"].ToString());
-            }));
-            return true;
-        }
-
-        [RequiresArgument("title")]
-        [RequiresArgument("msg")]
-        [Command("yesno")]
-        public static bool ShowYesNo(Dictionary<string, object> args)
-        {
-            bool forwarding = TerminalBackend.IsForwardingConsoleWrites;
-            var fGuid = TerminalBackend.ForwardGUID;
-            Action<bool> callback = (result) =>
-            {
-                TerminalBackend.IsForwardingConsoleWrites = forwarding;
-                TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null;
-                string resultFriendly = (result == true) ? "yes" : "no";
-                Console.WriteLine($"{SaveSystem.CurrentSave.Username} says {resultFriendly}.");
-                TerminalBackend.IsForwardingConsoleWrites = false;
-            };
-            Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                Infobox.PromptYesNo(args["title"].ToString(), args["msg"].ToString(), callback);
-
-            }));
-            return true;
-        }
-
-        [RequiresArgument("title")]
-        [RequiresArgument("msg")]
-        [Command("text")]
-        public static bool ShowText(Dictionary<string, object> args)
-        {
-            bool forwarding = TerminalBackend.IsForwardingConsoleWrites;
-            var fGuid = TerminalBackend.ForwardGUID;
-            Action<string> callback = (result) =>
-            {
-                TerminalBackend.IsForwardingConsoleWrites = forwarding;
-                TerminalBackend.ForwardGUID = (forwarding == true) ? fGuid : null;
-                Console.WriteLine($"{SaveSystem.CurrentSave.Username} says \"{result}\".");
-                TerminalBackend.IsForwardingConsoleWrites = false;
-            };
-            Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                Infobox.PromptText(args["title"].ToString(), args["msg"].ToString(), callback);
-            }));
-                return true;
-        }
-
-    }
-
-    [Namespace("audio")]
-    public static class AudioCommands
-    {
-        [Command("setvol", description = "Set the volume of the system audio to anywhere between 0 and 100.")]
-        [RequiresArgument("value")]
-        [RequiresUpgrade("audio_volume")]
-        public static bool SetVolume(Dictionary<string,object> args)
-        {
-            int val = Convert.ToInt32(args["value"].ToString());
-            float volume = (val / 100F);
-            AudioManager.SetVolume(volume);
-            return true;
-        }
-        [RequiresUpgrade("audio_volume")]
-        [Command("mute", description = "Sets the volume of the system audio to 0")]
-        public static bool MuteAudio()
-        {
-            AudioManager.SetVolume(0);
-            return true;
-        }
-    }
-
-    [RequiresUpgrade("mud_fundamentals")]
-    [Namespace("mud")]
-    public static class MUDCommands
-    {
-        [MultiplayerOnly]
-        [Command("status")]
-        public static bool Status()
-        {
-            ServerManager.PrintDiagnostics();
-            return true;
-        }
-
-        [Command("connect")]
-        public static bool Connect(Dictionary<string, object> args)
-        {
-            try
-            {
-                string ip = (args.ContainsKey("addr") == true) ? args["addr"] as string : "michaeltheshifter.me";
-                int port = (args.ContainsKey("port") == true) ? Convert.ToInt32(args["port"] as string) : 13370;
-                try
-                {
-                    ServerManager.Initiate(ip, port);
-                }
-                catch (Exception ex)
-                {
-                    Console.WriteLine("{ERROR}: " + ex.Message);
-                }
-
-                TerminalBackend.PrefixEnabled = false;
-                return true;
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("Error running script:" + ex);
-                return false;
-            }
-        }
-
-        [Command("reconnect")]
-        [RequiresUpgrade("hacker101_deadaccts")]
-        public static bool Reconnect()
-        {
-            Console.WriteLine("--reconnecting to multi-user domain...");
-            KernelWatchdog.MudConnected = true;
-            Console.WriteLine("--done.");
-            return true;
-        }
-
-        [MultiplayerOnly]
-        [Command("disconnect")]
-        [RequiresUpgrade("hacker101_deadaccts")]
-        public static bool Disconnect()
-        {
-            Console.WriteLine("--connection to multi-user domain severed...");
-            KernelWatchdog.MudConnected = false;
-            return true;
-        }
-
-        [MultiplayerOnly]
-        [Command("sendmsg")]
-        [KernelMode]
-        [RequiresUpgrade("hacker101_deadaccts")]
-        [RequiresArgument("header")]
-        [RequiresArgument("body")]
-        public static bool SendMessage(Dictionary<string, object> args)
-        {
-            ServerManager.SendMessage(args["header"].ToString(), args["body"].ToString());
-            return true;
-        }
-    }
-
-    [TutorialLock]
-    [Namespace("trm")]
-    public static class TerminalCommands
-    {
-        [Command("clear")]
-        public static bool Clear()
-        {
-            AppearanceManager.ConsoleOut.Clear();
-            return true;
-        }
-
-        [Command("echo")]
-        [RequiresArgument("text")]
-        public static bool Echo(Dictionary<string, object> args)
-        {
-            Console.WriteLine(args["text"]);
-            return true;
-        }
-    }
-
-#if DEVEL
-    internal class Rock : Exception
-    {
-        internal Rock() : base("Someone threw a rock at the window, and the Terminal shattered.")
-        {
-
-        }
-    }
-    
-    [MultiplayerOnly]
-    [Namespace("dev")]
-    public static class ShiftOSDevCommands
-    {
-        [Command("rock", description = "A little surprise for unstable builds...")]
-        public static bool ThrowASandwichingRock()
-        {
-            Infobox.Show("He who lives in a glass house shouldn't throw stones...", new Rock().Message);
-            return false;
-        }
-
-
-        [Command("unbuy")]
-        [RequiresArgument("upgrade")]
-        public static bool UnbuyUpgrade(Dictionary<string, object> args)
-        {
-            try
-            {
-                SaveSystem.CurrentSave.Upgrades[args["upgrade"] as string] = false;
-            }
-            catch
-            {
-                Console.WriteLine("Upgrade not found.");
-            }
-            return true;
-        }
-
-        [Command("getallupgrades")]
-        public static bool GetAllUpgrades()
-        {
-            Console.WriteLine(JsonConvert.SerializeObject(SaveSystem.CurrentSave.Upgrades, Formatting.Indented));
-            return true;
-        }
-
-        [Command("multarg")]
-        [RequiresArgument("id")]
-        [RequiresArgument("name")]
-        [RequiresArgument("type")]
-        public static bool MultArg(Dictionary<string, object> args)
-        {
-            Console.WriteLine("Success! "+args.ToString());
-            return true;
-        }
-
-
-        [Command("freecp")]
-        public static bool FreeCodepoints(Dictionary<string, object> args)
-        {
-            if (args.ContainsKey("amount"))
-                try
-                {
-                    int codepointsToAdd = Convert.ToInt32(args["amount"].ToString());
-                    SaveSystem.TransferCodepointsFrom("dev", codepointsToAdd);
-                    return true;
-                }
-                catch (Exception ex)
-                {
-                    Console.WriteLine("{ERROR}: " + ex.Message);
-                    return true;
-                }
-
-            SaveSystem.TransferCodepointsFrom("dev", 1000);
-            return true;
-        }
-
-        [Command("unlockeverything")]
-        public static bool UnlockAllUpgrades()
-        {
-            foreach (var upg in Shiftorium.GetDefaults())
-            {
-                Shiftorium.Buy(upg.ID, 0);
-            }
-            return true;
-        }
-
-        [Command("info")]
-        public static bool DevInformation()
-        {
-            Console.WriteLine("{SHIFTOS_PLUS_MOTTO}");
-            Console.WriteLine("{SHIFTOS_VERSION_INFO}" + Assembly.GetExecutingAssembly().GetName().Version);
-            return true;
-        }
-        [Command("pullfile")]
-        public static bool PullFile(Dictionary<string, object> args)
-        {
-            if (args.ContainsKey("physical") && args.ContainsKey("virtual"))
-            {
-                string file = (string)args["physical"];
-                string dest = (string)args["virtual"];
-                if (System.IO.File.Exists(file))
-                {
-                    Console.WriteLine("Pulling physical file to virtual drive...");
-                    byte[] filebytes = System.IO.File.ReadAllBytes(file);
-                    ShiftOS.Objects.ShiftFS.Utils.WriteAllBytes(dest, filebytes);
-                }
-                else
-                {
-                    Console.WriteLine("The specified file does not exist on the physical drive.");
-                }
-            }
-            else
-            {
-                Console.WriteLine("You must supply a physical path.");
-            }
-            return true;
-        }
-        [Command("crash")]
-        public static bool CrashInstantly()
-        {
-            CrashHandler.Start(new Exception("ShiftOS was sent a command to forcefully crash."));
-            return true;
-        }
-    }
-#endif
-
-    [Namespace("sos")]
-    public static class ShiftOSCommands
-    {
-        [RemoteLock]
-        [Command("shutdown")]
-        public static bool Shutdown()
-        {
-            TerminalBackend.InvokeCommand("sos.save");
-            SaveSystem.ShuttingDown = true;
-            AppearanceManager.Exit();
-            return true;
-        }
-
-        [Command("help", "{COMMAND_HELP_USAGE}", "{COMMAND_HELP_DESCRIPTION}")]
-        public static bool Help()
-        {
-            foreach (var exec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
-            {
-                if (exec.EndsWith(".exe") || exec.EndsWith(".dll"))
-                {
-                    try
-                    {
-                        var asm = Assembly.LoadFile(exec);
-
-                        var types = asm.GetTypes();
-
-                        foreach (var type in types)
-                        {
-                            if (Shiftorium.UpgradeAttributesUnlocked(type))
-                            {
-                                foreach (var a in type.GetCustomAttributes(false))
-                                {
-                                    if (a is Namespace)
-                                    {
-                                        var ns = a as Namespace;
-
-                                        if (!ns.hide)
-                                        {
-                                            string descp = "{NAMESPACE_" + ns.name.ToUpper() + "_DESCRIPTION}";
-                                            if (descp == Localization.Parse(descp))
-                                                descp = "";
-                                            else
-                                                descp = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descp) : "";
-
-                                            Console.WriteLine($"{{NAMESPACE}}{ns.name}" + descp);
-
-                                            foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
-                                            {
-                                                if (Shiftorium.UpgradeAttributesUnlocked(method))
-                                                {
-                                                    foreach (var ma in method.GetCustomAttributes(false))
-                                                    {
-                                                        if (ma is Command)
-                                                        {
-                                                            var cmd = ma as Command;
-
-                                                            if (!cmd.hide)
-                                                            {
-                                                                string descriptionparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_DESCRIPTION}";
-                                                                string usageparse = "{COMMAND_" + ns.name.ToUpper() + "_" + cmd.name.ToUpper() + "_USAGE}";
-                                                                if (descriptionparse == Localization.Parse(descriptionparse))
-                                                                    descriptionparse = "";
-                                                                else
-                                                                    descriptionparse = Shiftorium.UpgradeInstalled("help_description") ? Localization.Parse("{SEPERATOR}" + descriptionparse) : "";
-
-                                                                if (usageparse == Localization.Parse(usageparse))
-                                                                    usageparse = "";
-                                                                else
-                                                                    usageparse = Shiftorium.UpgradeInstalled("help_usage") ? Localization.Parse("{SEPERATOR}" + usageparse, new Dictionary<string, string>() {
-                                                            {"%ns", ns.name},
-                                                            {"%cmd", cmd.name}
-                                                        }) : "";
-
-                                                                Console.WriteLine($"{{COMMAND}}{ns.name}.{cmd.name}" + usageparse + descriptionparse);
-                                                            }
-                                                        }
-                                                    }
-                                                }
-
-                                            }
-                                        }
-
-                                    }
-                                }
-                            }
-                        }
-
-                    }
-                    catch { }
-                }
-            }
-
-            return true;
-        }
-
-        [MultiplayerOnly]
-        [Command("save")]
-        public static bool Save()
-        {
-            SaveSystem.SaveGame();
-            return true;
-        }
-
-        [MultiplayerOnly]
-        [Command("status")]
-        public static bool Status()
-        {
-            Console.WriteLine($@"ShiftOS version {Assembly.GetExecutingAssembly().GetName().Version.ToString()}
-
-Codepoints:       {SaveSystem.CurrentSave.Codepoints}
-Upgrades:         {SaveSystem.CurrentSave.CountUpgrades()} installed,
-                  {Shiftorium.GetAvailable().Length} available");
-            return true;
-        }
-    }
-
-    [MultiplayerOnly]
-    [Namespace("shiftorium")]
-    public static class ShiftoriumCommands
-    {
-        [Command("buy")]
-        [RequiresArgument("upgrade")]
-        public static bool BuyUpgrade(Dictionary<string, object> userArgs)
-        {
-            try
-            {
-                string upgrade = "";
-
-                if (userArgs.ContainsKey("upgrade"))
-                    upgrade = (string)userArgs["upgrade"];
-                else
-                    throw new Exception("You must specify a valid 'upgrade' value.");
-
-                foreach (var upg in Shiftorium.GetAvailable())
-                {
-                    if (upg.ID == upgrade)
-                    {
-                        Shiftorium.Buy(upgrade, upg.Cost);
-                        return true;
-                    }
-                }
-
-                throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
-            }
-            catch
-            {
-                return false;
-            }
-        }
-
-        [RequiresUpgrade("shiftorium_bulk_buy")]
-        [Command("bulkbuy")]
-        [RequiresArgument("upgrades")]
-        public static bool BuyBulk(Dictionary<string, object> args)
-        {
-            if (args.ContainsKey("upgrades"))
-            {
-                string[] upgrade_list = (args["upgrades"] as string).Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
-                foreach (var upg in upgrade_list)
-                {
-                    var dict = new Dictionary<string, object>();
-                    dict.Add("upgrade", upg);
-                    BuyUpgrade(dict);
-                }
-            }
-            else
-            {
-                throw new Exception("Please specify a list of upgrades in the 'upgrades' argument. Each upgrade is separated by a comma.");
-            }
-            return true;
-        }
-
-
-        [Command("info")]
-        public static bool ViewInfo(Dictionary<string, object> userArgs)
-        {
-            try
-            {
-                string upgrade = "";
-
-                if (userArgs.ContainsKey("upgrade"))
-                    upgrade = (string)userArgs["upgrade"];
-                else
-                    throw new Exception("You must specify a valid 'upgrade' value.");
-
-                foreach (var upg in Shiftorium.GetDefaults())
-                {
-                    if (upg.ID == upgrade)
-                    {
-                        Console.WriteLine($@"Information for {upgrade}:
-
-{upg.Name} - {upg.Cost} Codepoints
-------------------------------------------------------
-
-{upg.Description}
-
-To buy this upgrade, run:
-shiftorium.buy{{upgrade:""{upg.ID}""}}");
-                        return true;
-                    }
-                }
-
-                throw new Exception($"Couldn't find upgrade with ID: {upgrade}");
-            }
-            catch
-            {
-                return false;
-            }
-        }
-        [Command("list")]
-        public static bool ListAll()
-        {
-            try
-            {
-                Dictionary<string, int> upgrades = new Dictionary<string, int>();
-                int maxLength = 5;
-
-                foreach (var upg in Shiftorium.GetAvailable())
-                {
-                    if (upg.ID.Length > maxLength)
-                    {
-                        maxLength = upg.ID.Length;
-                    }
-
-                    upgrades.Add(upg.ID, upg.Cost);
-                }
-
-                Console.WriteLine("ID".PadRight((maxLength + 5) - 2) + "Cost (Codepoints)");
-
-                foreach (var upg in upgrades)
-                {
-                    Console.WriteLine(upg.Key.PadRight((maxLength + 5) - upg.Key.Length) + "  " + upg.Value.ToString());
-                }
-                return true;
-            }
-            catch (Exception e)
-            {
-                CrashHandler.Start(e);
-                return false;
-            }
-        }
-    }
-
-    [Namespace("win")]
-    public static class WindowCommands
-    {
-
-
-
-        [RemoteLock]
-        [Command("list")]
-        public static bool List()
-        {
-            Console.WriteLine("Window ID\tName");
-            foreach (var app in AppearanceManager.OpenForms)
-            {
-                //Windows are displayed the order in which they were opened.
-                Console.WriteLine($"{AppearanceManager.OpenForms.IndexOf(app)}\t{app.Text}");
-            }
-            return true;
-        }
-
-        [RemoteLock]
-        [Command("open")]
-        public static bool Open(Dictionary<string, object> args)
-        {
-            try
-            {
-                if (args.ContainsKey("app"))
-                {
-                    var app = args["app"] as string;
-                    //ANNND now we start reflecting...
-                    foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
-                    {
-                        if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll"))
-                        {
-                            var asm = Assembly.LoadFile(asmExec);
-                            try
-                            {
-                                foreach (var type in asm.GetTypes())
-                                {
-                                    if (type.BaseType == typeof(UserControl))
-                                    {
-                                        foreach (var attr in type.GetCustomAttributes(false))
-                                        {
-                                            if (attr is WinOpenAttribute)
-                                            {
-                                                if (app == (attr as WinOpenAttribute).ID)
-                                                {
-                                                    if (SaveSystem.CurrentSave.Upgrades.ContainsKey(app))
-                                                    {
-                                                        if (Shiftorium.UpgradeInstalled(app))
-                                                        {
-                                                            IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow;
-                                                            AppearanceManager.SetupWindow(frm);
-                                                            return true;
-                                                        }
-                                                        else
-                                                        {
-                                                            throw new Exception($"{app} was not found on your system! Try looking in the shiftorium...");
-                                                        }
-                                                    }
-                                                    else
-                                                    {
-                                                        IShiftOSWindow frm = Activator.CreateInstance(type) as IShiftOSWindow;
-                                                        AppearanceManager.SetupWindow(frm);
-                                                        return true;
-                                                    }
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            catch { }
-
-                        }
-                    }
-
-                }
-                else
-                {
-                    foreach (var asmExec in System.IO.Directory.GetFiles(Environment.CurrentDirectory))
-                    {
-                        if (asmExec.EndsWith(".exe") || asmExec.EndsWith(".dll"))
-                        {
-                            try
-                            {
-                                var asm = Assembly.LoadFile(asmExec);
-
-                                foreach (var type in asm.GetTypes())
-                                {
-                                    if (type.GetInterfaces().Contains(typeof(IShiftOSWindow)))
-                                    {
-                                        foreach (var attr in type.GetCustomAttributes(false))
-                                        {
-                                            if (attr is WinOpenAttribute)
-                                            {
-                                                if (Shiftorium.UpgradeAttributesUnlocked(type))
-                                                {
-                                                    Console.WriteLine("win.open{app:\"" + (attr as WinOpenAttribute).ID + "\"}");
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            catch { }
-                        }
-                    }
-
-
-                    return true;
-                }
-                Console.WriteLine("Couldn't find the specified app on your system.");
-                return true;
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("Error running script:" + ex);
-                return false;
-            }
-        }
-
-        [RemoteLock]
-        [Command("close", usage = "{win:integer32}", description ="Closes the specified window.")]
-        [RequiresArgument("win")]
-        [RequiresUpgrade("close_command")]
-        public static bool CloseWindow(Dictionary<string, object> args)
-        {
-            int winNum = -1;
-            if (args.ContainsKey("win"))
-                winNum = Convert.ToInt32(args["win"].ToString());
-            string err = null;
-
-            if (winNum < 0 || winNum >= AppearanceManager.OpenForms.Count)
-                err = "The window number must be between 0 and " + (AppearanceManager.OpenForms.Count - 1).ToString() + ".";
-
-            if (string.IsNullOrEmpty(err))
-            {
-                Console.WriteLine($"Closing {AppearanceManager.OpenForms[winNum].Text}...");
-                AppearanceManager.Close(AppearanceManager.OpenForms[winNum].ParentWindow);
-            }
-            else
-            {
-                Console.WriteLine(err);
-            }
-
-            return true;
-        }
-
-    }
-}
diff --git a/ShiftOS_TheReturn/Localization.cs b/ShiftOS_TheReturn/Localization.cs
deleted file mode 100644
index de5e158..0000000
--- a/ShiftOS_TheReturn/Localization.cs
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using Newtonsoft.Json;
-using ShiftOS.Objects.ShiftFS;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace ShiftOS.Engine
-{
-    public interface ILanguageProvider
-    {
-        List<string> GetJSONTranscripts();
-        void WriteDefaultTranscript();
-        string GetCurrentTranscript();
-        string[] GetAllLanguages();
-    }
-
-    public static class Localization
-    {
-        private static ILanguageProvider _provider = null;
-
-        public static string[] GetAllLanguages()
-        {
-            if(_provider == null)
-            {
-                return JsonConvert.DeserializeObject<string[]>(Properties.Resources.languages);
-            }
-            else
-            {
-                return _provider.GetAllLanguages();
-            }
-        }
-
-        public static void SetupTHETRUEDefaultLocals()
-        {
-            if (_provider == null)
-            {
-                var lines = Properties.Resources.strings_en;
-                var path = "english.local";
-                Utils.WriteAllText(Paths.GetPath(path), lines);
-            }
-            else
-            {
-                _provider.WriteDefaultTranscript();
-            }
-        }
-
-        public static void SetupDefaultLocals(string lines, string path)
-        {
-            Utils.WriteAllText(Paths.GetPath(path), lines);
-
-        }
-
-
-        /// <summary>
-        /// Takes in a string and parses localization blocks into text blocks in the current language.
-        /// </summary>
-        /// <example>"{CODEPOINTS}: 0" will come out as "Codepoints: 0" if the current language is english.</example>
-        /// <param name="original">The string to parse</param>
-        /// <returns>The parsed string.</returns>
-        /// 
-        public static string Parse(string original)
-        {
-            return Parse(original, new Dictionary<string, string>());
-        }
-
-
-        public static string Parse(string original, Dictionary<string, string> replace)
-        {
-            Dictionary<string, string> localizationStrings = new Dictionary<string, string>();
-
-
-
-            try
-            {
-                localizationStrings = JsonConvert.DeserializeObject<Dictionary<string, string>>(_provider.GetCurrentTranscript());
-            }
-            catch
-            {
-                localizationStrings = JsonConvert.DeserializeObject<Dictionary<string, string>>(Utils.ReadAllText(Paths.GetPath("english.local")));
-            }
-
-            foreach (var kv in localizationStrings)
-            {
-                original = original.Replace(kv.Key, kv.Value);
-            }
-
-            List<string> orphaned = new List<string>();
-            if (Utils.FileExists("0:/dev_orphaned_lang.txt"))
-            {
-                orphaned = JsonConvert.DeserializeObject<List<string>>(Utils.ReadAllText("0:/dev_orphaned_lang.txt"));
-            }
-
-
-            int start_index = 0;
-            int length = 0;
-            bool indexing = false;
-
-            foreach (var c in original)
-            {
-                if (c == '{')
-                {
-                    start_index = original.IndexOf(c);
-                    indexing = true;
-                }
-
-                if (indexing == true)
-                {
-                    length++;
-                    if (c == '}')
-                    {
-                        indexing = false;
-                        string o = original.Substring(start_index, length);
-                        if (!orphaned.Contains(o))
-                        {
-                            orphaned.Add(o);
-                        }
-                        start_index = 0;
-                        length = 0;
-                    }
-                }
-            }
-
-            if (orphaned.Count > 0)
-            {
-                Utils.WriteAllText("0:/dev_orphaned_lang.txt", JsonConvert.SerializeObject(orphaned, Formatting.Indented));
-            }
-
-            //string original2 = Parse(original);
-
-            string usernameReplace = "";
-            string domainReplace = "";
-
-            if (SaveSystem.CurrentSave != null)
-            {
-                usernameReplace = SaveSystem.CurrentSave.Username;
-                domainReplace = SaveSystem.CurrentSave.SystemName;
-            }
-
-            string namespaceReplace = "";
-            string commandReplace = "";
-
-            if (TerminalBackend.latestCommmand != "" && TerminalBackend.latestCommmand.IndexOf('.') > -1)
-            {
-                namespaceReplace = TerminalBackend.latestCommmand.Split('.')[0];
-                commandReplace = TerminalBackend.latestCommmand.Split('.')[1];
-            }
-
-            Dictionary<string, string> defaultReplace = new Dictionary<string, string>() {
-                {"%username", usernameReplace},
-                {"%domain", domainReplace},
-                {"%ns", namespaceReplace},
-                {"%cmd", commandReplace},
-                {"%cp", SaveSystem.CurrentSave?.Codepoints.ToString() },
-            };
-
-            foreach (KeyValuePair<string, string> replacement in replace)
-            {
-                original = original.Replace(replacement.Key, Parse(replacement.Value));
-            }
-
-            foreach (KeyValuePair<string, string> replacement in defaultReplace)
-            {
-                original = original.Replace(replacement.Key, replacement.Value);
-            }
-
-            return original;
-        }
-
-        public static void RegisterProvider(ILanguageProvider p)
-        {
-            _provider = p;
-        }
-    }
-}
diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs
deleted file mode 100644
index df4c6d6..0000000
--- a/ShiftOS_TheReturn/SaveSystem.cs
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-//#define ONLINEMODE
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using System.IO;
-using Newtonsoft.Json;
-using ShiftOS.Objects;
-using ShiftOS.Objects.ShiftFS;
-using oobe = ShiftOS.Engine.OutOfBoxExperience;
-using static System.Net.Mime.MediaTypeNames;
-
-namespace ShiftOS.Engine
-{
-    public class EngineConfig
-    {
-        public bool ConnectToMud = true;
-        public string MudDefaultIP = "dome.rol.im";
-        public int MudDefaultPort = 13370;
-    }
-
-    public static class SaveSystem
-    {
-        public static bool ShuttingDown = false;
-
-        public static Save CurrentSave { get; set; }
-
-        /// <summary>
-        /// Start the entire ShiftOS engine.
-        /// </summary>
-        /// <param name="useDefaultUI">Whether ShiftOS should initiate it's Windows Forms front-end.</param>
-        public static void Begin(bool useDefaultUI = true)
-        {
-            AppDomain.CurrentDomain.UnhandledException += (o, a) =>
-            {
-                CrashHandler.Start((Exception)a.ExceptionObject);
-            };
-
-            if (!System.IO.File.Exists(Paths.SaveFile))
-            {
-                var root = new ShiftOS.Objects.ShiftFS.Directory();
-                root.Name = "System";
-                root.permissions = Permissions.All;
-                System.IO.File.WriteAllText(Paths.SaveFile, JsonConvert.SerializeObject(root));
-            }
-
-
-            if (Utils.Mounts.Count == 0)
-                Utils.Mount(System.IO.File.ReadAllText(Paths.SaveFile));
-            Paths.Init();
-
-            Localization.SetupTHETRUEDefaultLocals();
-            SkinEngine.Init();
-
-            TerminalBackend.OpenTerminal();
-
-            TerminalBackend.InStory = true;
-            var thread = new Thread(new ThreadStart(() =>
-            {
-                //Do not uncomment until I sort out the copyright stuff... - Michael
-                //AudioManager.Init();
-
-                var defaultConf = new EngineConfig();
-                if (System.IO.File.Exists("engineconfig.json"))
-                    defaultConf = JsonConvert.DeserializeObject<EngineConfig>(System.IO.File.ReadAllText("engineconfig.json"));
-                else
-                {
-                    System.IO.File.WriteAllText("engineconfig.json", JsonConvert.SerializeObject(defaultConf, Formatting.Indented));
-                }
-
-                Thread.Sleep(350);
-                Console.WriteLine("Initiating kernel...");
-                Thread.Sleep(250);
-                Console.WriteLine("Reading filesystem...");
-                Thread.Sleep(100);
-                Console.WriteLine("Reading configuration...");
-
-                Console.WriteLine("{CONNECTING_TO_MUD}");
-
-                if (defaultConf.ConnectToMud == true)
-                {
-                    bool guidReceived = false;
-                    ServerManager.GUIDReceived += (str) =>
-                    {
-                        //Connection successful! Stop waiting!
-                        guidReceived = true;
-                        Console.WriteLine("Connection successful.");
-                    };
-
-                    try
-                    {
-                        
-                        ServerManager.Initiate("secondary4162.cloudapp.net", 13370);
-                        //This haults the client until the connection is successful.
-                        while (ServerManager.thisGuid == new Guid())
-                        {
-
-                        }
-                        Console.WriteLine("GUID received - bootstrapping complete.");
-                        FinishBootstrap();
-                    }
-                    catch (Exception ex)
-                    {
-                        //No errors, this never gets called.
-                        Console.WriteLine("{ERROR}: " + ex.Message);
-                        Thread.Sleep(3000);
-                        ServerManager.StartLANServer();
-                        while (ServerManager.thisGuid == new Guid())
-                        {
-
-                        }
-                        Console.WriteLine("GUID received - bootstrapping complete.");
-                        FinishBootstrap();
-                    }
-                }
-                else
-                {
-                    ServerManager.StartLANServer();
-                }
-
-                //Nothing happens past this point - but the client IS connected! It shouldn't be stuck in that while loop above.
-
-                
-            }));
-            thread.IsBackground = true;
-            thread.Start();
-        }
-
-        public static void FinishBootstrap()
-        {
-            KernelWatchdog.Log("mud_handshake", "handshake successful: kernel watchdog access code is \"" + ServerManager.thisGuid.ToString() + "\"");
-
-            ServerManager.MessageReceived += (msg) =>
-            {
-                if (msg.Name == "mud_savefile")
-                {
-                    CurrentSave = JsonConvert.DeserializeObject<Save>(msg.Contents);
-                }
-                else if (msg.Name == "mud_login_denied")
-                {
-                    oobe.PromptForLogin();
-                }
-            };
-
-            ReadSave();
-
-            while (CurrentSave == null)
-            {
-
-            }
-
-            Shiftorium.Init();
-
-            while (CurrentSave.StoryPosition < 1)
-            {
-
-            }
-
-            Thread.Sleep(75);
-
-            Thread.Sleep(50);
-            Console.WriteLine("{SYSTEM_INITIATED}");
-
-            TerminalBackend.InStory = false;
-            TerminalBackend.PrefixEnabled = true;
-            Shiftorium.LogOrphanedUpgrades = true;
-            Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                ShiftOS.Engine.Scripting.LuaInterpreter.RunSft(Paths.GetPath("kernel.sft"));
-            }));
-            Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher()));
-            if (CurrentSave.StoryPosition == 1)
-            {
-                Desktop.InvokeOnWorkerThread(new Action(() =>
-                {
-                    TutorialManager.StartTutorial();
-
-                }));
-                while (TutorialManager.IsInTutorial == true) { }
-                GameReady?.Invoke();
-            }
-            else
-            {
-                GameReady?.Invoke();
-            }
-        }
-
-        public delegate void EmptyEventHandler();
-
-        public static List<ClientSave> Users
-        {
-            get;
-            private set;
-        }
-
-        public static event EmptyEventHandler GameReady;
-
-        public static void TransferCodepointsToVoid(int amount)
-        {
-            CurrentSave.Codepoints -= amount;
-            NotificationDaemon.AddNotification(NotificationType.CodepointsSent, amount);
-        }
-
-        public static void Restart()
-        {
-            TerminalBackend.InvokeCommand("sos.shutdown");
-            System.Windows.Forms.Application.Restart();
-        }
-
-        public static void ReadSave()
-        {
-            //Migrate old saves.
-            if(System.IO.Directory.Exists("C:\\ShiftOS2"))
-            {
-                Console.WriteLine("Old save detected. Migrating filesystem to MFS...");
-                foreach (string file in System.IO.Directory.EnumerateDirectories("C:\\ShiftOS2")
-.Select(d => new DirectoryInfo(d).FullName))
-                {
-                    if(!Utils.DirectoryExists(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/")))
-                    Utils.CreateDirectory(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"));
-                }
-                foreach (string file in System.IO.Directory.EnumerateFiles("C:\\ShiftOS2"))
-                {
-
-                    string rfile = Path.GetFileName(file);
-                    Utils.WriteAllBytes(file.Replace("C:\\ShiftOS2\\", "0:/").Replace("\\", "/"), System.IO.File.ReadAllBytes(file));
-                    Console.WriteLine("Exported file " + file);
-                }
-
-            }
-
-
-            if (Utils.FileExists(Paths.SaveFileInner))
-            {
-                oobe.ShowSaveTransfer(JsonConvert.DeserializeObject<Save>(Utils.ReadAllText(Paths.SaveFileInner)));
-            }
-            else
-            {
-                if (Utils.FileExists(Paths.GetPath("user.dat")))
-                {
-                    var userdat = JsonConvert.DeserializeObject<ClientSave>(Utils.ReadAllText(Paths.GetPath("user.dat")));
-
-                    ServerManager.SendMessage("mud_login", $@"{{
-    username: ""{userdat.Username}"",
-    password: ""{userdat.Password}""
-}}");
-                }
-                else
-                {
-                    NewSave();
-                }
-            }
-
-        }
-
-        public static void NewSave()
-        {
-            AppearanceManager.Invoke(new Action(() =>
-            {
-                CurrentSave = new Save();
-                CurrentSave.Codepoints = 0;
-                CurrentSave.Upgrades = new Dictionary<string, bool>();
-                Shiftorium.Init();
-                oobe.Start(CurrentSave);
-            }));
-        }
-
-        public static void SaveGame()
-        {
-            if(!Shiftorium.Silent)
-                Console.WriteLine("");
-            if(!Shiftorium.Silent)
-                Console.Write("{SE_SAVING}... ");
-            if (SaveSystem.CurrentSave != null)
-            {
-                string username = CurrentSave.Username;
-                string password = CurrentSave.Password;
-
-                    Utils.WriteAllText(Paths.GetPath("user.dat"), $@"{{
-    username: ""{username}"",
-    password: ""{password}""
-}}");
-                
-                ServerManager.SendMessage("mud_save", JsonConvert.SerializeObject(CurrentSave, Formatting.Indented));
-            }
-            if (!Shiftorium.Silent)
-                Console.WriteLine(" ...{DONE}.");
-            System.IO.File.WriteAllText(Paths.SaveFile, Utils.ExportMount(0));
-        }
-
-        public static void TransferCodepointsFrom(string who, long amount)
-        {
-            NotificationDaemon.AddNotification(NotificationType.CodepointsReceived, amount);
-            CurrentSave.Codepoints += amount;
-        }
-    }
-
-    public delegate void TextSentEventHandler(string text);
-
-    public class DeveloperAttribute : Attribute
-    {
-
-    }
-}
diff --git a/ShiftOS_TheReturn/ServerManager.cs b/ShiftOS_TheReturn/ServerManager.cs
deleted file mode 100644
index 31b3129..0000000
--- a/ShiftOS_TheReturn/ServerManager.cs
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using ShiftOS.Objects;
-using NetSockets;
-using System.Windows.Forms;
-using System.Threading;
-using ShiftOS;
-using static ShiftOS.Engine.SaveSystem;
-using Newtonsoft.Json;
-
-namespace ShiftOS.Engine
-{
-    public static class ServerManager
-    {
-        public static void PrintDiagnostics()
-        {
-            Console.WriteLine($@"{{CLIENT_DIAGNOSTICS}}
-
-{{GUID}}: {thisGuid}
-{{CLIENT_DATA}}:
-
-{JsonConvert.SerializeObject(client, Formatting.Indented)}");
-        }
-
-        public static Guid thisGuid { get; private set; }
-        private static NetObjectClient client { get; set; }
-
-        public static void Disconnect()
-        {
-            if (client != null)
-            {
-                client.Disconnect();
-            }
-            Disconnected?.Invoke();
-
-        }
-
-        public static event EmptyEventHandler Disconnected;
-        
-        public static void InitiateMUDHack()
-        {
-            MessageReceived += ServerManager_MessageReceived;
-            SendMessage("mudhack_init", "");
-        }
-
-        public static event Action<string> ServerPasswordGenerated;
-        public static event EmptyEventHandler ServerAccessGranted;
-        public static event EmptyEventHandler ServerAccessDenied;
-        public static event Action<string> GUIDReceived;
-        public static event Action<List<OnlineUser>> UsersReceived;
-
-        private static void ServerManager_MessageReceived(ServerMessage msg)
-        {
-            switch(msg.Name)
-            {
-                case "mudhack_users":
-                    UsersReceived?.Invoke(JsonConvert.DeserializeObject<List<OnlineUser>>(msg.Contents));
-                    break;
-                case "mudhack_init":
-                    ServerPasswordGenerated?.Invoke(msg.Contents);
-                    break;
-                case "mudhack_denied":
-                    ServerAccessDenied?.Invoke();
-                    break;
-                case "mudhack_granted":
-                    ServerAccessGranted?.Invoke();
-                    break;
-                case "getguid_fromserver":
-                    if(SaveSystem.CurrentSave.Username == msg.Contents)
-                    {
-                        client.Send(new NetObject("yes_i_am", new ServerMessage
-                        {
-                            Name = "getguid_reply",
-                            GUID = msg.GUID,
-                            Contents = thisGuid.ToString(),
-                        }));
-                    }
-                    break;
-                case "getguid_reply":
-                    GUIDReceived?.Invoke(msg.Contents);
-                    break;
-            }
-        }
-
-        public static void Detach_ServerManager_MessageReceived()
-        {
-            MessageReceived -= new ServerMessageReceived(ServerManager_MessageReceived);
-        }
-
-        public static void Initiate(string mud_address, int port)
-        {
-            client = new NetObjectClient();
-
-            client.OnReceived += (o, a) =>
-            {
-                var msg = a.Data.Object as ServerMessage;
-                if (msg.Name == "Welcome")
-                {
-                    thisGuid = new Guid(msg.Contents);
-                    GUIDReceived?.Invoke(msg.Contents);
-                    TerminalBackend.PrefixEnabled = true;
-                    TerminalBackend.PrintPrompt();
-                }
-                else if(msg.Name == "allusers")
-                {
-                    foreach(var acc in JsonConvert.DeserializeObject<string[]>(msg.Contents))
-                    {
-                        Console.WriteLine(acc);
-                    }
-                    TerminalBackend.PrintPrompt();
-                }
-                else if(msg.Name == "update_your_cp")
-                {
-                    var args = JsonConvert.DeserializeObject<Dictionary<string, object>>(msg.Contents);
-                    if(args["username"] as string == SaveSystem.CurrentSave.Username)
-                    {
-                        SaveSystem.CurrentSave.Codepoints += (long)args["amount"];
-                        Desktop.InvokeOnWorkerThread(new Action(() =>
-                        {
-                            Infobox.Show($"MUD Control Centre", $"Someone bought an item in your shop, and they have paid {args["amount"]}, and as such, you have been granted these Codepoints.");
-                        }));
-                        SaveSystem.SaveGame();
-                    }
-                }
-                else if(msg.Name =="broadcast")
-                {
-                    Console.WriteLine(msg.Contents);
-                }
-                else if (msg.Name == "Error")
-                {
-                    var ex = JsonConvert.DeserializeObject<Exception>(msg.Contents);
-                    TerminalBackend.PrefixEnabled = true;
-                    ConsoleEx.ForegroundColor = ConsoleColor.Red;
-                    ConsoleEx.Bold = true;
-                    Console.Write($@"{{MUD_ERROR}}: ");
-                    ConsoleEx.Bold = false;
-                    ConsoleEx.Italic = true;
-                    ConsoleEx.ForegroundColor = ConsoleColor.DarkYellow;
-                    Console.WriteLine(ex.Message);
-                    TerminalBackend.PrefixEnabled = true;
-                    TerminalBackend.PrintPrompt();
-                }
-                else
-                {
-                    MessageReceived?.Invoke(msg);
-                }
-            };
-
-            client.Connect(mud_address, port);
-
-        }
-
-        public static void SendMessage(string name, string contents)
-        {
-            var sMsg = new ServerMessage
-            {
-                Name = name,
-                Contents = contents,
-                GUID = thisGuid.ToString(),
-            };
-
-            client.Send(new NetObject("msg", sMsg));
-
-        }
-
-        private static bool singleplayer = false;
-        public static bool IsSingleplayer { get { return singleplayer; } }
-
-        public static void StartLANServer()
-        {
-            singleplayer = true;
-            ShiftOS.Server.Program.ServerStarted += (address) =>
-            {
-                Console.WriteLine($"Connecting to {address}...");
-                Initiate(address, 13370);
-            };
-            Disconnected += () =>
-            {
-                ShiftOS.Server.Program.Stop();
-            };
-            ShiftOS.Server.Program.Main(new[] { "" });
-
-
-        }
-
-
-        public static event ServerMessageReceived MessageReceived;
-
-    }
-
-    public delegate void ServerMessageReceived(ServerMessage msg);
-
-    public class MultiplayerOnlyAttribute : Attribute
-    {
-        /// <summary>
-        /// Marks this application as a multiplayer-only application.
-        /// </summary>
-        public MultiplayerOnlyAttribute()
-        {
-
-        }
-    }
-}
diff --git a/ShiftOS_TheReturn/Shiftorium.cs b/ShiftOS_TheReturn/Shiftorium.cs
deleted file mode 100644
index 0bdd9f4..0000000
--- a/ShiftOS_TheReturn/Shiftorium.cs
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using Newtonsoft.Json;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using static ShiftOS.Engine.SaveSystem;
-using System.Diagnostics;
-
-namespace ShiftOS.Engine
-{
-    public static class Shiftorium
-    {
-        /// <summary>
-        /// Whether or not shiftorium output should be written to the console.
-        /// </summary>
-        public static bool Silent = false;
-
-        public static void InvokeUpgradeInstalled()
-        {
-            Installed?.Invoke();
-        }
-
-
-        public static bool Buy(string id, int cost)
-        {
-            if(SaveSystem.CurrentSave.Codepoints >= cost)
-            {
-                SaveSystem.CurrentSave.Upgrades[id] = true;
-                TerminalBackend.InvokeCommand("sos.save");
-                SaveSystem.TransferCodepointsToVoid(cost);
-                Installed?.Invoke();
-                Desktop.ResetPanelButtons();
-                Desktop.PopulateAppLauncher();
-                return true;
-            }
-            else
-            {
-                if(!Silent)
-                    Console.WriteLine($"{{SHIFTORIUM_NOTENOUGHCP}}: {cost} > {SaveSystem.CurrentSave.Codepoints}");
-                return false;
-            }
-        }
-
-        public static bool UpgradeAttributesUnlocked(Type type)
-        {
-            foreach(var attr in type.GetCustomAttributes(true))
-            {
-                if(attr is RequiresUpgradeAttribute)
-                {
-                    var rAttr = attr as RequiresUpgradeAttribute;
-                    return rAttr.Installed;
-                }
-            }
-
-            return true;
-        }
-
-        public static bool UpgradeAttributesUnlocked(MethodInfo type)
-        {
-            foreach (var attr in type.GetCustomAttributes(true))
-            {
-                if (attr is RequiresUpgradeAttribute)
-                {
-                    var rAttr = attr as RequiresUpgradeAttribute;
-                    return rAttr.Installed;
-                }
-            }
-
-            return true;
-        }
-
-        public static bool UpgradeAttributesUnlocked(PropertyInfo type)
-        {
-            foreach (var attr in type.GetCustomAttributes(true))
-            {
-                if (attr is RequiresUpgradeAttribute)
-                {
-                    var rAttr = attr as RequiresUpgradeAttribute;
-                    return rAttr.Installed;
-                }
-            }
-
-            return true;
-        }
-
-        public static bool UpgradeAttributesUnlocked(FieldInfo type)
-        {
-            foreach (var attr in type.GetCustomAttributes(true))
-            {
-                if (attr is RequiresUpgradeAttribute)
-                {
-                    var rAttr = attr as RequiresUpgradeAttribute;
-                    return rAttr.Installed;
-                }
-            }
-
-            return true;
-        }
-
-        public static bool IsInitiated { get; private set; }
-
-        public static void Init()
-        {
-            if (IsInitiated == false)
-            {
-                IsInitiated = true;
-                //Let the crash handler deal with this one...
-                var dict = GetDefaults();
-                foreach (var itm in dict)
-                {
-                    if (!SaveSystem.CurrentSave.Upgrades.ContainsKey(itm.ID))
-                    {
-                        try
-                        {
-                            SaveSystem.CurrentSave.Upgrades.Add(itm.ID, false);
-                        }
-                        catch
-                        {
-
-                        }
-                    }
-                }
-            }
-
-        }
-
-        public static int GetCPValue(string id)
-        {
-            foreach(var upg in GetDefaults())
-            {
-                if (upg.ID == id)
-                    return upg.Cost;
-            }
-            return 0;
-        }
-
-        public static ShiftoriumUpgrade[] GetAvailable()
-        {
-            List<ShiftoriumUpgrade> available = new List<ShiftoriumUpgrade>();
-            foreach(var defaultupg in GetDefaults())
-            {
-                if (!UpgradeInstalled(defaultupg.ID) && DependenciesInstalled(defaultupg))
-                    available.Add(defaultupg);
-            }
-            return available.ToArray();
-        }
-
-        public static bool DependenciesInstalled(ShiftoriumUpgrade upg)
-        {
-            if (string.IsNullOrEmpty(upg.Dependencies))
-            {
-                return true;//root upgrade, no parents
-            }
-            else if (upg.Dependencies.Contains(";"))
-            {
-                string[] dependencies = upg.Dependencies.Split(';');
-                foreach(var dependency in dependencies)
-                {
-                    if (!UpgradeInstalled(dependency))
-                        return false;
-                }
-                return true;
-            } 
-            else
-            {
-                return UpgradeInstalled(upg.Dependencies);
-            }
-        }
-
-        public static event EmptyEventHandler Installed;
-
-        public static bool UpgradeInstalled(string id)
-        {
-            if (SaveSystem.CurrentSave != null)
-            {
-                if (!IsInitiated)
-                    Init();
-            }
-            try
-            {
-                if (SaveSystem.CurrentSave == null)
-                    return false;
-
-                if (SaveSystem.CurrentSave.StoriesExperienced == null)
-                    SaveSystem.CurrentSave.StoriesExperienced = new List<string>();
-
-                bool upgInstalled = false;
-                if(SaveSystem.CurrentSave.Upgrades.ContainsKey(id))
-                    upgInstalled = SaveSystem.CurrentSave.Upgrades[id];
-
-                if(upgInstalled == false)
-                    return SaveSystem.CurrentSave.StoriesExperienced.Contains(id);
-                return true;
-            }
-            catch
-            {
-                Console.WriteLine("Upgrade " + id + "DNE.");
-                Console.WriteLine();
-                return false;
-            }
-
-        }
-
-        //LEAVE THIS AS FALSE. The game will set it when the save is loaded.
-        public static bool LogOrphanedUpgrades = false;
-
-        private static IShiftoriumProvider _provider = null;
-
-        public static void RegisterProvider(IShiftoriumProvider p)
-        {
-            _provider = p;
-        }
-
-        //Bless the newer NEWER engine.
-        public static List<ShiftoriumUpgrade> GetDefaults()
-        {
-            try
-            {
-                return _provider.GetDefaults();
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine("Couldn't get the upgrade definition list from the provider.");
-                Console.WriteLine("This might be able to help:");
-                Console.WriteLine(ex);
-                return JsonConvert.DeserializeObject<List<ShiftoriumUpgrade>>(Properties.Resources.Shiftorium);
-            }
-        }
-    }
-
-    public interface IShiftoriumProvider
-    {
-        List<ShiftoriumUpgrade> GetDefaults();
-    }
-
-    public class ShiftoriumUpgradeLookupException : Exception
-    {
-        public ShiftoriumUpgradeLookupException(string id) : base("A shiftorium upgrade of ID \"" + id + "\" was not found in the system.")
-        {
-            ID = id;
-
-            Debug.WriteLine("UpgradeNotFound: " + id);
-
-        }
-
-        public string ID { get; private set; }
-    }
-
-    public class ShiftoriumUpgrade
-    {
-        public string Name { get; set; }
-        public string Description { get; set; }
-        public int Cost { get; set; }
-        public string ID { get { return (this.Id != null ? this.Id : (Name.ToLower().Replace(" ", "_"))); } }
-        public string Id { get; }
-
-        public string Dependencies { get; set; }
-    }
-}
diff --git a/ShiftOS_TheReturn/TerminalTextWriter.cs b/ShiftOS_TheReturn/TerminalTextWriter.cs
deleted file mode 100644
index bc242a9..0000000
--- a/ShiftOS_TheReturn/TerminalTextWriter.cs
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * MIT License
- * 
- * Copyright (c) 2017 Michael VanOverbeek and ShiftOS devs
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.IO;
-using System.Windows.Forms;
-
-namespace ShiftOS.Engine
-{
-    public class TerminalTextWriter : TextWriter
-    {
-        [System.Runtime.InteropServices.DllImport("user32.dll")]
-        public static extern bool LockWindowUpdate(IntPtr hWndLock);
-        
-
-        public override Encoding Encoding
-        {
-            get
-            {
-                return Encoding.Unicode;
-            }
-        }
-
-        public ITerminalWidget UnderlyingControl
-        {
-            get
-            {
-                return AppearanceManager.ConsoleOut;
-            }
-        }
-
-        public void select()
-        {
-            Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                UnderlyingControl.SelectBottom();
-                
-            }));
-        }
-
-        public override void Write(char value)
-        {
-            if (TerminalBackend.IsForwardingConsoleWrites)
-            {
-                ServerManager.SendMessage("write", $@"{{
-    guid: ""{TerminalBackend.ForwardGUID}"",
-    text: ""{value}""
-}}");
-            }
-            else
-            {
-                Desktop.InvokeOnWorkerThread(new Action(() =>
-                {
-                    UnderlyingControl.Write(value.ToString());
-                    select();
-                }));
-            }
-        }
-
-        public override void WriteLine(string value)
-        {
-            if (TerminalBackend.IsForwardingConsoleWrites)
-            {
-                ServerManager.SendMessage("write", $@"{{
-    guid: ""{TerminalBackend.ForwardGUID}"",
-    text: ""{value + Environment.NewLine}""
-}}");
-            }
-            else
-            {
-
-                Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                UnderlyingControl.WriteLine(value);
-                select();
-            }));
-            }
-        }
-
-        public void SetLastText()
-        {
-        }
-
-        public override void Write(string value)
-        {
-            if (TerminalBackend.IsForwardingConsoleWrites)
-            {
-                ServerManager.SendMessage("write", $@"{{
-    guid: ""{TerminalBackend.ForwardGUID}"",
-    text: ""{value}""
-}}");
-            }
-            else
-            {
-
-                Desktop.InvokeOnWorkerThread(new Action(() =>
-            {
-                UnderlyingControl.Write(value.ToString());
-                select();
-            }));
-            }
-        }
-
-
-    }
-}