diff --git a/.editorconfig b/.editorconfig
index 5f6c95ed..9270fbad 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -114,4 +114,11 @@ csharp_space_between_method_call_name_and_opening_parenthesis = false
 csharp_space_between_method_call_empty_parameter_list_parentheses = false
 # Wrapping preferences
 csharp_preserve_single_line_statements = true
-csharp_preserve_single_line_blocks = true
\ No newline at end of file
+csharp_preserve_single_line_blocks = true
+###############################
+# C# Async Rules              #
+###############################
+# CS4014: Task not awaited
+dotnet_diagnostic.CS4014.severity = error
+# CS1998: Async function does not contain await
+dotnet_diagnostic.CS1998.severity = silent
\ No newline at end of file
diff --git a/Compression.BSA.Test/Compression.BSA.Test.csproj b/Compression.BSA.Test/Compression.BSA.Test.csproj
index 122ede28..5360265d 100644
--- a/Compression.BSA.Test/Compression.BSA.Test.csproj
+++ b/Compression.BSA.Test/Compression.BSA.Test.csproj
@@ -1,115 +1,28 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
+
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{9C004392-571A-4D28-A9F6-0E25115E6727}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Compression.BSA.Test</RootNamespace>
-    <AssemblyName>Compression.BSA.Test</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
-    <IsCodedUITest>False</IsCodedUITest>
-    <TestProjectType>UnitTest</TestProjectType>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
-    <TargetFrameworkProfile />
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Platforms>AnyCPU;x64</Platforms>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <PlatformTarget>x64</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
   </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <PlatformTarget>x64</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
   </PropertyGroup>
+
   <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Transactions" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
   </ItemGroup>
+
   <ItemGroup>
-    <Compile Include="BSATests.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
+    <ProjectReference Include="..\Compression.BSA\Compression.BSA.csproj" />
+    <ProjectReference Include="..\Wabbajack.Common.CSP\Wabbajack.Common.CSP.csproj" />
+    <ProjectReference Include="..\Wabbajack.Common\Wabbajack.Common.csproj" />
+    <ProjectReference Include="..\Wabbajack.Lib\Wabbajack.Lib.csproj" />
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="$(SolutionDir)\Compression.BSA\Compression.BSA.csproj">
-      <Project>{ff5d892f-8ff4-44fc-8f7f-cd58f307ad1b}</Project>
-      <Name>Compression.BSA</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common.CSP\Wabbajack.Common.CSP.csproj">
-      <Project>{9e69bc98-1512-4977-b683-6e7e5292c0b8}</Project>
-      <Name>Wabbajack.Common.CSP</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common\Wabbajack.Common.csproj">
-      <Project>{b3f3fb6e-b9eb-4f49-9875-d78578bc7ae5}</Project>
-      <Name>Wabbajack.Common</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Lib\Wabbajack.Lib.csproj">
-      <Project>{0a820830-a298-497d-85e0-e9a89efef5fe}</Project>
-      <Name>Wabbajack.Lib</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <PackageReference Include="AlphaFS">
-      <Version>2.2.6</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestAdapter">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestFramework">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-  </ItemGroup>
-  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
+
+</Project>
diff --git a/Compression.BSA.Test/Properties/AssemblyInfo.cs b/Compression.BSA.Test/Properties/AssemblyInfo.cs
deleted file mode 100644
index dce4f092..00000000
--- a/Compression.BSA.Test/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("Compression.BSA.Test")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Compression.BSA.Test")]
-[assembly: AssemblyCopyright("Copyright ©  2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-[assembly: Guid("9c004392-571a-4d28-a9f6-0e25115e6727")]
-
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Compression.BSA/Compression.BSA.csproj b/Compression.BSA/Compression.BSA.csproj
index ff02e115..6b832c67 100644
--- a/Compression.BSA/Compression.BSA.csproj
+++ b/Compression.BSA/Compression.BSA.csproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
-        <TargetFramework>netstandard2.0</TargetFramework>
+        <TargetFramework>netstandard2.1</TargetFramework>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
         <Platforms>AnyCPU;x64</Platforms>
     </PropertyGroup>
diff --git a/OMODExtractor/OMODExtractor.csproj b/OMODExtractor/OMODExtractor.csproj
index 541e12df..86b13bd8 100644
--- a/OMODExtractor/OMODExtractor.csproj
+++ b/OMODExtractor/OMODExtractor.csproj
@@ -1,7 +1,7 @@
-<Project Sdk="Microsoft.NET.Sdk">
+<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <TargetFramework>netstandard2.0</TargetFramework>
+    <TargetFramework>netstandard2.1</TargetFramework>
     <Platforms>AnyCPU;x64</Platforms>
   </PropertyGroup>
 
diff --git a/Wabbajack.Common.CSP/Wabbajack.Common.CSP.csproj b/Wabbajack.Common.CSP/Wabbajack.Common.CSP.csproj
index 2166bcc6..d30afeb1 100644
--- a/Wabbajack.Common.CSP/Wabbajack.Common.CSP.csproj
+++ b/Wabbajack.Common.CSP/Wabbajack.Common.CSP.csproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
-        <TargetFramework>netstandard2.0</TargetFramework>
+        <TargetFramework>netstandard2.1</TargetFramework>
         <Platforms>AnyCPU;x64</Platforms>
     </PropertyGroup>
     <ItemGroup>
diff --git a/Wabbajack.Common/Utils.cs b/Wabbajack.Common/Utils.cs
index 9fef51af..bcfd5f59 100644
--- a/Wabbajack.Common/Utils.cs
+++ b/Wabbajack.Common/Utils.cs
@@ -1123,24 +1123,27 @@ namespace Wabbajack.Common
                 File.Delete(path);
         }
 
+        public static void StartProcessFromFile(string file)
+        {
+            Process.Start(new ProcessStartInfo("cmd.exe", $"/c {file}")
+            {
+                CreateNoWindow = true,
+            });
+        }
+
+        public static void OpenWebsite(string url)
+        {
+            Process.Start(new ProcessStartInfo("cmd.exe", $"/c start {url}")
+            {
+                CreateNoWindow = true,
+            });
+        }
 
         public static bool IsInPath(this string path, string parent)
         {
             return path.ToLower().TrimEnd('\\').StartsWith(parent.ToLower().TrimEnd('\\') + "\\");
         }
 
-        public static HashSet<T> ToHashSet<T>(this IEnumerable<T> coll)
-        {
-            return new HashSet<T>(coll);
-        }
-        
-        public static HashSet<T> ToHashSet<T>(this T[] coll)
-        {
-            var hs = new HashSet<T>();
-            coll.Do(v => hs.Add(v));
-            return hs;
-        }
-
         public class NexusErrorResponse
         {
             public int code;
diff --git a/Wabbajack.Common/Wabbajack.Common.csproj b/Wabbajack.Common/Wabbajack.Common.csproj
index a58cb173..5bc9a28b 100644
--- a/Wabbajack.Common/Wabbajack.Common.csproj
+++ b/Wabbajack.Common/Wabbajack.Common.csproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
-        <TargetFramework>netstandard2.0</TargetFramework>
+        <TargetFramework>netstandard2.1</TargetFramework>
         <Platforms>AnyCPU;x64</Platforms>
     </PropertyGroup>
     <ItemGroup>
diff --git a/Wabbajack.Lib/ACompiler.cs b/Wabbajack.Lib/ACompiler.cs
index 04c72228..c69cce78 100644
--- a/Wabbajack.Lib/ACompiler.cs
+++ b/Wabbajack.Lib/ACompiler.cs
@@ -40,8 +40,6 @@ namespace Wabbajack.Lib
         public abstract string ModListOutputFolder { get; }
         public abstract string ModListOutputFile { get; }
 
-        public bool ShowReportWhenFinished { get; set; } = true;
-
         public bool IgnoreMissingFiles { get; set; }
 
         public ICollection<Archive> SelectedArchives = new List<Archive>();
@@ -161,15 +159,6 @@ namespace Wabbajack.Lib
             Utils.DeleteDirectory(ModListOutputFolder);
         }
 
-        public void ShowReport()
-        {
-            if (!ShowReportWhenFinished) return;
-
-            var file = Path.GetTempFileName() + ".html";
-            File.WriteAllText(file, ModList.ReportHTML);
-            Process.Start(file);
-        }
-
         public void GenerateReport()
         {
             string css;
diff --git a/Wabbajack.Lib/MO2Compiler.cs b/Wabbajack.Lib/MO2Compiler.cs
index 2338ff67..ca055bfd 100644
--- a/Wabbajack.Lib/MO2Compiler.cs
+++ b/Wabbajack.Lib/MO2Compiler.cs
@@ -291,8 +291,6 @@ namespace Wabbajack.Lib
 
             ResetMembers();
 
-            ShowReport();
-
             UpdateTracker.NextStep("Done Building Modlist");
 
             return true;
diff --git a/Wabbajack.Lib/VortexCompiler.cs b/Wabbajack.Lib/VortexCompiler.cs
index 6024dde5..cd3cb7ab 100644
--- a/Wabbajack.Lib/VortexCompiler.cs
+++ b/Wabbajack.Lib/VortexCompiler.cs
@@ -255,8 +255,6 @@ namespace Wabbajack.Lib
 
             ResetMembers();
 
-            ShowReport();
-
             UpdateTracker.NextStep("Done Building ModList");
 
             return true;
diff --git a/Wabbajack.Lib/Wabbajack.Lib.csproj b/Wabbajack.Lib/Wabbajack.Lib.csproj
index 1aab20d1..1572743e 100644
--- a/Wabbajack.Lib/Wabbajack.Lib.csproj
+++ b/Wabbajack.Lib/Wabbajack.Lib.csproj
@@ -1,13 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
-        <TargetFramework>netstandard2.0</TargetFramework>
+        <TargetFramework>netstandard2.1</TargetFramework>
         <Platforms>AnyCPU;x64</Platforms>
     </PropertyGroup>
-    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-      <NoWarn>1701;1702; CS1998</NoWarn>
-      <WarningsAsErrors>NU1605, CS4014</WarningsAsErrors>
-    </PropertyGroup>
     <ItemGroup>
       <PackageReference Include="CefSharp.Common">
         <Version>75.1.143</Version>
diff --git a/Wabbajack.Test/ACompilerTest.cs b/Wabbajack.Test/ACompilerTest.cs
index 75c3b1e2..776b2265 100644
--- a/Wabbajack.Test/ACompilerTest.cs
+++ b/Wabbajack.Test/ACompilerTest.cs
@@ -1,6 +1,5 @@
 using System;
 using System.Threading.Tasks;
-using System.Windows.Forms;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Wabbajack.Common;
 using Wabbajack.Lib;
@@ -39,7 +38,6 @@ namespace Wabbajack.Test
                 mo2Folder: utils.MO2Folder,
                 mo2Profile: profile,
                 outputFile: profile + Consts.ModListExtension);
-            compiler.ShowReportWhenFinished = false;
             Assert.IsTrue(await compiler.Begin());
             return compiler;
         }
diff --git a/Wabbajack.Test/EndToEndTests.cs b/Wabbajack.Test/EndToEndTests.cs
index b4dc76c2..f7717658 100644
--- a/Wabbajack.Test/EndToEndTests.cs
+++ b/Wabbajack.Test/EndToEndTests.cs
@@ -78,7 +78,6 @@ namespace Wabbajack.Test
                 mo2Profile: profile,
                 outputFile: profile + Consts.ModListExtension);
             compiler.MO2DownloadsFolder = Path.Combine(utils.DownloadsFolder);
-            compiler.ShowReportWhenFinished = false;
             Assert.IsTrue(await compiler.Begin());
 
         }
@@ -166,7 +165,6 @@ namespace Wabbajack.Test
                 mo2Folder: utils.MO2Folder,
                 mo2Profile: profile,
                 outputFile: profile + Consts.ModListExtension);
-            compiler.ShowReportWhenFinished = false;
             Assert.IsTrue(await compiler.Begin());
             return compiler;
         }
diff --git a/Wabbajack.Test/FilePickerTests.cs b/Wabbajack.Test/FilePickerTests.cs
index 5aff8958..4980af00 100644
--- a/Wabbajack.Test/FilePickerTests.cs
+++ b/Wabbajack.Test/FilePickerTests.cs
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
 using DynamicData;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Wabbajack.Common;
-using Wabbajack.Lib;
+using Wabbajack;
 
 namespace Wabbajack.Test
 {
diff --git a/Wabbajack.Test/Properties/AssemblyInfo.cs b/Wabbajack.Test/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7bd02376..00000000
--- a/Wabbajack.Test/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("Wabbajack.Test")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Wabbajack.Test")]
-[assembly: AssemblyCopyright("Copyright ©  2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-[assembly: Guid("a47fff32-782b-4d9f-8704-c98fb32fa8cc")]
-
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Wabbajack.Test/Wabbajack.Common.Tests/ChannelStreamsTests.cs b/Wabbajack.Test/Wabbajack.Common.Tests/ChannelStreamsTests.cs
deleted file mode 100644
index a53e0b7f..00000000
--- a/Wabbajack.Test/Wabbajack.Common.Tests/ChannelStreamsTests.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System;
-using System.Linq;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Wabbajack.Common;
-
-namespace Wabbajack.Test.Wabbajack.Common.Tests
-{
-    [TestClass]
-    public class ChannelStreamsTests
-    {
-        [TestMethod]
-        public void ToAndFromChannel()
-        {
-            var src = Enumerable.Range(0, 10).ToList();
-            var result = src.AsChannel().ToIEnumerable();
-            Assert.AreEqual(src, result);
-        }
-    }
-}
diff --git a/Wabbajack.Test/Wabbajack.Test.csproj b/Wabbajack.Test/Wabbajack.Test.csproj
index c781ad42..0f061a5b 100644
--- a/Wabbajack.Test/Wabbajack.Test.csproj
+++ b/Wabbajack.Test/Wabbajack.Test.csproj
@@ -1,200 +1,34 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
+
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Wabbajack.Test</RootNamespace>
-    <AssemblyName>Wabbajack.Test</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
-    <IsCodedUITest>False</IsCodedUITest>
-    <TestProjectType>UnitTest</TestProjectType>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
-    <TargetFrameworkProfile />
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <Platforms>AnyCPU;x64</Platforms>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <PlatformTarget>x64</PlatformTarget>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
   </PropertyGroup>
+
   <ItemGroup>
-    <Reference Include="CefSharp.Core, Version=75.1.143.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\Users\tbald\.nuget\packages\cefsharp.common\75.1.143\CefSharp\x64\CefSharp.Core.dll</HintPath>
-    </Reference>
-    <Reference Include="CefSharp.OffScreen, Version=75.1.143.0, Culture=neutral, PublicKeyToken=40c4b6fc221f4138, processorArchitecture=AMD64">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\Users\tbald\.nuget\packages\cefsharp.offscreen\75.1.143\CefSharp\x64\CefSharp.OffScreen.dll</HintPath>
-    </Reference>
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="PresentationCore" />
-    <Reference Include="PresentationFramework" />
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.IO.Compression" />
-    <Reference Include="System.IO.Compression.FileSystem" />
-    <Reference Include="System.Transactions" />
-    <Reference Include="System.Windows" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Windows.Presentation" />
-    <Reference Include="System.Xaml" />
-    <Reference Include="WindowsBase" />
+    <None Remove="Readme.md" />
   </ItemGroup>
+
   <ItemGroup>
-    <Compile Include="ABatchProcessorTests.cs" />
-    <Compile Include="ACompilerTest.cs" />
-    <Compile Include="AsyncLockTests.cs" />
-    <Compile Include="AVortexCompilerTest.cs" />
-    <Compile Include="CSP\ChannelTests.cs" />
-    <Compile Include="CSP\CSPTests.cs" />
-    <Compile Include="DownloaderTests.cs" />
-    <Compile Include="EndToEndTests.cs" />
-    <Compile Include="Extensions.cs" />
-    <Compile Include="FilePickerTests.cs" />
-    <Compile Include="IniTests.cs" />
-    <Compile Include="MiscTests.cs" />
-    <Compile Include="MO2Tests.cs" />
-    <Compile Include="ModlistMetadataTests.cs" />
-    <Compile Include="PMapTests.cs" />
-    <Compile Include="RestartingDownloadsTests.cs" />
-    <Compile Include="SimpleHTTPServer.cs" />
-    <Compile Include="TaskExtTests.cs" />
-    <Compile Include="TestUtils.cs" />
-    <Compile Include="SanityTests.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="ContentRightsManagementTests.cs" />
-    <Compile Include="CompilationStackTests.cs" />
-    <Compile Include="UtilsTests.cs" />
-    <Compile Include="VortexTests.cs" />
-    <Compile Include="WebAutomationTests.cs" />
-    <Compile Include="WorkQueueTests.cs" />
-    <Compile Include="zEditIntegrationTests.cs" />
+    <PackageReference Include="CefSharp.Common" Version="75.1.143" />
+    <PackageReference Include="CefSharp.OffScreen" Version="75.1.143" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
   </ItemGroup>
+
   <ItemGroup>
-    <None Include="app.config" />
+    <ProjectReference Include="..\Wabbajack.Common.CSP\Wabbajack.Common.CSP.csproj" />
+    <ProjectReference Include="..\Wabbajack.Common\Wabbajack.Common.csproj" />
+    <ProjectReference Include="..\Wabbajack.Lib\Wabbajack.Lib.csproj" />
+    <ProjectReference Include="..\Wabbajack\Wabbajack.csproj" />
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common.CSP\Wabbajack.Common.CSP.csproj">
-      <Project>{9e69bc98-1512-4977-b683-6e7e5292c0b8}</Project>
-      <Name>Wabbajack.Common.CSP</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common\Wabbajack.Common.csproj">
-      <Project>{b3f3fb6e-b9eb-4f49-9875-d78578bc7ae5}</Project>
-      <Name>Wabbajack.Common</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Lib\Wabbajack.Lib.csproj">
-      <Project>{0a820830-a298-497d-85e0-e9a89efef5fe}</Project>
-      <Name>Wabbajack.Lib</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack\Wabbajack.csproj">
-      <Project>{33602679-8484-40c7-a10c-774dff5d8314}</Project>
-      <Name>Wabbajack</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <PackageReference Include="AlphaFS">
-      <Version>2.2.6</Version>
-    </PackageReference>
-    <PackageReference Include="CefSharp.Common">
-      <Version>75.1.143</Version>
-    </PackageReference>
-    <PackageReference Include="CefSharp.OffScreen">
-      <Version>75.1.143</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestAdapter">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestFramework">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-    <PackageReference Include="Newtonsoft.Json">
-      <Version>12.0.3</Version>
-    </PackageReference>
-    <PackageReference Include="ReactiveUI">
-      <Version>11.1.12</Version>
-    </PackageReference>
-    <PackageReference Include="System.Reactive">
-      <Version>4.3.2</Version>
-    </PackageReference>
-  </ItemGroup>
-  <ItemGroup />
-  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
+
+</Project>
diff --git a/Wabbajack.Test/app.config b/Wabbajack.Test/app.config
deleted file mode 100644
index fb9aca2e..00000000
--- a/Wabbajack.Test/app.config
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Reactive" publicKeyToken="94bc3704cddfc263" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
diff --git a/Wabbajack.VirtualFileSystem.Test/Properties/AssemblyInfo.cs b/Wabbajack.VirtualFileSystem.Test/Properties/AssemblyInfo.cs
deleted file mode 100644
index 6e7a9eaf..00000000
--- a/Wabbajack.VirtualFileSystem.Test/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-[assembly: AssemblyTitle("Wabbajack.VirtualFileSystem.Test")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Wabbajack.VirtualFileSystem.Test")]
-[assembly: AssemblyCopyright("Copyright ©  2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-[assembly: ComVisible(false)]
-
-[assembly: Guid("51ceb604-985a-45b9-af0d-c5ba8cfa1bf0")]
-
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
\ No newline at end of file
diff --git a/Wabbajack.VirtualFileSystem.Test/Wabbajack.VirtualFileSystem.Test.csproj b/Wabbajack.VirtualFileSystem.Test/Wabbajack.VirtualFileSystem.Test.csproj
index 5791589c..3b5cbba2 100644
--- a/Wabbajack.VirtualFileSystem.Test/Wabbajack.VirtualFileSystem.Test.csproj
+++ b/Wabbajack.VirtualFileSystem.Test/Wabbajack.VirtualFileSystem.Test.csproj
@@ -1,114 +1,17 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk">
+
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>Wabbajack.VirtualFileSystem.Test</RootNamespace>
-    <AssemblyName>Wabbajack.VirtualFileSystem.Test</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
-    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
-    <ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
-    <IsCodedUITest>False</IsCodedUITest>
-    <TestProjectType>UnitTest</TestProjectType>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
-    <TargetFrameworkProfile />
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
+    <TargetFramework>netstandard2.1</TargetFramework>
+    <Platforms>AnyCPU;x64</Platforms>
   </PropertyGroup>
+
   <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.IO.Compression.FileSystem" />
-    <Reference Include="System.Transactions" />
-    <Reference Include="System.Windows" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="WindowsBase" />
+    <PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
+    <PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
   </ItemGroup>
+
   <ItemGroup>
-    <Compile Include="VirtualFileSystemTests.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
+    <ProjectReference Include="..\Wabbajack.VirtualFileSystem\Wabbajack.VirtualFileSystem.csproj" />
   </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common\Wabbajack.Common.csproj">
-      <Project>{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}</Project>
-      <Name>Wabbajack.Common</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.VirtualFileSystem\Wabbajack.VirtualFileSystem.csproj">
-      <Project>{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}</Project>
-      <Name>Wabbajack.VirtualFileSystem</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <PackageReference Include="AlphaFS">
-      <Version>2.2.6</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestAdapter">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-    <PackageReference Include="MSTest.TestFramework">
-      <Version>2.1.0-beta2</Version>
-    </PackageReference>
-    <PackageReference Include="System.Reactive">
-      <Version>4.3.2</Version>
-    </PackageReference>
-  </ItemGroup>
-  <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-</Project>
\ No newline at end of file
+
+</Project>
diff --git a/Wabbajack.VirtualFileSystem/Wabbajack.VirtualFileSystem.csproj b/Wabbajack.VirtualFileSystem/Wabbajack.VirtualFileSystem.csproj
index 3fa805ef..92e30b17 100644
--- a/Wabbajack.VirtualFileSystem/Wabbajack.VirtualFileSystem.csproj
+++ b/Wabbajack.VirtualFileSystem/Wabbajack.VirtualFileSystem.csproj
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project Sdk="Microsoft.NET.Sdk">
     <PropertyGroup>
-        <TargetFramework>netstandard2.0</TargetFramework>
+        <TargetFramework>netstandard2.1</TargetFramework>
         <Platforms>AnyCPU;x64</Platforms>
     </PropertyGroup>
     <ItemGroup>
diff --git a/Wabbajack.sln b/Wabbajack.sln
index 6985cd89..d792eb39 100644
--- a/Wabbajack.sln
+++ b/Wabbajack.sln
@@ -5,8 +5,6 @@ VisualStudioVersion = 16.0.29102.190
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.Common", "Wabbajack.Common\Wabbajack.Common.csproj", "{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack", "Wabbajack\Wabbajack.csproj", "{33602679-8484-40C7-A10C-774DFF5D8314}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compression.BSA", "Compression.BSA\Compression.BSA.csproj", "{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4EDEF6CC-2F5C-439B-BEAF-9D03895099F1}"
@@ -20,233 +18,120 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
 		RECIPES.md = RECIPES.md
 	EndProjectSection
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.Test", "Wabbajack.Test\Wabbajack.Test.csproj", "{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.Lib", "Wabbajack.Lib\Wabbajack.Lib.csproj", "{0A820830-A298-497D-85E0-E9A89EFEF5FE}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Compression.BSA.Test", "Compression.BSA.Test\Compression.BSA.Test.csproj", "{9C004392-571A-4D28-A9F6-0E25115E6727}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.Common.CSP", "Wabbajack.Common.CSP\Wabbajack.Common.CSP.csproj", "{9E69BC98-1512-4977-B683-6E7E5292C0B8}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.VirtualFileSystem", "Wabbajack.VirtualFileSystem\Wabbajack.VirtualFileSystem.csproj", "{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.VirtualFileSystem.Test", "Wabbajack.VirtualFileSystem.Test\Wabbajack.VirtualFileSystem.Test.csproj", "{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OMODExtractor", "OMODExtractor\OMODExtractor.csproj", "{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wabbajack.BuildServer", "Wabbajack.BuildServer\Wabbajack.BuildServer.csproj", "{DE18D89E-39C5-48FD-8E42-16235E3C4593}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.BuildServer", "Wabbajack.BuildServer\Wabbajack.BuildServer.csproj", "{DE18D89E-39C5-48FD-8E42-16235E3C4593}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack", "Wabbajack\Wabbajack.csproj", "{6ED08CFB-B879-4B55-8741-663A4A3491CE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Compression.BSA.Test", "Compression.BSA.Test\Compression.BSA.Test.csproj", "{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.VirtualFileSystem.Test", "Wabbajack.VirtualFileSystem.Test\Wabbajack.VirtualFileSystem.Test.csproj", "{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wabbajack.Test", "Wabbajack.Test\Wabbajack.Test.csproj", "{81F87B8B-D5CE-4807-9005-38DE95BD7840}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug (no commandargs)|Any CPU = Debug (no commandargs)|Any CPU
-		Debug (no commandargs)|x64 = Debug (no commandargs)|x64
-		Debug (no commandargs)|x86 = Debug (no commandargs)|x86
 		Debug|Any CPU = Debug|Any CPU
 		Debug|x64 = Debug|x64
-		Debug|x86 = Debug|x86
 		Release|Any CPU = Release|Any CPU
 		Release|x64 = Release|x64
-		Release|x86 = Release|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x64.Build.0 = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x86.Build.0 = Debug|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|Any CPU.ActiveCfg = Release|x64
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|Any CPU.Build.0 = Release|x64
+		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x64.ActiveCfg = Debug|x64
+		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Debug|x64.Build.0 = Debug|x64
+		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|Any CPU.Build.0 = Release|Any CPU
 		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|x64.ActiveCfg = Release|x64
 		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|x64.Build.0 = Release|x64
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|x86.ActiveCfg = Release|Any CPU
-		{B3F3FB6E-B9EB-4F49-9875-D78578BC7AE5}.Release|x86.Build.0 = Release|Any CPU
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug (no commandargs)|Any CPU
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|Any CPU.Build.0 = Debug (no commandargs)|Any CPU
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|x64.ActiveCfg = Debug (no commandargs)|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|x64.Build.0 = Debug (no commandargs)|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|x86.ActiveCfg = Debug (no commandargs)|x86
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug (no commandargs)|x86.Build.0 = Debug (no commandargs)|x86
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|x64.ActiveCfg = Debug|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|x64.Build.0 = Debug|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|x86.ActiveCfg = Debug|x86
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Debug|x86.Build.0 = Debug|x86
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|Any CPU.ActiveCfg = Release|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|Any CPU.Build.0 = Release|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|x64.ActiveCfg = Release|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|x64.Build.0 = Release|x64
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|x86.ActiveCfg = Release|x86
-		{33602679-8484-40C7-A10C-774DFF5D8314}.Release|x86.Build.0 = Release|x86
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x64.Build.0 = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x86.Build.0 = Debug|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|Any CPU.ActiveCfg = Release|x64
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|Any CPU.Build.0 = Release|x64
+		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x64.ActiveCfg = Debug|x64
+		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Debug|x64.Build.0 = Debug|x64
+		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|Any CPU.Build.0 = Release|Any CPU
 		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|x64.ActiveCfg = Release|x64
 		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|x64.Build.0 = Release|x64
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|x86.ActiveCfg = Release|Any CPU
-		{FF5D892F-8FF4-44FC-8F7F-CD58F307AD1B}.Release|x86.Build.0 = Release|Any CPU
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|x64.ActiveCfg = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|x64.Build.0 = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|x86.ActiveCfg = Debug|x86
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug (no commandargs)|x86.Build.0 = Debug|x86
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|x64.ActiveCfg = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|x64.Build.0 = Debug|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|x86.ActiveCfg = Debug|x86
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Debug|x86.Build.0 = Debug|x86
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|Any CPU.ActiveCfg = Release|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|Any CPU.Build.0 = Release|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|x64.ActiveCfg = Release|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|x64.Build.0 = Release|x64
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|x86.ActiveCfg = Release|x86
-		{A47FFF32-782B-4D9F-8704-C98FB32FA8CC}.Release|x86.Build.0 = Release|x86
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|x64.ActiveCfg = Debug|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|x64.Build.0 = Debug|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|x64.ActiveCfg = Debug|x64
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|x64.Build.0 = Debug|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Debug|x86.Build.0 = Debug|Any CPU
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|Any CPU.ActiveCfg = Release|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|Any CPU.Build.0 = Release|x64
+		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|Any CPU.Build.0 = Release|Any CPU
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|x64.ActiveCfg = Release|x64
 		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|x64.Build.0 = Release|x64
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|x86.ActiveCfg = Release|Any CPU
-		{0A820830-A298-497D-85E0-E9A89EFEF5FE}.Release|x86.Build.0 = Release|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|x64.ActiveCfg = Debug|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|x64.Build.0 = Debug|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Debug|x86.Build.0 = Debug|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|Any CPU.ActiveCfg = Release|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|Any CPU.Build.0 = Release|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|x64.ActiveCfg = Release|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|x64.Build.0 = Release|x64
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|x86.ActiveCfg = Release|Any CPU
-		{9C004392-571A-4D28-A9F6-0E25115E6727}.Release|x86.Build.0 = Release|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x64.Build.0 = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x86.Build.0 = Debug|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|Any CPU.ActiveCfg = Release|x64
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|Any CPU.Build.0 = Release|x64
+		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x64.ActiveCfg = Debug|x64
+		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Debug|x64.Build.0 = Debug|x64
+		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|Any CPU.Build.0 = Release|Any CPU
 		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|x64.ActiveCfg = Release|x64
 		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|x64.Build.0 = Release|x64
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|x86.ActiveCfg = Release|Any CPU
-		{9E69BC98-1512-4977-B683-6E7E5292C0B8}.Release|x86.Build.0 = Release|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|x64.ActiveCfg = Debug|x64
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|x64.Build.0 = Debug|x64
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Debug|x86.Build.0 = Debug|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|Any CPU.ActiveCfg = Release|x64
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|Any CPU.Build.0 = Release|x64
+		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|Any CPU.Build.0 = Release|Any CPU
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|x64.ActiveCfg = Release|x64
 		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|x64.Build.0 = Release|x64
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|x86.ActiveCfg = Release|Any CPU
-		{5D6A2EAF-6604-4C51-8AE2-A746B4BC5E3E}.Release|x86.Build.0 = Release|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|x64.ActiveCfg = Debug|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|x64.Build.0 = Debug|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Debug|x86.Build.0 = Debug|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|Any CPU.ActiveCfg = Release|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|Any CPU.Build.0 = Release|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|x64.ActiveCfg = Release|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|x64.Build.0 = Release|x64
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|x86.ActiveCfg = Release|Any CPU
-		{51CEB604-985A-45B9-AF0D-C5BA8CFA1BF0}.Release|x86.Build.0 = Release|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|x64
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|Any CPU.Build.0 = Debug|x64
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x64.Build.0 = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x86.Build.0 = Debug|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|Any CPU.ActiveCfg = Release|x64
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|Any CPU.Build.0 = Release|x64
+		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x64.ActiveCfg = Debug|x64
+		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Debug|x64.Build.0 = Debug|x64
+		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|Any CPU.Build.0 = Release|Any CPU
 		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|x64.ActiveCfg = Release|x64
 		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|x64.Build.0 = Release|x64
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|x86.ActiveCfg = Release|Any CPU
-		{37E4D421-8FD3-4D57-8F3A-7A511D6ED5C5}.Release|x86.Build.0 = Release|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|Any CPU.ActiveCfg = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|Any CPU.Build.0 = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|x64.ActiveCfg = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|x64.Build.0 = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|x86.ActiveCfg = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug (no commandargs)|x86.Build.0 = Debug|Any CPU
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x64.Build.0 = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x86.ActiveCfg = Debug|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x86.Build.0 = Debug|Any CPU
+		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x64.ActiveCfg = Debug|x64
+		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Debug|x64.Build.0 = Debug|x64
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|Any CPU.Build.0 = Release|Any CPU
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|x64.ActiveCfg = Release|x64
 		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|x64.Build.0 = Release|x64
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|x86.ActiveCfg = Release|Any CPU
-		{DE18D89E-39C5-48FD-8E42-16235E3C4593}.Release|x86.Build.0 = Release|Any CPU
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Debug|x64.ActiveCfg = Debug|x64
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Debug|x64.Build.0 = Debug|x64
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Release|x64.ActiveCfg = Release|x64
+		{6ED08CFB-B879-4B55-8741-663A4A3491CE}.Release|x64.Build.0 = Release|x64
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Debug|x64.ActiveCfg = Debug|x64
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Debug|x64.Build.0 = Debug|x64
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Release|x64.ActiveCfg = Release|x64
+		{89281BA1-67C8-48D2-9D6E-0F5CC85AD8C9}.Release|x64.Build.0 = Release|x64
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Debug|x64.ActiveCfg = Debug|x64
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Debug|x64.Build.0 = Debug|x64
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Release|x64.ActiveCfg = Release|x64
+		{F72C17EC-0881-4455-8B0E-E1CC4FFD642E}.Release|x64.Build.0 = Release|x64
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Debug|x64.ActiveCfg = Debug|x64
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Debug|x64.Build.0 = Debug|x64
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Release|Any CPU.Build.0 = Release|Any CPU
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Release|x64.ActiveCfg = Release|Any CPU
+		{81F87B8B-D5CE-4807-9005-38DE95BD7840}.Release|x64.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/Wabbajack/App.config b/Wabbajack/App.config
deleted file mode 100644
index 27cb2da2..00000000
--- a/Wabbajack/App.config
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<configuration>
-  <startup>
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
-  </startup>
-  <runtime>
-    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
-      <dependentAssembly>
-        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Reactive" publicKeyToken="94bc3704cddfc263" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"/>
-      </dependentAssembly>
-      <dependentAssembly>
-        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
-        <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0"/>
-      </dependentAssembly>
-    </assemblyBinding>
-  </runtime>
-
-</configuration>
diff --git a/Wabbajack/App.xaml b/Wabbajack/App.xaml
index 0c70ed88..70214666 100644
--- a/Wabbajack/App.xaml
+++ b/Wabbajack/App.xaml
@@ -8,9 +8,8 @@
     <Application.Resources>
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Dark.Purple.xaml" />
                 <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
-                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
-                <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseDark.xaml" />
                 <ResourceDictionary Source="Themes\Styles.xaml" />
                 <ResourceDictionary Source="Themes\CustomControls.xaml" />
             </ResourceDictionary.MergedDictionaries>
diff --git a/Wabbajack/App.xaml.cs b/Wabbajack/App.xaml.cs
index ad59de68..2ee58cfc 100644
--- a/Wabbajack/App.xaml.cs
+++ b/Wabbajack/App.xaml.cs
@@ -1,21 +1,23 @@
 using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
 using System.Linq;
-using System.Reflection;
+using System.Threading.Tasks;
 using System.Windows;
-using MahApps.Metro;
 using Wabbajack.Common;
 
 namespace Wabbajack
 {
     /// <summary>
-    ///     Interaction logic for App.xaml
+    /// Interaction logic for App.xaml
     /// </summary>
     public partial class App : Application
     {
         public App()
         {
             CLI.ParseOptions(Environment.GetCommandLineArgs());
-            if(CLIArguments.Help)
+            if (CLIArguments.Help)
                 CLI.DisplayHelpText();
         }
     }
diff --git a/Wabbajack/FodyWeavers.xml b/Wabbajack/FodyWeavers.xml
index 26ec15b8..63fc1484 100644
--- a/Wabbajack/FodyWeavers.xml
+++ b/Wabbajack/FodyWeavers.xml
@@ -1,11 +1,3 @@
 <Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ReactiveUI />
-  <Costura>
-    <Unmanaged64Assemblies>
-    7z
-	</Unmanaged64Assemblies>
-	<PreloadOrder>
-	7z
-	</PreloadOrder>
-  </Costura>
 </Weavers>
\ No newline at end of file
diff --git a/Wabbajack/FodyWeavers.xsd b/Wabbajack/FodyWeavers.xsd
index b2d3e296..f3ac4762 100644
--- a/Wabbajack/FodyWeavers.xsd
+++ b/Wabbajack/FodyWeavers.xsd
@@ -5,92 +5,6 @@
     <xs:complexType>
       <xs:all>
         <xs:element name="ReactiveUI" minOccurs="0" maxOccurs="1" type="xs:anyType" />
-        <xs:element name="Costura" minOccurs="0" maxOccurs="1">
-          <xs:complexType>
-            <xs:all>
-              <xs:element minOccurs="0" maxOccurs="1" name="ExcludeAssemblies" type="xs:string">
-                <xs:annotation>
-                  <xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks</xs:documentation>
-                </xs:annotation>
-              </xs:element>
-              <xs:element minOccurs="0" maxOccurs="1" name="IncludeAssemblies" type="xs:string">
-                <xs:annotation>
-                  <xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.</xs:documentation>
-                </xs:annotation>
-              </xs:element>
-              <xs:element minOccurs="0" maxOccurs="1" name="Unmanaged32Assemblies" type="xs:string">
-                <xs:annotation>
-                  <xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with line breaks.</xs:documentation>
-                </xs:annotation>
-              </xs:element>
-              <xs:element minOccurs="0" maxOccurs="1" name="Unmanaged64Assemblies" type="xs:string">
-                <xs:annotation>
-                  <xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with line breaks.</xs:documentation>
-                </xs:annotation>
-              </xs:element>
-              <xs:element minOccurs="0" maxOccurs="1" name="PreloadOrder" type="xs:string">
-                <xs:annotation>
-                  <xs:documentation>The order of preloaded assemblies, delimited with line breaks.</xs:documentation>
-                </xs:annotation>
-              </xs:element>
-            </xs:all>
-            <xs:attribute name="CreateTemporaryAssemblies" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="IncludeDebugSymbols" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>Controls if .pdbs for reference assemblies are also embedded.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="DisableCompression" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="DisableCleanup" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="LoadAtModuleInit" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="IgnoreSatelliteAssemblies" type="xs:boolean">
-              <xs:annotation>
-                <xs:documentation>Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="ExcludeAssemblies" type="xs:string">
-              <xs:annotation>
-                <xs:documentation>A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="IncludeAssemblies" type="xs:string">
-              <xs:annotation>
-                <xs:documentation>A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="Unmanaged32Assemblies" type="xs:string">
-              <xs:annotation>
-                <xs:documentation>A list of unmanaged 32 bit assembly names to include, delimited with |.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="Unmanaged64Assemblies" type="xs:string">
-              <xs:annotation>
-                <xs:documentation>A list of unmanaged 64 bit assembly names to include, delimited with |.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-            <xs:attribute name="PreloadOrder" type="xs:string">
-              <xs:annotation>
-                <xs:documentation>The order of preloaded assemblies, delimited with |.</xs:documentation>
-              </xs:annotation>
-            </xs:attribute>
-          </xs:complexType>
-        </xs:element>
       </xs:all>
       <xs:attribute name="VerifyAssembly" type="xs:boolean">
         <xs:annotation>
diff --git a/Wabbajack/Properties/AssemblyInfo.cs b/Wabbajack/Properties/AssemblyInfo.cs
index 52a7fb47..ee9e813c 100644
--- a/Wabbajack/Properties/AssemblyInfo.cs
+++ b/Wabbajack/Properties/AssemblyInfo.cs
@@ -2,18 +2,6 @@
 using System.Runtime.InteropServices;
 using System.Windows;
 
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Wabbajack")]
-[assembly: AssemblyDescription("An automated ModList installer")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Wabbajack")]
-[assembly: AssemblyProduct("Wabbajack")]
-[assembly: AssemblyCopyright("Copyright ©  2019")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
 // Setting ComVisible to false makes the types in this assembly not visible
 // to COM components.  If you need to access a type in this assembly from
 // COM, set the ComVisible attribute to true on that type.
@@ -37,17 +25,3 @@ using System.Windows;
                                               //(used if a resource is not found in the page,
                                               // app, or any theme specific resource dictionaries)
 )]
-
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.17.0")]
-[assembly: AssemblyFileVersion("0.9.17.0")]
diff --git a/Wabbajack/Resources/ResourceLinks.cs b/Wabbajack/Resources/ResourceLinks.cs
new file mode 100644
index 00000000..e2a12a5d
--- /dev/null
+++ b/Wabbajack/Resources/ResourceLinks.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows;
+using System.Windows.Media.Imaging;
+
+namespace Wabbajack
+{
+    public static class ResourceLinks
+    {
+        public static Lazy<BitmapImage> WabbajackLogo { get; } = new Lazy<BitmapImage>(() =>
+            UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/Wabba_Mouth.png")).Stream));
+        public static Lazy<BitmapImage> WabbajackLogoNoText { get; } = new Lazy<BitmapImage>(() =>
+            UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/Wabba_Mouth_No_Text.png")).Stream));
+        public static Lazy<BitmapImage> WabbajackErrLogo { get; } = new Lazy<BitmapImage>(() =>
+            UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/Wabba_Ded.png")).Stream));
+        public static Lazy<BitmapImage> MO2Button { get; } = new Lazy<BitmapImage>(() =>
+            UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/MO2Button.png")).Stream));
+        public static Lazy<BitmapImage> VortexButton { get; } = new Lazy<BitmapImage>(() =>
+            UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Resources/VortexButton.png")).Stream));
+    }
+}
diff --git a/Wabbajack/Resources/banner.png b/Wabbajack/Resources/banner.png
deleted file mode 100644
index 61140cb0..00000000
Binary files a/Wabbajack/Resources/banner.png and /dev/null differ
diff --git a/Wabbajack/Resources/banner_dark.png b/Wabbajack/Resources/banner_dark.png
deleted file mode 100644
index 2e40cce0..00000000
Binary files a/Wabbajack/Resources/banner_dark.png and /dev/null differ
diff --git a/Wabbajack/Resources/banner_small.png b/Wabbajack/Resources/banner_small.png
deleted file mode 100644
index 46ecf866..00000000
Binary files a/Wabbajack/Resources/banner_small.png and /dev/null differ
diff --git a/Wabbajack/Resources/banner_small_dark.png b/Wabbajack/Resources/banner_small_dark.png
deleted file mode 100644
index 709f3451..00000000
Binary files a/Wabbajack/Resources/banner_small_dark.png and /dev/null differ
diff --git a/Wabbajack/Themes/Styles.xaml b/Wabbajack/Themes/Styles.xaml
index d45a3c55..0d9fdef5 100644
--- a/Wabbajack/Themes/Styles.xaml
+++ b/Wabbajack/Themes/Styles.xaml
@@ -61,43 +61,39 @@
     <Color x:Key="Triadic2">#FCBB86</Color>
 
     <!--  Mahapps overrides  -->
-    <Color x:Key="AccentBaseColor">#FF3700B3</Color>
+    <Color x:Key="MahApps.Colors.AccentBase">#FF3700B3</Color>
     <!--  80%  -->
-    <Color x:Key="AccentColor">#CC868CFC</Color>
+    <Color x:Key="MahApps.Colors.Accent">#CC868CFC</Color>
     <!--  60%  -->
-    <Color x:Key="AccentColor2">#99868CFC</Color>
+    <Color x:Key="MahApps.Colors.Accent2">#99868CFC</Color>
     <!--  40%  -->
-    <Color x:Key="AccentColor3">#66868CFC</Color>
+    <Color x:Key="MahApps.Colors.Accent3">#66868CFC</Color>
     <!--  20%  -->
-    <Color x:Key="AccentColor4">#33868CFC</Color>
+    <Color x:Key="MahApps.Colors.Accent4">#33868CFC</Color>
     <SolidColorBrush
-        x:Key="HighlightBrush"
+        x:Key="MahApps.Brushes.Highlight"
         options:Freeze="True"
-        Color="{StaticResource HighlightColor}" />
+        Color="{StaticResource MahApps.Colors.Highlight}" />
     <SolidColorBrush
-        x:Key="AccentBaseColorBrush"
+        x:Key="MahApps.Brushes.AccentBase"
         options:Freeze="True"
-        Color="{StaticResource AccentBaseColor}" />
+        Color="{StaticResource MahApps.Colors.AccentBase}" />
     <SolidColorBrush
-        x:Key="AccentColorBrush"
+        x:Key="MahApps.Brushes.Accent"
         options:Freeze="True"
-        Color="{StaticResource AccentColor}" />
+        Color="{StaticResource MahApps.Colors.Accent}" />
     <SolidColorBrush
-        x:Key="AccentColorBrush2"
+        x:Key="MahApps.Brushes.Accent2"
         options:Freeze="True"
-        Color="{StaticResource AccentColor2}" />
+        Color="{StaticResource MahApps.Colors.Accent2}" />
     <SolidColorBrush
-        x:Key="AccentColorBrush3"
+        x:Key="MahApps.Brushes.Accent3"
         options:Freeze="True"
-        Color="{StaticResource AccentColor3}" />
+        Color="{StaticResource MahApps.Colors.Accent3}" />
     <SolidColorBrush
-        x:Key="AccentColorBrush4"
+        x:Key="MahApps.Brushes.Accent4"
         options:Freeze="True"
-        Color="{StaticResource AccentColor4}" />
-    <SolidColorBrush
-        x:Key="WindowTitleColorBrush"
-        options:Freeze="True"
-        Color="{StaticResource AccentColor}" />
+        Color="{StaticResource MahApps.Colors.Accent4}" />
 
     <!--  Brushes  -->
     <SolidColorBrush x:Key="YellowBrush" Color="{StaticResource Yellow}" />
@@ -1281,7 +1277,7 @@
 
     <Style
         x:Key="CircleButtonStyle"
-        BasedOn="{StaticResource MahApps.Metro.Styles.MetroCircleButtonStyle}"
+        BasedOn="{StaticResource MahApps.Styles.Button.Circle}"
         TargetType="ButtonBase">
         <Setter Property="Focusable" Value="False" />
         <Setter Property="Background" Value="#333333" />
@@ -1295,7 +1291,7 @@
 
     <Style
         x:Key="IconCircleButtonStyle"
-        BasedOn="{StaticResource MahApps.Metro.Styles.MetroCircleButtonStyle}"
+        BasedOn="{StaticResource MahApps.Styles.Button.Circle}"
         TargetType="ButtonBase">
         <Setter Property="Focusable" Value="False" />
         <Setter Property="BorderBrush" Value="Transparent" />
@@ -1307,7 +1303,7 @@
             </Trigger>
             <Trigger Property="IsMouseOver" Value="True">
                 <Setter Property="Background" Value="#333333" />
-                <Setter Property="BorderBrush" Value="{StaticResource GrayBrush7}" />
+                <Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Gray7}" />
                 <Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
             </Trigger>
         </Style.Triggers>
@@ -1337,7 +1333,7 @@
                 <Setter Property="Background" Value="Transparent" />
             </Trigger>
             <Trigger Property="IsMouseOver" Value="True">
-                <Setter Property="BorderBrush" Value="{StaticResource GrayBrush7}" />
+                <Setter Property="BorderBrush" Value="{StaticResource MahApps.Brushes.Gray7}" />
                 <Setter Property="Foreground" Value="{StaticResource IntenseComplementaryBrush}" />
                 <Setter Property="Background" Value="Transparent" />
             </Trigger>
@@ -3509,9 +3505,7 @@
     </Style>
     <Style BasedOn="{StaticResource MainFilePickerStyle}" TargetType="{x:Type local:FilePicker}" />
 
-    <Style BasedOn="{StaticResource MetroTabControl}" TargetType="TabControl" />
-    <Style BasedOn="{StaticResource MetroTabItem}" TargetType="{x:Type TabItem}" />
-
-    <sys:Double x:Key="TabItemFontSize">18</sys:Double>
+    <Style BasedOn="{StaticResource MahApps.Styles.TabControl}" TargetType="TabControl" />
+    <Style BasedOn="{StaticResource MahApps.Styles.TabItem}" TargetType="{x:Type TabItem}" />
 
 </ResourceDictionary>
diff --git a/Wabbajack/UI/FilePickerVM.cs b/Wabbajack/Util/FilePickerVM.cs
similarity index 100%
rename from Wabbajack/UI/FilePickerVM.cs
rename to Wabbajack/Util/FilePickerVM.cs
diff --git a/Wabbajack/UI/UIUtils.cs b/Wabbajack/Util/UIUtils.cs
similarity index 100%
rename from Wabbajack/UI/UIUtils.cs
rename to Wabbajack/Util/UIUtils.cs
diff --git a/Wabbajack/View Models/Compilers/CompilerVM.cs b/Wabbajack/View Models/Compilers/CompilerVM.cs
index daee630b..fd044cdc 100644
--- a/Wabbajack/View Models/Compilers/CompilerVM.cs	
+++ b/Wabbajack/View Models/Compilers/CompilerVM.cs	
@@ -184,8 +184,16 @@ namespace Wabbajack
                 {
                     try
                     {
-                        var successful = await this.Compiler.Compile();
-                        Completed = ErrorResponse.Create(successful);
+                        var modList = await this.Compiler.Compile();
+                        Completed = ErrorResponse.Create(modList.Succeeded);
+                        try
+                        {
+                            ShowReport(modList.Value);
+                        }
+                        catch (Exception ex)
+                        {
+                            Utils.Error(ex, $"Error opening manifest report");
+                        }
                     }
                     catch (Exception ex)
                     {
@@ -267,5 +275,12 @@ namespace Wabbajack
                 .Switch()
                 .ToGuiProperty(this, nameof(CurrentCpuCount));
         }
+
+        public void ShowReport(ModList modList)
+        {
+            var file = Path.GetTempFileName() + ".html";
+            File.WriteAllText(file, modList.ReportHTML);
+            Utils.StartProcessFromFile(file);
+        }
     }
 }
diff --git a/Wabbajack/View Models/Compilers/ISubCompilerVM.cs b/Wabbajack/View Models/Compilers/ISubCompilerVM.cs
index 472cf29f..b781da89 100644
--- a/Wabbajack/View Models/Compilers/ISubCompilerVM.cs	
+++ b/Wabbajack/View Models/Compilers/ISubCompilerVM.cs	
@@ -12,6 +12,6 @@ namespace Wabbajack
         ModlistSettingsEditorVM ModlistSettings { get; }
         void Unload();
         IObservable<bool> CanCompile { get; }
-        Task<bool> Compile();
+        Task<GetResponse<ModList>> Compile();
     }
 }
diff --git a/Wabbajack/View Models/Compilers/MO2CompilerVM.cs b/Wabbajack/View Models/Compilers/MO2CompilerVM.cs
index 8e1db3fa..daec599c 100644
--- a/Wabbajack/View Models/Compilers/MO2CompilerVM.cs	
+++ b/Wabbajack/View Models/Compilers/MO2CompilerVM.cs	
@@ -163,7 +163,7 @@ namespace Wabbajack
             ModlistSettings?.Save();
         }
 
-        public async Task<bool> Compile()
+        public async Task<GetResponse<ModList>> Compile()
         {
             string outputFile;
             if (string.IsNullOrWhiteSpace(Parent.OutputLocation.TargetPath))
@@ -194,7 +194,8 @@ namespace Wabbajack
                 {
                     Parent.MWVM.Settings.Performance.AttachToBatchProcessor(ActiveCompilation);
 
-                    return await ActiveCompilation.Begin();
+                    var success = await ActiveCompilation.Begin();
+                    return GetResponse<ModList>.Create(success, ActiveCompilation.ModList);
                 }
             }
             finally
diff --git a/Wabbajack/View Models/Compilers/VortexCompilerVM.cs b/Wabbajack/View Models/Compilers/VortexCompilerVM.cs
index 5c79e2c7..35eae55d 100644
--- a/Wabbajack/View Models/Compilers/VortexCompilerVM.cs	
+++ b/Wabbajack/View Models/Compilers/VortexCompilerVM.cs	
@@ -177,7 +177,7 @@ namespace Wabbajack
             GameLocation.TargetPath = StoreHandler.Instance.GetGamePath(SelectedGame.Game, StoreType.GOG);
         }
 
-        public async Task<bool> Compile()
+        public async Task<GetResponse<ModList>> Compile()
         {
             string outputFile = $"{ModlistSettings.ModListName}{Consts.ModListExtension}";
             if (!string.IsNullOrWhiteSpace(Parent.OutputLocation.TargetPath))
@@ -204,7 +204,8 @@ namespace Wabbajack
                 })
                 {
                     Parent.MWVM.Settings.Performance.AttachToBatchProcessor(ActiveCompilation);
-                    return await ActiveCompilation.Begin();
+                    var success = await ActiveCompilation.Begin();
+                    return GetResponse<ModList>.Create(success, ActiveCompilation.ModList);
                 }
             }
             finally
diff --git a/Wabbajack/View Models/Installers/InstallerVM.cs b/Wabbajack/View Models/Installers/InstallerVM.cs
index c74aaaf1..f198a83f 100644
--- a/Wabbajack/View Models/Installers/InstallerVM.cs	
+++ b/Wabbajack/View Models/Installers/InstallerVM.cs	
@@ -30,9 +30,6 @@ namespace Wabbajack
 
         public MainWindowVM MWVM { get; }
 
-        public static BitmapImage WabbajackLogo { get; } = UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Wabbajack;component/Resources/Wabba_Mouth_No_Text.png")).Stream);
-        public static BitmapImage WabbajackErrLogo { get; } = UIUtils.BitmapImageFromStream(Application.GetResourceStream(new Uri("pack://application:,,,/Wabbajack;component/Resources/Wabba_Ded.png")).Stream);
-
         private readonly ObservableAsPropertyHelper<ModListVM> _modList;
         public ModListVM ModList => _modList.Value;
 
@@ -273,7 +270,7 @@ namespace Wabbajack
                     {
                         if (err != null)
                         {
-                            return WabbajackErrLogo;
+                            return ResourceLinks.WabbajackErrLogo.Value;
                         }
                         if (loading) return default;
                         return installing ? slideshow : modList;
@@ -326,7 +323,7 @@ namespace Wabbajack
             VisitModListWebsiteCommand = ReactiveCommand.Create(
                 execute: () =>
                 {
-                    Process.Start(ModList.Website);
+                    Utils.OpenWebsite(ModList.Website);
                     return Unit.Default;
                 },
                 canExecute: this.WhenAny(x => x.ModList.Website)
@@ -446,7 +443,7 @@ namespace Wabbajack
         {
             var file = Path.GetTempFileName() + ".html";
             File.WriteAllText(file, HTMLReport);
-            Process.Start(file);
+            Utils.StartProcessFromFile(file);
         }
     }
 }
diff --git a/Wabbajack/View Models/ModListMetadataVM.cs b/Wabbajack/View Models/ModListMetadataVM.cs
index b3583a84..48fd19b3 100644
--- a/Wabbajack/View Models/ModListMetadataVM.cs	
+++ b/Wabbajack/View Models/ModListMetadataVM.cs	
@@ -54,7 +54,7 @@ namespace Wabbajack
             Metadata = metadata;
             Location = Path.Combine(Consts.ModListDownloadFolder, Metadata.Links.MachineURL + Consts.ModListExtension);
             IsBroken = metadata.ValidationSummary.HasFailures;
-            OpenWebsiteCommand = ReactiveCommand.Create(() => Process.Start($"https://www.wabbajack.org/modlist/{Metadata.Links.MachineURL}"));
+            OpenWebsiteCommand = ReactiveCommand.Create(() => Utils.OpenWebsite($"https://www.wabbajack.org/modlist/{Metadata.Links.MachineURL}"));
             ExecuteCommand = ReactiveCommand.CreateFromObservable<Unit, Unit>(
                 canExecute: this.WhenAny(x => x.IsBroken).Select(x => !x),
                 execute: (unit) => 
diff --git a/Wabbajack/View Models/ModListVM.cs b/Wabbajack/View Models/ModListVM.cs
index 21e257e1..7c3f92a6 100644
--- a/Wabbajack/View Models/ModListVM.cs	
+++ b/Wabbajack/View Models/ModListVM.cs	
@@ -85,7 +85,7 @@ namespace Wabbajack
                 // If ever would return null, show WJ logo instead
                 .Select(x =>
                 {
-                    return x ?? InstallerVM.WabbajackLogo;
+                    return x ?? ResourceLinks.WabbajackLogoNoText.Value;
                 })
                 .Replay(1)
                 .RefCount();
@@ -96,7 +96,7 @@ namespace Wabbajack
             if (string.IsNullOrEmpty(Readme)) return;
             if (SourceModList.ReadmeIsWebsite)
             {
-                Process.Start(Readme);
+                Utils.OpenWebsite(Readme);
             }
             else
             {
diff --git a/Wabbajack/View Models/SlideShow.cs b/Wabbajack/View Models/SlideShow.cs
index 6ccba2ad..4a915515 100644
--- a/Wabbajack/View Models/SlideShow.cs	
+++ b/Wabbajack/View Models/SlideShow.cs	
@@ -121,7 +121,7 @@ namespace Wabbajack
             VisitNexusSiteCommand = ReactiveCommand.Create(
                 execute: () =>
                 {
-                    Process.Start(TargetMod.ModURL);
+                    Utils.OpenWebsite(TargetMod.ModURL);
                     return Unit.Default;
                 },
                 canExecute: this.WhenAny(x => x.TargetMod.ModURL)
diff --git a/Wabbajack/Views/LinksView.xaml.cs b/Wabbajack/Views/LinksView.xaml.cs
index 4ae06c91..16938432 100644
--- a/Wabbajack/Views/LinksView.xaml.cs
+++ b/Wabbajack/Views/LinksView.xaml.cs
@@ -17,17 +17,17 @@ namespace Wabbajack
 
         private void GitHub_Click(object sender, RoutedEventArgs e)
         {
-            Process.Start("https://github.com/wabbajack-tools/wabbajack");
+            Utils.OpenWebsite("https://github.com/wabbajack-tools/wabbajack");
         }
 
         private void Discord_Click(object sender, RoutedEventArgs e)
         {
-            Process.Start("https://discord.gg/wabbajack");
+            Utils.OpenWebsite("https://discord.gg/wabbajack");
         }
 
         private void Patreon_Click(object sender, RoutedEventArgs e)
         {
-            Process.Start("https://www.patreon.com/user?u=11907933");
+            Utils.OpenWebsite("https://www.patreon.com/user?u=11907933");
         }
     }
 }
diff --git a/Wabbajack/Views/MainWindow.xaml b/Wabbajack/Views/MainWindow.xaml
index c904d38f..563e3616 100644
--- a/Wabbajack/Views/MainWindow.xaml
+++ b/Wabbajack/Views/MainWindow.xaml
@@ -16,9 +16,9 @@
     RenderOptions.BitmapScalingMode="HighQuality"
     ResizeMode="CanResize"
     Style="{StaticResource {x:Type Window}}"
-    TitlebarHeight="25"
+    TitleBarHeight="25"
     UseLayoutRounding="True"
-    WindowStyle="ToolWindow"
+    WindowTitleBrush="{StaticResource MahApps.Brushes.Accent}"
     mc:Ignorable="d">
     <ContentPresenter Content="{Binding ActivePane}">
         <ContentPresenter.Resources>
diff --git a/Wabbajack/Views/MainWindow.xaml.cs b/Wabbajack/Views/MainWindow.xaml.cs
index ed3d0312..49184838 100644
--- a/Wabbajack/Views/MainWindow.xaml.cs
+++ b/Wabbajack/Views/MainWindow.xaml.cs
@@ -30,7 +30,7 @@ namespace Wabbajack
 
             Utils.Log($"Wabbajack Build - {ThisAssembly.Git.Sha}");
 
-            // Run some init tasks in background
+            // Run logic to associate wabbajack lists with this app in the background
             Task.Run(async () =>
             {
                 var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
diff --git a/Wabbajack/Views/TextViewer.xaml b/Wabbajack/Views/TextViewer.xaml
index 57a33777..a4954259 100644
--- a/Wabbajack/Views/TextViewer.xaml
+++ b/Wabbajack/Views/TextViewer.xaml
@@ -10,7 +10,6 @@
     Height="450"
     Icon="../Resources/Icons/wabbajack.ico"
     Style="{StaticResource {x:Type Window}}"
-    WindowStyle="ToolWindow"
     mc:Ignorable="d">
     <Grid>
         <TextBlock
diff --git a/Wabbajack/Wabbajack.csproj b/Wabbajack/Wabbajack.csproj
index 65596129..f2059ee4 100644
--- a/Wabbajack/Wabbajack.csproj
+++ b/Wabbajack/Wabbajack.csproj
@@ -1,625 +1,69 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
+
   <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{33602679-8484-40C7-A10C-774DFF5D8314}</ProjectGuid>
     <OutputType>WinExe</OutputType>
-    <RootNamespace>Wabbajack</RootNamespace>
-    <AssemblyName>Wabbajack</AssemblyName>
-    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <WarningLevel>4</WarningLevel>
-    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
-    <Deterministic>true</Deterministic>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
-    <IsWebBootstrapper>false</IsWebBootstrapper>
-    <XamlDebuggingInformation>True</XamlDebuggingInformation>
-    <PublishUrl>publish\</PublishUrl>
-    <Install>true</Install>
-    <InstallFrom>Disk</InstallFrom>
-    <UpdateEnabled>false</UpdateEnabled>
-    <UpdateMode>Foreground</UpdateMode>
-    <UpdateInterval>7</UpdateInterval>
-    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
-    <UpdatePeriodically>false</UpdatePeriodically>
-    <UpdateRequired>false</UpdateRequired>
-    <MapFileExtensions>true</MapFileExtensions>
-    <ApplicationRevision>0</ApplicationRevision>
-    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
-    <UseApplicationTrust>false</UseApplicationTrust>
-    <BootstrapperEnabled>true</BootstrapperEnabled>
-    <TargetFrameworkProfile />
+    <TargetFramework>netcoreapp3.1</TargetFramework>
+    <UseWPF>true</UseWPF>
+    <Platforms>AnyCPU;x64</Platforms>
+    <AssemblyVersion>0.9.17.0</AssemblyVersion>
+    <FileVersion>0.9.17.0</FileVersion>
+    <Copyright>Copyright © 2019</Copyright>
+    <Description>An automated ModList installer</Description>
+    <StartupObject></StartupObject>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <PlatformTarget>x64</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
   </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <PlatformTarget>x64</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-  </PropertyGroup>
-  <PropertyGroup>
-    <ApplicationIcon>Resources\Icons\wabbajack.ico</ApplicationIcon>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug %28no commandargs%29|AnyCPU'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\Debug %28no commandargs%29\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>true</Prefer32Bit>
-    <NoWarn>CS1998</NoWarn>
-    <WarningsAsErrors>CS4014</WarningsAsErrors>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>true</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug %28no commandargs%29|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug %28no commandargs%29\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>embedded</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>true</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>true</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>bin\x86\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug %28no commandargs%29|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug %28no commandargs%29\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <LangVersion>7.3</LangVersion>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
+
   <ItemGroup>
-    <Reference Include="PresentationFramework.Aero" />
-    <Reference Include="System" />
-    <Reference Include="System.Configuration" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Design" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.IO.Compression" />
-    <Reference Include="System.Numerics" />
-    <Reference Include="System.Runtime.Serialization" />
-    <Reference Include="System.Security" />
-    <Reference Include="System.ServiceModel" />
-    <Reference Include="System.Transactions" />
-    <Reference Include="System.Web" />
-    <Reference Include="System.Windows" />
-    <Reference Include="System.Windows.Forms" />
-    <Reference Include="System.Xml" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Xaml">
-      <RequiredTargetFramework>4.0</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="WindowsBase" />
-    <Reference Include="PresentationCore" />
-    <Reference Include="PresentationFramework" />
-    <Reference Include="Xilium.CefGlue.WPF, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\Users\tbald\.nuget\packages\cefglue.wpf\75.1.28\lib\net472\x64\Xilium.CefGlue.WPF.dll</HintPath>
-    </Reference>
+    <None Remove="Readme.md" />
+    <None Remove="Resources\MO2Button.png" />
+    <None Remove="Resources\VortexButton.png" />
+    <None Remove="Resources\Wabba_Ded.png" />
+    <None Remove="Resources\Wabba_Mouth.png" />
+    <None Remove="Resources\Wabba_Mouth_No_Text.png" />
   </ItemGroup>
+
   <ItemGroup>
-    <ApplicationDefinition Include="App.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </ApplicationDefinition>
-    <Compile Include="Extensions\DynamicDataExt.cs" />
-    <Compile Include="View Models\Settings\AuthorFilesVM.cs" />
-    <Compile Include="View Models\UserIntervention\ConfirmUpdateOfExistingInstallVM.cs" />
-    <Compile Include="Views\Common\AttentionBorder.cs" />
-    <Compile Include="Views\ModListTileView.xaml.cs">
-      <DependentUpon>ModListTileView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="UI\FilePickerVM.cs" />
-    <Compile Include="UI\UIUtils.cs" />
-    <Compile Include="Util\SystemParametersConstructor.cs" />
-    <Compile Include="Converters\IntDownCastConverter.cs" />
-    <Compile Include="Converters\CommandConverter.cs" />
-    <Compile Include="Converters\ConverterRegistration.cs" />
-    <Compile Include="Extensions\IViewForExt.cs" />
-    <Compile Include="View Models\Interfaces\ICpuStatusVM.cs" />
-    <Compile Include="Views\Settings\AuthorFilesView.xaml.cs">
-      <DependentUpon>AuthorFilesView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Settings\LoginItemView.xaml.cs">
-      <DependentUpon>LoginItemView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Settings\LoginSettingsView.xaml.cs">
-      <DependentUpon>LoginSettingsView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Settings\PerformanceSettingsView.xaml.cs">
-      <DependentUpon>PerformanceSettingsView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\BackNavigatingVM.cs" />
-    <Compile Include="View Models\Settings\SettingsVM.cs" />
-    <Compile Include="Views\Settings\SettingsView.xaml.cs">
-      <DependentUpon>SettingsView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Converters\IsTypeVisibilityConverter.cs" />
-    <Compile Include="Views\Common\UnderMaintenanceOverlay.xaml.cs">
-      <DependentUpon>UnderMaintenanceOverlay.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Util\AsyncLazy.cs" />
-    <Compile Include="View Models\CPUDisplayVM.cs" />
-    <Compile Include="View Models\Settings\LoginManagerVM.cs" />
-    <Compile Include="Views\Compilers\CompilationCompleteView.xaml.cs">
-      <DependentUpon>CompilationCompleteView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Installers\InstallationCompleteView.xaml.cs">
-      <DependentUpon>InstallationCompleteView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Interventions\ConfirmationInterventionView.xaml.cs">
-      <DependentUpon>ConfirmationInterventionView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Converters\EqualsToBoolConverter.cs" />
-    <Compile Include="Views\Common\CpuView.xaml.cs">
-      <DependentUpon>CpuView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Common\LogView.xaml.cs">
-      <DependentUpon>LogView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\UserInterventionHandlers.cs" />
-    <Compile Include="View Models\WebBrowserVM.cs" />
-    <Compile Include="Views\Installers\MO2InstallerConfigView.xaml.cs">
-      <DependentUpon>MO2InstallerConfigView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\Installers\ISubInstallerVM.cs" />
-    <Compile Include="View Models\Installers\MO2InstallerVM.cs" />
-    <Compile Include="View Models\Installers\VortexInstallerVM.cs" />
-    <Compile Include="View Models\ModListGalleryVM.cs" />
-    <Compile Include="View Models\ModListMetadataVM.cs" />
-    <Compile Include="Views\Common\HeatedBackgroundView.xaml.cs">
-      <DependentUpon>HeatedBackgroundView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Interventions\ConfirmUpdateOfExistingInstallView.xaml.cs">
-      <DependentUpon>ConfirmUpdateOfExistingInstallView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\LinksView.xaml.cs">
-      <DependentUpon>LinksView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\ModeSelectionView.xaml.cs">
-      <DependentUpon>ModeSelectionView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\GameVM.cs" />
-    <Compile Include="Views\Compilers\MO2CompilerConfigView.xaml.cs">
-      <DependentUpon>MO2CompilerConfigView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\Compilers\ISubCompilerVM.cs" />
-    <Compile Include="View Models\Compilers\MO2CompilerVM.cs" />
-    <Compile Include="View Models\Compilers\ModlistSettingsEditorVM.cs" />
-    <Compile Include="View Models\Compilers\VortexCompilerVM.cs" />
-    <Compile Include="Converters\InverseBooleanConverter.cs" />
-    <Compile Include="Converters\BoolToVisibilityHiddenConverter.cs" />
-    <Compile Include="Views\Common\RadioButtonView.xaml.cs">
-      <DependentUpon>RadioButtonView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Common\BeginButton.xaml.cs">
-      <DependentUpon>BeginButton.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Converters\BoolToVisibilityConverter.cs" />
-    <Compile Include="Views\Common\DetailImageView.xaml.cs">
-      <DependentUpon>DetailImageView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Common\TopProgressView.xaml.cs">
-      <DependentUpon>TopProgressView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Settings.cs" />
-    <Compile Include="View Models\ModListVM.cs" />
-    <Compile Include="View Models\ModVM.cs" />
-    <Compile Include="Views\Compilers\CompilerView.xaml.cs">
-      <DependentUpon>CompilerView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Converters\IsNotNullVisibilityConverter.cs" />
-    <Compile Include="View Models\ModeSelectionVM.cs" />
-    <Compile Include="Views\Common\FilePicker.xaml.cs">
-      <DependentUpon>FilePicker.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Installers\InstallationView.xaml.cs">
-      <DependentUpon>InstallationView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="View Models\Compilers\CompilerVM.cs" />
-    <Compile Include="View Models\MainWindowVM.cs" />
-    <Compile Include="Converters\LeftMarginMultiplierConverter.cs" />
-    <Compile Include="Util\TreeViewItemExtensions.cs" />
-    <Compile Include="View Models\SlideShow.cs" />
-    <Compile Include="Views\ModListGalleryView.xaml.cs">
-      <DependentUpon>ModListGalleryView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\TextViewer.xaml.cs">
-      <DependentUpon>TextViewer.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\UserControlRx.cs" />
-    <Compile Include="Views\Compilers\VortexCompilerConfigView.xaml.cs">
-      <DependentUpon>VortexCompilerConfigView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\Installers\VortexInstallerConfigView.xaml.cs">
-      <DependentUpon>VortexInstallerConfigView.xaml</DependentUpon>
-    </Compile>
-    <Compile Include="Views\WebBrowserView.xaml.cs">
-      <DependentUpon>WebBrowserView.xaml</DependentUpon>
-    </Compile>
-    <Page Include="Themes\CustomControls.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\ModListTileView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Settings\AuthorFilesView.xaml" />
-    <Page Include="Views\Settings\LoginItemView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Settings\LoginSettingsView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Settings\PerformanceSettingsView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Settings\SettingsView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\UnderMaintenanceOverlay.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Compilers\CompilationCompleteView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Installers\InstallationCompleteView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Interventions\ConfirmationInterventionView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\CpuView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\LogView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Installers\MO2InstallerConfigView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\HeatedBackgroundView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Interventions\ConfirmUpdateOfExistingInstallView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\LinksView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\ModeSelectionView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Compilers\MO2CompilerConfigView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\RadioButtonView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\BeginButton.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\DetailImageView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Compilers\CompilerView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\TopProgressView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Common\FilePicker.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Page Include="Views\Installers\InstallationView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\MainWindow.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Compile Include="App.xaml.cs">
-      <DependentUpon>App.xaml</DependentUpon>
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="View Models\Installers\InstallerVM.cs" />
-    <Compile Include="Util\AutoScrollBehavior.cs" />
-    <Compile Include="Views\MainWindow.xaml.cs">
-      <DependentUpon>MainWindow.xaml</DependentUpon>
-      <SubType>Code</SubType>
-    </Compile>
-    <Page Include="Themes\Styles.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Page Include="Views\ModListGalleryView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\TextViewer.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Page Include="Views\Compilers\VortexCompilerConfigView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\Installers\VortexInstallerConfigView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-    <Page Include="Views\WebBrowserView.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Settings.settings</DependentUpon>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="App.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="$(SolutionDir)\Compression.BSA\Compression.BSA.csproj">
-      <Project>{ff5d892f-8ff4-44fc-8f7f-cd58f307ad1b}</Project>
-      <Name>Compression.BSA</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Common\Wabbajack.Common.csproj">
-      <Project>{b3f3fb6e-b9eb-4f49-9875-d78578bc7ae5}</Project>
-      <Name>Wabbajack.Common</Name>
-    </ProjectReference>
-    <ProjectReference Include="$(SolutionDir)\Wabbajack.Lib\Wabbajack.Lib.csproj">
-      <Project>{0a820830-a298-497d-85e0-e9a89efef5fe}</Project>
-      <Name>Wabbajack.Lib</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
-      <Visible>False</Visible>
-      <ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
-      <Install>true</Install>
-    </BootstrapperPackage>
-    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
-      <Visible>False</Visible>
-      <ProductName>.NET Framework 3.5 SP1</ProductName>
-      <Install>false</Install>
-    </BootstrapperPackage>
-  </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\Icons\wabbajack.ico" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Resources\banner.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Resources\banner_small.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="Resources\Banner_Dark.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\banner_small_dark.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <PackageReference Include="AlphaFS">
-      <Version>2.2.6</Version>
-    </PackageReference>
-    <PackageReference Include="CefSharp.Wpf">
-      <Version>75.1.143</Version>
-    </PackageReference>
-    <PackageReference Include="CommonMark.NET">
-      <Version>0.15.1</Version>
-    </PackageReference>
-    <PackageReference Include="Costura.Fody">
-      <Version>4.1.0</Version>
-    </PackageReference>
-    <PackageReference Include="DynamicData">
-      <Version>6.14.3</Version>
-    </PackageReference>
-    <PackageReference Include="Extended.Wpf.Toolkit">
-      <Version>3.7.0</Version>
-    </PackageReference>
-    <PackageReference Include="Fody">
-      <Version>6.0.8</Version>
-      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    <PackageReference Include="AlphaFS" Version="2.2.6" />
+    <PackageReference Include="CefSharp.Wpf" Version="75.1.143" />
+    <PackageReference Include="DynamicData" Version="6.14.3" />
+    <PackageReference Include="Extended.Wpf.Toolkit" Version="3.7.0" />
+    <PackageReference Include="Fody" Version="6.0.8">
       <PrivateAssets>all</PrivateAssets>
-    </PackageReference>
-    <PackageReference Include="GitInfo">
-      <Version>2.0.26</Version>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+    </PackageReference>
+    <PackageReference Include="GitInfo" Version="2.0.26">
       <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>
-    <PackageReference Include="K4os.Compression.LZ4.Streams">
-      <Version>1.1.11</Version>
-    </PackageReference>
-    <PackageReference Include="MahApps.Metro">
-      <Version>1.6.5</Version>
-    </PackageReference>
-    <PackageReference Include="MahApps.Metro.IconPacks">
-      <Version>3.1.0</Version>
-    </PackageReference>
-    <PackageReference Include="MegaApiClient">
-      <Version>1.7.1</Version>
-    </PackageReference>
-    <PackageReference Include="Microsoft-WindowsAPICodePack-Shell">
-      <Version>1.1.3.3</Version>
-    </PackageReference>
-    <PackageReference Include="Newtonsoft.Json">
-      <Version>12.0.3</Version>
-    </PackageReference>
-    <PackageReference Include="Newtonsoft.Json.Bson">
-      <Version>1.0.2</Version>
-    </PackageReference>
-    <PackageReference Include="protobuf-net">
-      <Version>3.0.0-alpha.128</Version>
-    </PackageReference>
-    <PackageReference Include="ReactiveUI.Events.WPF">
-      <Version>11.1.12</Version>
-    </PackageReference>
-    <PackageReference Include="ReactiveUI.Fody">
-      <Version>11.1.12</Version>
-    </PackageReference>
-    <PackageReference Include="ReactiveUI.WPF">
-      <Version>11.1.12</Version>
-    </PackageReference>
-    <PackageReference Include="SharpCompress">
-      <Version>0.24.0</Version>
-    </PackageReference>
-    <PackageReference Include="SharpZipLib">
-      <Version>1.2.0</Version>
-    </PackageReference>
-    <PackageReference Include="Syroot.Windows.IO.KnownFolders">
-      <Version>1.2.1</Version>
-    </PackageReference>
-    <PackageReference Include="System.Reactive">
-      <Version>4.3.2</Version>
-    </PackageReference>
-    <PackageReference Include="WebSocketSharpFork">
-      <Version>1.0.4</Version>
-    </PackageReference>
-    <PackageReference Include="WPFThemes.DarkBlend">
-      <Version>1.0.8</Version>
-    </PackageReference>
-    <PackageReference Include="YamlDotNet">
-      <Version>8.1.0</Version>
-    </PackageReference>
+    <PackageReference Include="MahApps.Metro" Version="2.0.0-alpha0660" />
+    <PackageReference Include="MahApps.Metro.IconPacks" Version="3.1.0" />
+    <PackageReference Include="ReactiveUI" Version="11.1.12" />
+    <PackageReference Include="ReactiveUI.Fody" Version="11.1.12" />
+    <PackageReference Include="ReactiveUI.WPF" Version="11.1.12" />
+    <PackageReference Include="Syroot.Windows.IO.KnownFolders" Version="1.2.1" />
+    <PackageReference Include="WindowsAPICodePack-Shell" Version="1.1.1" />
+    <PackageReference Include="WPFThemes.DarkBlend" Version="1.0.8" />
   </ItemGroup>
+
   <ItemGroup>
-    <Resource Include="Resources\Wabba_Mouth.png" />
+    <ProjectReference Include="..\Compression.BSA\Compression.BSA.csproj" />
+    <ProjectReference Include="..\Wabbajack.Common\Wabbajack.Common.csproj" />
+    <ProjectReference Include="..\Wabbajack.Lib\Wabbajack.Lib.csproj" />
   </ItemGroup>
+
   <ItemGroup>
     <Resource Include="Resources\MO2Button.png" />
     <Resource Include="Resources\VortexButton.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\Icons\gog.png" />
-    <Resource Include="Resources\Icons\steam.png" />
-  </ItemGroup>
-  <ItemGroup>
+    <Resource Include="Resources\Wabba_Ded.png" />
+    <Resource Include="Resources\Wabba_Mouth.png" />
     <Resource Include="Resources\Wabba_Mouth_No_Text.png" />
   </ItemGroup>
-  <ItemGroup>
-    <Resource Include="Resources\Wabba_Ded.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <SplashScreen Include="Resources\Wabba_Mouth_Small.png" />
-  </ItemGroup>
-  <ItemGroup>
-    <Folder Include="Interfaces\" />
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+
 </Project>
\ No newline at end of file
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 3aec757b..ea4d5ebb 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -43,6 +43,7 @@ steps:
     configuration: '$(buildConfiguration)'
     testFiltercriteria: 'TestCategory!=ListValidation'
     runInParallel: true
+    otherConsoleOptions: /Framework:netcoreapp3.1
 - task: DownloadSecureFile@1
   inputs:
     secureFile: 'CertFile.p12'