diff --git a/ShiftOS.WinForms/Commands.cs b/ShiftOS.WinForms/Commands.cs
index e69de29..23b8f19 100644
--- a/ShiftOS.WinForms/Commands.cs
+++ b/ShiftOS.WinForms/Commands.cs
@@ -0,0 +1,473 @@
+/*
+ * 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 ShiftOS.Engine.Scripting;
+using ShiftOS.Objects.ShiftFS;
+
+namespace ShiftOS.Engine
+{
+    [TutorialLock]
+    public static class TerminalCommands
+    {
+        [Command("clear", description = "{DESC_CLEAR}")]
+        public static bool Clear()
+        {
+            AppearanceManager.ConsoleOut.Clear();
+            return true;
+        }
+    }
+
+    public static class ShiftOSCommands
+    {
+
+        [Command("setsfxenabled", description = "{DESC_SETSFXENABLED}")]
+        [RequiresArgument("value")]
+        public static bool SetSfxEnabled(Dictionary<string, object> args)
+        {
+            try
+            {
+                bool value = Convert.ToBoolean(args["value"].ToString());
+                SaveSystem.CurrentSave.SoundEnabled = value;
+                SaveSystem.SaveGame();
+            }
+            catch
+            {
+                Console.WriteLine("{ERR_BADBOOL}");
+            }
+            return true;
+        }
+
+
+
+        [Command("setmusicenabled", description = "{DESC_SETMUSICENABLED}")]
+        [RequiresArgument("value")]
+        public static bool SetMusicEnabled(Dictionary<string, object> args)
+        {
+            try
+            {
+                bool value = Convert.ToBoolean(args["value"].ToString());
+                SaveSystem.CurrentSave.MusicEnabled = value;
+                SaveSystem.SaveGame();
+            }
+            catch
+            {
+                Console.WriteLine("{ERR_BADBOOL}");
+            }
+            return true;
+        }
+
+        
+
+        [Command("setvolume", description ="{DESC_SETVOLUME}")]
+        [RequiresArgument("value")]
+        public static bool SetSfxVolume(Dictionary<string, object> args)
+        {
+            int value = int.Parse(args["value"].ToString());
+            if(value >= 0 && value <= 100)
+            {
+                SaveSystem.CurrentSave.MusicVolume = value;
+                SaveSystem.SaveGame();
+            }
+            else
+            {
+                Console.WriteLine("{ERR_BADPERCENT}");
+            }
+            return true;
+        }
+
+        [RemoteLock]
+        [Command("shutdown", description = "{DESC_SHUTDOWN}")]
+        public static bool Shutdown()
+        {
+            SaveSystem.SaveGame();
+            AppearanceManager.Exit();
+            return true;
+        }
+
+        [Command("lang", description = "{DESC_LANG}")]
+        [RequiresArgument("language")]
+        public static bool SetLanguage(Dictionary<string, object> userArgs)
+        {
+            try
+            {
+                string lang = "";
+
+                lang = (string)userArgs["language"];
+                
+                if (Localization.GetAllLanguages().Contains(lang))
+                {
+                    SaveSystem.CurrentSave.Language = lang;
+                    SaveSystem.SaveGame();
+                    Console.WriteLine("{RES_LANGUAGE_CHANGED}");
+                    return true;
+                }
+
+                throw new Exception("{ERR_NOLANG}");
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        [Command("commands", "", "{DESC_COMMANDS}")]
+        public static bool Commands()
+        {
+            var sb = new StringBuilder();
+            sb.AppendLine("{GEN_COMMANDS}");
+            sb.AppendLine("=================");
+            sb.AppendLine();
+            //print all unique namespaces.
+            foreach (var n in TerminalBackend.Commands.Where(x => !(x is TerminalBackend.WinOpenCommand) && Shiftorium.UpgradeInstalled(x.Dependencies) && x.CommandInfo.hide == false).OrderBy(x => x.CommandInfo.name))
+            {
+                sb.Append(n.CommandInfo.name);
+                if (!string.IsNullOrWhiteSpace(n.CommandInfo.description))
+                    if (Shiftorium.UpgradeInstalled("help_description"))
+                        sb.Append(" - " + n.CommandInfo.description);
+                sb.AppendLine();
+            }
+
+            Console.WriteLine(sb.ToString());
+
+            return true;
+        }
+
+        [Command("help", description = "{DESC_HELP}")]
+        public static bool Help()
+        {
+            Commands();
+            WindowCommands.Programs();
+            return true;
+        }
+
+
+        [MultiplayerOnly]
+        [Command("save", description = "{DESC_SAVE}")]
+        public static bool Save()
+        {
+            SaveSystem.SaveGame();
+            return true;
+        }
+
+        [MultiplayerOnly]
+        [Command("status", description = "{DESC_STATUS}")]
+        public static bool Status()
+        {
+            string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
+
+           string cp = SaveSystem.CurrentSave.Codepoints.ToString();
+           string installed = SaveSystem.CurrentSave.CountUpgrades().ToString();
+            string available = Shiftorium.GetAvailable().Length.ToString();
+
+            Console.WriteLine(Localization.Parse("{COM_STATUS}", new Dictionary<string, string>
+            {
+                ["%cp"] = cp,
+                ["%version"] = version,
+                ["%installed"] = installed,
+                ["%available"] = available
+            }));
+            Console.WriteLine("{GEN_OBJECTIVES}");
+            try
+            {
+                if (Story.CurrentObjectives.Count > 0)
+                {
+                    foreach (var obj in Story.CurrentObjectives)
+                    {
+                        Console.WriteLine(obj.Name);
+                        Console.WriteLine("-------------------------------");
+                        Console.WriteLine();
+                        Console.WriteLine(obj.Description);
+                    }
+                }
+                else
+                {
+                    Console.WriteLine("{RES_NOOBJECTIVES}");
+                }
+            }
+            catch
+            {
+                Console.WriteLine("{RES_NOOBJECTIVES}");
+            }
+            return true;
+        }
+    }
+
+    [MultiplayerOnly]
+    public static class ShiftoriumCommands
+    {
+        [Command("buy", description = "{DESC_BUY}")]
+        [RequiresArgument("upgrade")]
+        public static bool BuyUpgrade(Dictionary<string, object> userArgs)
+        {
+            try
+            {
+                string upgrade = "";
+
+                upgrade = (string)userArgs["upgrade"];
+
+                var upg = Shiftorium.GetAvailable().FirstOrDefault(x => x.ID == upgrade);
+                if(upg != null)
+                {
+                    if (Shiftorium.Buy(upg.ID, upg.Cost) == true)
+                        Console.WriteLine("{RES_UPGRADEINSTALLED}");
+                    else
+                        Console.WriteLine("{ERR_NOTENOUGHCODEPOINTS}");
+                }
+                else
+                {
+                    Console.WriteLine("{ERR_NOUPGRADE}");
+                }
+
+            }
+            catch
+            {
+                Console.WriteLine("{ERR_GENERAL}");
+            }
+            return true;
+        }
+
+        [RequiresUpgrade("shiftorium_bulk_buy")]
+        [Command("bulkbuy", description = "{DESC_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);
+                }
+            }
+            return true;
+        }
+
+
+        [Command("upgradeinfo", description ="{DESC_UPGRADEINFO}")]
+        [RequiresArgument("upgrade")]
+        public static bool ViewInfo(Dictionary<string, object> userArgs)
+        {
+            try
+            {
+                string upgrade = "";
+
+                upgrade = (string)userArgs["upgrade"];
+
+                foreach (var upg in Shiftorium.GetDefaults())
+                {
+                    if (upg.ID == upgrade)
+                    {
+                        Console.WriteLine(Localization.Parse("{COM_UPGRADEINFO}", new Dictionary<string, string>
+                        {
+                            ["%id"] = upg.ID,
+                            ["%category"] = upg.Category,
+                            ["%name"] = upg.Name,
+                            ["%cost"] = upg.Cost.ToString(),
+                            ["%description"] = upg.Description
+                        }));
+
+                        return true;
+                    }
+                }
+
+                throw new Exception("{ERR_NOUPGRADE}");
+            }
+            catch
+            {
+                return false;
+            }
+        }
+
+        [Command("upgradecategories", description = "{DESC_UPGRADECATEGORIES}")]
+        public static bool ListCategories()
+        {
+            foreach(var cat in Shiftorium.GetCategories())
+            {
+                Console.WriteLine(Localization.Parse("{SHFM_CATEGORY}", new Dictionary<string, string>
+                {
+                    ["%name"] = cat,
+                    ["%available"] = Shiftorium.GetAvailable().Where(x=>x.Category==cat).Count().ToString()
+                }));
+            }
+            return true;
+        }
+
+        [Command("upgrades", description ="{DESC_UPGRADES}")]
+        public static bool ListAll(Dictionary<string, object> args)
+        {
+            try
+            {
+                bool showOnlyInCategory = false;
+
+                string cat = "Other";
+
+                if (args.ContainsKey("cat"))
+                {
+                    showOnlyInCategory = true;
+                    cat = args["cat"].ToString();
+                }
+
+                Dictionary<string, ulong> upgrades = new Dictionary<string, ulong>();
+                int maxLength = 5;
+
+                IEnumerable<ShiftoriumUpgrade> upglist = Shiftorium.GetAvailable();
+                if (showOnlyInCategory)
+                {
+                    if (Shiftorium.IsCategoryEmptied(cat))
+                    {
+                        ConsoleEx.Bold = true;
+                        ConsoleEx.ForegroundColor = ConsoleColor.Red;
+                        Console.WriteLine("{SHFM_QUERYERROR}");
+                        Console.WriteLine();
+                        ConsoleEx.Bold = false;
+                        ConsoleEx.ForegroundColor = ConsoleColor.Gray;
+                        Console.WriteLine("{ERR_EMPTYCATEGORY}");
+                        return true;
+                    }
+                    upglist = Shiftorium.GetAvailable().Where(x => x.Category == cat);
+                }
+
+
+                if(upglist.Count() == 0)
+                {
+                    ConsoleEx.Bold = true;
+                    ConsoleEx.ForegroundColor = ConsoleColor.Red;
+                    Console.WriteLine("{SHFM_NOUPGRADES}");
+                    Console.WriteLine();
+                    ConsoleEx.Bold = false;
+                    ConsoleEx.ForegroundColor = ConsoleColor.Gray;
+                    Console.WriteLine("{ERR_NOMOREUPGRADES}");
+                    return true;
+
+                }
+                foreach (var upg in upglist)
+                {
+                    if (upg.ID.Length > maxLength)
+                    {
+                        maxLength = upg.ID.Length;
+                    }
+
+                    upgrades.Add(upg.ID, upg.Cost);
+                }
+
+                foreach (var upg in upgrades)
+                {
+                    Console.WriteLine(Localization.Parse("{SHFM_UPGRADE}", new Dictionary<string, string>
+                    {
+                        ["%id"] = upg.Key,
+                        ["%cost"] = upg.Value.ToString()
+                    }));
+                }
+                return true;
+            }
+            catch (Exception e)
+            {
+                CrashHandler.Start(e);
+                return false;
+            }
+        }
+    }
+
+    public static class WindowCommands
+    {
+        [RemoteLock]
+        [Command("processes", description = "{DESC_PROCESSES}")]
+        public static bool List()
+        {
+            Console.WriteLine("{GEN_CURRENTPROCESSES}");
+            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;
+        }
+
+        [Command("programs", description = "{DESC_PROGRAMS}")]
+        public static bool Programs()
+        {
+            Console.WriteLine("{GEN_PROGRAMS}");
+            Console.WriteLine("===============");
+            Console.WriteLine();
+            foreach(var cmd in TerminalBackend.Commands.Where(x=>x is TerminalBackend.WinOpenCommand && Shiftorium.UpgradeInstalled(x.Dependencies)).OrderBy(x => x.CommandInfo.name))
+            {
+                Console.Write(" - " + cmd.CommandInfo.name);
+                if (!string.IsNullOrWhiteSpace(cmd.CommandInfo.description))
+                    if (Shiftorium.UpgradeInstalled("help_description"))
+                        Console.Write(": " + cmd.CommandInfo.description);
+                Console.WriteLine();
+            }
+            return true;
+        }
+
+        [RemoteLock]
+        [Command("close", usage = "{win:integer32}", description ="{DESC_CLOSE}")]
+        [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 = Localization.Parse("{ERR_BADWINID}", new Dictionary<string, string>
+                {
+                    ["%max"] = (AppearanceManager.OpenForms.Count - 1).ToString()
+                });
+
+            if (string.IsNullOrEmpty(err))
+            {
+                Console.WriteLine("{RES_WINDOWCLOSED}");
+                AppearanceManager.Close(AppearanceManager.OpenForms[winNum].ParentWindow);
+            }
+            else
+            {
+                Console.WriteLine(err);
+            }
+
+            return true;
+        }
+
+    }
+}
diff --git a/ShiftOS_TheReturn/AppearanceManager.cs b/ShiftOS_TheReturn/AppearanceManager.cs
index 76060dd..47aa5fb 100644
--- a/ShiftOS_TheReturn/AppearanceManager.cs
+++ b/ShiftOS_TheReturn/AppearanceManager.cs
@@ -166,7 +166,7 @@ namespace ShiftOS.Engine
         public static event EmptyEventHandler OnExit;
 
         // Starts the engine's exit routine, firing the OnExit event.
-        internal static void Exit()
+        public static void Exit()
         {
             OnExit?.Invoke();
             //disconnect from MUD
diff --git a/ShiftOS_TheReturn/Commands.cs b/ShiftOS_TheReturn/Commands.cs
deleted file mode 100644
index 3a2b79a..0000000
--- a/ShiftOS_TheReturn/Commands.cs
+++ /dev/null
@@ -1,473 +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 ShiftOS.Engine.Scripting;
-using ShiftOS.Objects.ShiftFS;
-
-namespace ShiftOS.Engine
-{
-    [TutorialLock]
-    public static class TerminalCommands
-    {
-        [Command("clear", description = "{DESC_CLEAR}")]
-        public static bool Clear()
-        {
-            AppearanceManager.ConsoleOut.Clear();
-            return true;
-        }
-    }
-
-    public static class ShiftOSCommands
-    {
-
-        [Command("setsfxenabled", description = "{DESC_SETSFXENABLED}")]
-        [RequiresArgument("value")]
-        public static bool SetSfxEnabled(Dictionary<string, object> args)
-        {
-            try
-            {
-                bool value = Convert.ToBoolean(args["value"].ToString());
-                SaveSystem.CurrentSave.SoundEnabled = value;
-                SaveSystem.SaveGame();
-            }
-            catch
-            {
-                Console.WriteLine("{ERR_BADBOOL}");
-            }
-            return true;
-        }
-
-
-
-        [Command("setmusicenabled", description = "{DESC_SETMUSICENABLED}")]
-        [RequiresArgument("value")]
-        public static bool SetMusicEnabled(Dictionary<string, object> args)
-        {
-            try
-            {
-                bool value = Convert.ToBoolean(args["value"].ToString());
-                SaveSystem.CurrentSave.MusicEnabled = value;
-                SaveSystem.SaveGame();
-            }
-            catch
-            {
-                Console.WriteLine("{ERR_BADBOOL}");
-            }
-            return true;
-        }
-
-        
-
-        [Command("setvolume", description ="{DESC_SETVOLUME}")]
-        [RequiresArgument("value")]
-        public static bool SetSfxVolume(Dictionary<string, object> args)
-        {
-            int value = int.Parse(args["value"].ToString());
-            if(value >= 0 && value <= 100)
-            {
-                SaveSystem.CurrentSave.MusicVolume = value;
-                SaveSystem.SaveGame();
-            }
-            else
-            {
-                Console.WriteLine("{ERR_BADPERCENT}");
-            }
-            return true;
-        }
-
-        [RemoteLock]
-        [Command("shutdown", description = "{DESC_SHUTDOWN}")]
-        public static bool Shutdown()
-        {
-            TerminalBackend.InvokeCommand("sos.save");
-            AppearanceManager.Exit();
-            return true;
-        }
-
-        [Command("lang", description = "{DESC_LANG}")]
-        [RequiresArgument("language")]
-        public static bool SetLanguage(Dictionary<string, object> userArgs)
-        {
-            try
-            {
-                string lang = "";
-
-                lang = (string)userArgs["language"];
-                
-                if (Localization.GetAllLanguages().Contains(lang))
-                {
-                    SaveSystem.CurrentSave.Language = lang;
-                    SaveSystem.SaveGame();
-                    Console.WriteLine("{RES_LANGUAGE_CHANGED}");
-                    return true;
-                }
-
-                throw new Exception("{ERR_NOLANG}");
-            }
-            catch
-            {
-                return false;
-            }
-        }
-
-        [Command("commands", "", "{DESC_COMMANDS}")]
-        public static bool Commands()
-        {
-            var sb = new StringBuilder();
-            sb.AppendLine("{GEN_COMMANDS}");
-            sb.AppendLine("=================");
-            sb.AppendLine();
-            //print all unique namespaces.
-            foreach (var n in TerminalBackend.Commands.Where(x => !(x is TerminalBackend.WinOpenCommand) && Shiftorium.UpgradeInstalled(x.Dependencies) && x.CommandInfo.hide == false).OrderBy(x => x.CommandInfo.name))
-            {
-                sb.Append(n.CommandInfo.name);
-                if (!string.IsNullOrWhiteSpace(n.CommandInfo.description))
-                    if (Shiftorium.UpgradeInstalled("help_description"))
-                        sb.Append(" - " + n.CommandInfo.description);
-                sb.AppendLine();
-            }
-
-            Console.WriteLine(sb.ToString());
-
-            return true;
-        }
-
-        [Command("help", description = "{DESC_HELP}")]
-        public static bool Help()
-        {
-            Commands();
-            WindowCommands.Programs();
-            return true;
-        }
-
-
-        [MultiplayerOnly]
-        [Command("save", description = "{DESC_SAVE}")]
-        public static bool Save()
-        {
-            SaveSystem.SaveGame();
-            return true;
-        }
-
-        [MultiplayerOnly]
-        [Command("status", description = "{DESC_STATUS}")]
-        public static bool Status()
-        {
-            string version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
-
-           string cp = SaveSystem.CurrentSave.Codepoints.ToString();
-           string installed = SaveSystem.CurrentSave.CountUpgrades().ToString();
-            string available = Shiftorium.GetAvailable().Length.ToString();
-
-            Console.WriteLine(Localization.Parse("{COM_STATUS}", new Dictionary<string, string>
-            {
-                ["%cp"] = cp,
-                ["%version"] = version,
-                ["%installed"] = installed,
-                ["%available"] = available
-            }));
-            Console.WriteLine("{GEN_OBJECTIVES}");
-            try
-            {
-                if (Story.CurrentObjectives.Count > 0)
-                {
-                    foreach (var obj in Story.CurrentObjectives)
-                    {
-                        Console.WriteLine(obj.Name);
-                        Console.WriteLine("-------------------------------");
-                        Console.WriteLine();
-                        Console.WriteLine(obj.Description);
-                    }
-                }
-                else
-                {
-                    Console.WriteLine("{RES_NOOBJECTIVES}");
-                }
-            }
-            catch
-            {
-                Console.WriteLine("{RES_NOOBJECTIVES}");
-            }
-            return true;
-        }
-    }
-
-    [MultiplayerOnly]
-    public static class ShiftoriumCommands
-    {
-        [Command("buy", description = "{DESC_BUY}")]
-        [RequiresArgument("upgrade")]
-        public static bool BuyUpgrade(Dictionary<string, object> userArgs)
-        {
-            try
-            {
-                string upgrade = "";
-
-                upgrade = (string)userArgs["upgrade"];
-
-                var upg = Shiftorium.GetAvailable().FirstOrDefault(x => x.ID == upgrade);
-                if(upg != null)
-                {
-                    if (Shiftorium.Buy(upg.ID, upg.Cost) == true)
-                        Console.WriteLine("{RES_UPGRADEINSTALLED}");
-                    else
-                        Console.WriteLine("{ERR_NOTENOUGHCODEPOINTS}");
-                }
-                else
-                {
-                    Console.WriteLine("{ERR_NOUPGRADE}");
-                }
-
-            }
-            catch
-            {
-                Console.WriteLine("{ERR_GENERAL}");
-            }
-            return true;
-        }
-
-        [RequiresUpgrade("shiftorium_bulk_buy")]
-        [Command("bulkbuy", description = "{DESC_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);
-                }
-            }
-            return true;
-        }
-
-
-        [Command("upgradeinfo", description ="{DESC_UPGRADEINFO}")]
-        [RequiresArgument("upgrade")]
-        public static bool ViewInfo(Dictionary<string, object> userArgs)
-        {
-            try
-            {
-                string upgrade = "";
-
-                upgrade = (string)userArgs["upgrade"];
-
-                foreach (var upg in Shiftorium.GetDefaults())
-                {
-                    if (upg.ID == upgrade)
-                    {
-                        Console.WriteLine(Localization.Parse("{COM_UPGRADEINFO}", new Dictionary<string, string>
-                        {
-                            ["%id"] = upg.ID,
-                            ["%category"] = upg.Category,
-                            ["%name"] = upg.Name,
-                            ["%cost"] = upg.Cost.ToString(),
-                            ["%description"] = upg.Description
-                        }));
-
-                        return true;
-                    }
-                }
-
-                throw new Exception("{ERR_NOUPGRADE}");
-            }
-            catch
-            {
-                return false;
-            }
-        }
-
-        [Command("upgradecategories", description = "{DESC_UPGRADECATEGORIES}")]
-        public static bool ListCategories()
-        {
-            foreach(var cat in Shiftorium.GetCategories())
-            {
-                Console.WriteLine(Localization.Parse("{SHFM_CATEGORY}", new Dictionary<string, string>
-                {
-                    ["%name"] = cat,
-                    ["%available"] = Shiftorium.GetAvailable().Where(x=>x.Category==cat).Count().ToString()
-                }));
-            }
-            return true;
-        }
-
-        [Command("upgrades", description ="{DESC_UPGRADES}")]
-        public static bool ListAll(Dictionary<string, object> args)
-        {
-            try
-            {
-                bool showOnlyInCategory = false;
-
-                string cat = "Other";
-
-                if (args.ContainsKey("cat"))
-                {
-                    showOnlyInCategory = true;
-                    cat = args["cat"].ToString();
-                }
-
-                Dictionary<string, ulong> upgrades = new Dictionary<string, ulong>();
-                int maxLength = 5;
-
-                IEnumerable<ShiftoriumUpgrade> upglist = Shiftorium.GetAvailable();
-                if (showOnlyInCategory)
-                {
-                    if (Shiftorium.IsCategoryEmptied(cat))
-                    {
-                        ConsoleEx.Bold = true;
-                        ConsoleEx.ForegroundColor = ConsoleColor.Red;
-                        Console.WriteLine("{SHFM_QUERYERROR}");
-                        Console.WriteLine();
-                        ConsoleEx.Bold = false;
-                        ConsoleEx.ForegroundColor = ConsoleColor.Gray;
-                        Console.WriteLine("{ERR_EMPTYCATEGORY}");
-                        return true;
-                    }
-                    upglist = Shiftorium.GetAvailable().Where(x => x.Category == cat);
-                }
-
-
-                if(upglist.Count() == 0)
-                {
-                    ConsoleEx.Bold = true;
-                    ConsoleEx.ForegroundColor = ConsoleColor.Red;
-                    Console.WriteLine("{SHFM_NOUPGRADES}");
-                    Console.WriteLine();
-                    ConsoleEx.Bold = false;
-                    ConsoleEx.ForegroundColor = ConsoleColor.Gray;
-                    Console.WriteLine("{ERR_NOMOREUPGRADES}");
-                    return true;
-
-                }
-                foreach (var upg in upglist)
-                {
-                    if (upg.ID.Length > maxLength)
-                    {
-                        maxLength = upg.ID.Length;
-                    }
-
-                    upgrades.Add(upg.ID, upg.Cost);
-                }
-
-                foreach (var upg in upgrades)
-                {
-                    Console.WriteLine(Localization.Parse("{SHFM_UPGRADE}", new Dictionary<string, string>
-                    {
-                        ["%id"] = upg.Key,
-                        ["%cost"] = upg.Value.ToString()
-                    }));
-                }
-                return true;
-            }
-            catch (Exception e)
-            {
-                CrashHandler.Start(e);
-                return false;
-            }
-        }
-    }
-
-    public static class WindowCommands
-    {
-        [RemoteLock]
-        [Command("processes", description = "{DESC_PROCESSES}")]
-        public static bool List()
-        {
-            Console.WriteLine("{GEN_CURRENTPROCESSES}");
-            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;
-        }
-
-        [Command("programs", description = "{DESC_PROGRAMS}")]
-        public static bool Programs()
-        {
-            Console.WriteLine("{GEN_PROGRAMS}");
-            Console.WriteLine("===============");
-            Console.WriteLine();
-            foreach(var cmd in TerminalBackend.Commands.Where(x=>x is TerminalBackend.WinOpenCommand && Shiftorium.UpgradeInstalled(x.Dependencies)).OrderBy(x => x.CommandInfo.name))
-            {
-                Console.Write(" - " + cmd.CommandInfo.name);
-                if (!string.IsNullOrWhiteSpace(cmd.CommandInfo.description))
-                    if (Shiftorium.UpgradeInstalled("help_description"))
-                        Console.Write(": " + cmd.CommandInfo.description);
-                Console.WriteLine();
-            }
-            return true;
-        }
-
-        [RemoteLock]
-        [Command("close", usage = "{win:integer32}", description ="{DESC_CLOSE}")]
-        [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 = Localization.Parse("{ERR_BADWINID}", new Dictionary<string, string>
-                {
-                    ["%max"] = (AppearanceManager.OpenForms.Count - 1).ToString()
-                });
-
-            if (string.IsNullOrEmpty(err))
-            {
-                Console.WriteLine("{RES_WINDOWCLOSED}");
-                AppearanceManager.Close(AppearanceManager.OpenForms[winNum].ParentWindow);
-            }
-            else
-            {
-                Console.WriteLine(err);
-            }
-
-            return true;
-        }
-
-    }
-}
diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
index 5d434fc..66d2747 100644
--- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj
+++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
@@ -124,7 +124,6 @@
     <Compile Include="AudioManager.cs" />
     <Compile Include="BFInterpreter.cs" />
     <Compile Include="CommandParser.cs" />
-    <Compile Include="Commands.cs" />
     <Compile Include="Command.cs" />
     <Compile Include="ConsoleEx.cs" />
     <Compile Include="CrashHandler.cs" />