diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..294769d
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,71 @@
+name: Build and Package
+
+on:
+  push:
+    branches: [default]
+  pull_request:
+    branches: [default]
+
+jobs:
+  build:
+    runs-on: windows-latest
+
+    steps:
+      - uses: actions/checkout@v3
+
+      - name: Extract version
+        id: version
+        run: |
+          $version = (Select-String -Path "AutoTrackR2/UpdatePage.xaml.cs" -Pattern 'currentVersion = "(.+?)"' | Select-Object -First 1).Matches.Groups[1].Value
+          echo "version=$version" >> $env:GITHUB_OUTPUT
+
+      - name: Setup .NET
+        uses: actions/setup-dotnet@v3
+        with:
+          dotnet-version: "9.0.x"
+
+      - name: Restore dependencies
+        run: dotnet restore AutoTrackR2.sln
+
+      - name: Build
+        run: dotnet build AutoTrackR2.sln --configuration Release --no-restore
+
+      - name: List build output directories
+        run: |
+          Write-Host "Listing build output directories:"
+          Get-ChildItem -Recurse -Directory -Filter "Release" | ForEach-Object { Write-Host $_.FullName }
+
+      - name: Create artifacts directory
+        run: mkdir artifacts
+
+      - name: Copy build output
+        run: |
+          $releaseDir = Get-ChildItem -Recurse -Directory -Filter "Release" | Select-Object -First 1
+          if ($releaseDir) {
+            Write-Host "Copying from: $($releaseDir.FullName)"
+            Copy-Item "$($releaseDir.FullName)\*" "artifacts\" -Recurse
+          } else {
+            Write-Host "No Release directory found"
+            exit 1
+          }
+
+      - name: Upload application artifact
+        uses: actions/upload-artifact@v4
+        with:
+          name: AutoTrackR2-${{ steps.version.outputs.version }}
+          path: artifacts/
+          retention-days: 5
+
+      - name: Upload visorwipe script
+        uses: actions/upload-artifact@v4
+        with:
+          name: visorwipe.ahk
+          path: AutoTrackR2/scripts/visorwipe.ahk
+          retention-days: 5
+
+      - name: Upload videorecord script
+        uses: actions/upload-artifact@v4
+        with:
+          name: videorecord.ahk
+          path: AutoTrackR2/scripts/videorecord.ahk
+          retention-days: 5
diff --git a/AutoTrackR2/.vscode/launch.json b/AutoTrackR2/.vscode/launch.json
new file mode 100644
index 0000000..01c6023
--- /dev/null
+++ b/AutoTrackR2/.vscode/launch.json
@@ -0,0 +1,26 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            // Use IntelliSense to find out which attributes exist for C# debugging
+            // Use hover for the description of the existing attributes
+            // For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md
+            "name": ".NET Core Launch (console)",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build",
+            // If you have changed target frameworks, make sure to update the program path.
+            "program": "${workspaceFolder}/bin/Debug/net9.0-windows/AutoTrackR2.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
+            "console": "internalConsole",
+            "stopAtEntry": false
+        },
+        {
+            "name": ".NET Core Attach",
+            "type": "coreclr",
+            "request": "attach"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/AutoTrackR2/.vscode/tasks.json b/AutoTrackR2/.vscode/tasks.json
new file mode 100644
index 0000000..40ad6ea
--- /dev/null
+++ b/AutoTrackR2/.vscode/tasks.json
@@ -0,0 +1,41 @@
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/AutoTrackR2.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary;ForceNoAlign"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "publish",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "publish",
+                "${workspaceFolder}/AutoTrackR2.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary;ForceNoAlign"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "watch",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "watch",
+                "run",
+                "--project",
+                "${workspaceFolder}/AutoTrackR2.csproj"
+            ],
+            "problemMatcher": "$msCompile"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/AutoTrackR2/App.xaml b/AutoTrackR2/App.xaml
index 9df8cbc..3f3362f 100644
--- a/AutoTrackR2/App.xaml
+++ b/AutoTrackR2/App.xaml
@@ -181,7 +181,7 @@
             <Setter Property="Template">
                 <Setter.Value>
                     <ControlTemplate TargetType="Slider">
-                        <Grid Width="120" Height="30" HorizontalAlignment="Left" Margin="58,-6,0,0">
+                        <Grid Width="200" Height="30" HorizontalAlignment="Left" Margin="58,-6,0,0">
                             <!-- Track Background -->
                             <Border Background="{DynamicResource BackgroundDarkBrush}" BorderBrush="{DynamicResource AccentBrush}" BorderThickness="2" CornerRadius="15" Margin="0,0,-5,-4" />
 
diff --git a/AutoTrackR2/App.xaml.cs b/AutoTrackR2/App.xaml.cs
index 85786d2..115d332 100644
--- a/AutoTrackR2/App.xaml.cs
+++ b/AutoTrackR2/App.xaml.cs
@@ -7,8 +7,7 @@ namespace AutoTrackR2
     /// <summary>
     /// Interaction logic for App.xaml
     /// </summary>
-    public partial class App : Application
+    public partial class App : System.Windows.Application
     {
     }
-
 }
diff --git a/AutoTrackR2/Assets/BOBGREL.png b/AutoTrackR2/Assets/BOBGREL.png
new file mode 100644
index 0000000..aa66775
Binary files /dev/null and b/AutoTrackR2/Assets/BOBGREL.png differ
diff --git a/AutoTrackR2/Assets/BlightVeil.png b/AutoTrackR2/Assets/BlightVeil.png
new file mode 100644
index 0000000..6346b10
Binary files /dev/null and b/AutoTrackR2/Assets/BlightVeil.png differ
diff --git a/AutoTrackR2/Assets/Gankhub.png b/AutoTrackR2/Assets/Gankhub.png
new file mode 100644
index 0000000..194bbfd
Binary files /dev/null and b/AutoTrackR2/Assets/Gankhub.png differ
diff --git a/AutoTrackR2/Assets/HEX.png b/AutoTrackR2/Assets/HEX.png
index bdfee11..e3fa43c 100644
Binary files a/AutoTrackR2/Assets/HEX.png and b/AutoTrackR2/Assets/HEX.png differ
diff --git a/AutoTrackR2/Assets/IP.png b/AutoTrackR2/Assets/IP.png
new file mode 100644
index 0000000..99fa950
Binary files /dev/null and b/AutoTrackR2/Assets/IP.png differ
diff --git a/AutoTrackR2/Assets/MAMMON.png b/AutoTrackR2/Assets/MAMMON.png
new file mode 100644
index 0000000..93e5c02
Binary files /dev/null and b/AutoTrackR2/Assets/MAMMON.png differ
diff --git a/AutoTrackR2/Assets/NMOS.png b/AutoTrackR2/Assets/NMOS.png
new file mode 100644
index 0000000..bd5e76c
Binary files /dev/null and b/AutoTrackR2/Assets/NMOS.png differ
diff --git a/AutoTrackR2/Assets/RACKETEERS.png b/AutoTrackR2/Assets/RACKETEERS.png
new file mode 100644
index 0000000..0159280
Binary files /dev/null and b/AutoTrackR2/Assets/RACKETEERS.png differ
diff --git a/AutoTrackR2/Assets/SHADOWMOSES.png b/AutoTrackR2/Assets/SHADOWMOSES.png
new file mode 100644
index 0000000..3826bab
Binary files /dev/null and b/AutoTrackR2/Assets/SHADOWMOSES.png differ
diff --git a/AutoTrackR2/Assets/chibifox.png b/AutoTrackR2/Assets/chibifox.png
new file mode 100644
index 0000000..7c6c2d3
Binary files /dev/null and b/AutoTrackR2/Assets/chibifox.png differ
diff --git a/AutoTrackR2/Assets/cinderborn.png b/AutoTrackR2/Assets/cinderborn.png
new file mode 100644
index 0000000..b684f40
Binary files /dev/null and b/AutoTrackR2/Assets/cinderborn.png differ
diff --git a/AutoTrackR2/Assets/shadowguard.png b/AutoTrackR2/Assets/shadowguard.png
new file mode 100644
index 0000000..5b1c2d6
Binary files /dev/null and b/AutoTrackR2/Assets/shadowguard.png differ
diff --git a/AutoTrackR2/AutoTrackR2.csproj b/AutoTrackR2/AutoTrackR2.csproj
index d49ceef..3742d38 100644
--- a/AutoTrackR2/AutoTrackR2.csproj
+++ b/AutoTrackR2/AutoTrackR2.csproj
@@ -6,6 +6,7 @@
     <Nullable>enable</Nullable>
     <ImplicitUsings>enable</ImplicitUsings>
     <UseWPF>true</UseWPF>
+	<UseWindowsForms>false</UseWindowsForms>
     <Configurations>Debug;Release;Test</Configurations>
     <Platforms>AnyCPU;x64</Platforms>
     <ApplicationIcon>AutoTrackR2.ico</ApplicationIcon>
@@ -13,27 +14,63 @@
 
   <ItemGroup>
     <None Remove="Assets\AVSQN.png" />
+    <None Remove="Assets\BlightVeil.png" />
+    <None Remove="Assets\BOBGREL.png" />
+    <None Remove="Assets\chibifox.png" />
+    <None Remove="Assets\cinderborn.png" />
     <None Remove="Assets\D3VL.png" />
     <None Remove="Assets\EMP.png" />
+    <None Remove="Assets\Gankhub.png" />
     <None Remove="Assets\HEX.png" />
     <None Remove="Assets\HIT.png" />
+    <None Remove="Assets\MAMMON.png" />
+    <None Remove="Assets\NMOS.png" />
     <None Remove="Assets\NW.png" />
+    <None Remove="Assets\RACKETEERS.png" />
+    <None Remove="Assets\shadowguard.png" />
+    <None Remove="Assets\SHADOWMOSES.png" />
     <None Remove="Assets\VOX.png" />
     <None Remove="Assets\WRITH.png" />
     <None Remove="config.ini" />
     <None Remove="Fonts\Orbitron-Bold.ttf" />
     <None Remove="Fonts\Roboto-Regular.ttf" />
-    <None Remove="KillTrackR_MainScript.ps1" />
   </ItemGroup>
 
   <ItemGroup>
     <Content Include="AutoTrackR2.ico" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Resource Include="Assets\BlightVeil.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\cinderborn.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\Gankhub.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\HEX.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\IP.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\NMOS.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+  </ItemGroup>
+
   <ItemGroup>
     <Resource Include="Assets\AVSQN.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
+    <Resource Include="Assets\BOBGREL.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\chibifox.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
     <Resource Include="Assets\D3VL.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
@@ -46,15 +83,24 @@
     <Resource Include="Assets\AutoTrackR.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
-    <Resource Include="Assets\HEX.png">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </Resource>
     <Resource Include="Assets\HIT.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
+    <Resource Include="Assets\MAMMON.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
     <Resource Include="Assets\NW.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
+    <Resource Include="Assets\RACKETEERS.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\shadowguard.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
+    <Resource Include="Assets\SHADOWMOSES.png">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Resource>
     <Resource Include="Assets\VOX.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
@@ -68,9 +114,15 @@
     <Resource Include="Fonts\Roboto-Regular.ttf">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Resource>
-    <EmbeddedResource Include="KillTrackR_MainScript.ps1">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </EmbeddedResource>
+  </ItemGroup>
+
+  <ItemGroup>
+    <None Update="KillTrackR_MainScript.ps1">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Update="update.ps1">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
 
 </Project>
diff --git a/AutoTrackR2/ConfigPage.xaml b/AutoTrackR2/ConfigPage.xaml
index 7872246..3b2016f 100644
--- a/AutoTrackR2/ConfigPage.xaml
+++ b/AutoTrackR2/ConfigPage.xaml
@@ -77,11 +77,11 @@
                     <TextBlock Text="Theme:" Foreground="{DynamicResource TextBrush}" FontSize="16" Margin="0,7,0,5"/>
                     <Slider x:Name="ThemeSlider"
                             Minimum="0" 
-                            Maximum="12"
+                            Maximum="21"
                             Value="0"
                             TickFrequency="1"
                             IsSnapToTickEnabled="True"
-                            ValueChanged="ThemeSlider_ValueChanged" Width="200"
+                            ValueChanged="ThemeSlider_ValueChanged" Width="447"
                             Style="{StaticResource ThreePositionSlider}" 
                     />
                 </StackPanel>
diff --git a/AutoTrackR2/ConfigPage.xaml.cs b/AutoTrackR2/ConfigPage.xaml.cs
index 5ff2f69..ec23dea 100644
--- a/AutoTrackR2/ConfigPage.xaml.cs
+++ b/AutoTrackR2/ConfigPage.xaml.cs
@@ -193,13 +193,13 @@ namespace AutoTrackR2
                     break;
                 case 6: // D3VL Theme
                     UpdateThemeColors(
-                        (Color)ColorConverter.ConvertFromString("#000000"), // Accent/Border
-                        (Color)ColorConverter.ConvertFromString("#3E3E3E"), // Button
-                        (Color)ColorConverter.ConvertFromString("#4C1C1C"), // Background
+                        (Color)ColorConverter.ConvertFromString("#AA0000"), // Accent/Border
+                        (Color)ColorConverter.ConvertFromString("#333333"), // Button
+                        (Color)ColorConverter.ConvertFromString("#220000"), // Background
                         (Color)ColorConverter.ConvertFromString("#FF0000"), // Text
                         (Color)ColorConverter.ConvertFromString("#A88F2C")  // AltText
                     );
-                    ChangeLogo("/Assets/D3VL.png", (Color)ColorConverter.ConvertFromString("#000000"));
+                    ChangeLogo("/Assets/D3VL.png", (Color)ColorConverter.ConvertFromString("#CC0000"));
                     break;
                 case 7: // HIT Theme
                     UpdateThemeColors(
@@ -214,22 +214,22 @@ namespace AutoTrackR2
                 case 8: // WRAITH Theme
                     UpdateThemeColors(
                         (Color)ColorConverter.ConvertFromString("#ff0000"), // Accent/Border
-                        (Color)ColorConverter.ConvertFromString("#ce8946"), // Button
-                        (Color)ColorConverter.ConvertFromString("#000000"), // Background
-                        (Color)ColorConverter.ConvertFromString("#ce8946"), // Text
-                        (Color)ColorConverter.ConvertFromString("#A88F2C")  // AltText
+                        (Color)ColorConverter.ConvertFromString("#2a2a2a"), // Button
+                        (Color)ColorConverter.ConvertFromString("#0a0a0a"), // Background
+                        (Color)ColorConverter.ConvertFromString("#DFDFDF"), // Text
+                        (Color)ColorConverter.ConvertFromString("#8B0000")  // AltText
                     );
                     ChangeLogo("/Assets/WRITH.png", (Color)ColorConverter.ConvertFromString("#ff0000"));
                     break;
-                case 9: // VOX Theme
+                case 9: // Cinderborn Theme
                     UpdateThemeColors(
-                        (Color)ColorConverter.ConvertFromString("#C0C0C0"), // Accent/Border
+                        (Color)ColorConverter.ConvertFromString("#E4080A"), // Accent/Border
                         (Color)ColorConverter.ConvertFromString("#1C1C1C"), // Button
-                        (Color)ColorConverter.ConvertFromString("#424242"), // Background
-                        (Color)ColorConverter.ConvertFromString("#FFD700"), // Text
-                        (Color)ColorConverter.ConvertFromString("#817E79")  // AltText
+                        (Color)ColorConverter.ConvertFromString("#000000"), // Background
+                        (Color)ColorConverter.ConvertFromString("#FE934C"), // Text
+                        (Color)ColorConverter.ConvertFromString("#FE934C")  // AltText
                     );
-                    ChangeLogo("/Assets/VOX.png", (Color)ColorConverter.ConvertFromString("#FFD700"));
+                    ChangeLogo("/Assets/cinderborn.png", (Color)ColorConverter.ConvertFromString("#DE5900"));
                     break;
                 case 10: // EMP Theme
                     UpdateThemeColors(
@@ -261,6 +261,96 @@ namespace AutoTrackR2
                     );
                     ChangeLogo("/Assets/HEX.png", (Color)ColorConverter.ConvertFromString("#39FF14"));
                     break;
+                case 13: // Mammon Theme
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#FFD700"), // Accent/Border - Royal Gold
+                        (Color)ColorConverter.ConvertFromString("#2C2C2C"), // Button - Dark Gray
+                        (Color)ColorConverter.ConvertFromString("#1A1A1A"), // Background - Rich Black
+                        (Color)ColorConverter.ConvertFromString("#FFFFFF"), // Text - White
+                        (Color)ColorConverter.ConvertFromString("#DAA520")  // AltText - Golden Rod
+                    );
+                    ChangeLogo("/Assets/MAMMON.png", (Color)ColorConverter.ConvertFromString("#FFD700"));
+                    break;
+                case 14: // Shadow Moses Theme
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#FF69B4"), // Accent/Border - Hot Pink
+                        (Color)ColorConverter.ConvertFromString("#2C2C2C"), // Button - Dark Gray
+                        (Color)ColorConverter.ConvertFromString("#2C1F28"), // Background - Dark Pink-Gray
+                        (Color)ColorConverter.ConvertFromString("#E6E6E6"), // Text - Light Gray
+                        (Color)ColorConverter.ConvertFromString("#FF1493")  // AltText - Deep Pink
+                    );
+                    ChangeLogo("/Assets/ShadowMoses.png", (Color)ColorConverter.ConvertFromString("#FF69B4"));
+                    break;
+                case 15: // Shadow Guardian
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#AC9248"), // Accent/Border - NyQuil Dark Blue
+                        (Color)ColorConverter.ConvertFromString("#000920"), // Button - Midnight Blue
+                        (Color)ColorConverter.ConvertFromString("#000000"), // Background - Deep NyQuil Blue
+                        (Color)ColorConverter.ConvertFromString("#B9B9B9"), // Text - Light Steel Blue
+                        (Color)ColorConverter.ConvertFromString("#D20103")  // AltText - Steel Blue
+                    );
+                    ChangeLogo("/Assets/shadowguard.png", (Color)ColorConverter.ConvertFromString("#E4080A"));
+                    break;
+                case 16: // Feezy
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#FFA500"), // Accent/Border - Orange
+                        (Color)ColorConverter.ConvertFromString("#FFE4B5"), // Button - Moccasin
+                        (Color)ColorConverter.ConvertFromString("#FFF8DC"), // Background - Cornsilk
+                        (Color)ColorConverter.ConvertFromString("#8B4513"), // Text - Saddle Brown
+                        (Color)ColorConverter.ConvertFromString("#FF7F50")  // AltText - Coral
+                    );
+                    ChangeLogo("/Assets/chibifox.png", (Color)ColorConverter.ConvertFromString("#FFA500"));
+                    break;
+                case 17: // NMOS
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#EAB787"), // Accent/Border
+                        (Color)ColorConverter.ConvertFromString("#601C1B"), // Button
+                        (Color)ColorConverter.ConvertFromString("#170402"), // Background
+                        (Color)ColorConverter.ConvertFromString("#F6DBAD"), // Text
+                        (Color)ColorConverter.ConvertFromString("#EBCAA0")  // AltText
+                    );
+                    ChangeLogo("/Assets/NMOS.png", (Color)ColorConverter.ConvertFromString("#EAB787"));
+                    break;
+                case 18: // Rakk Theme
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#FF00FF"), // Accent/Border - Magenta
+                        (Color)ColorConverter.ConvertFromString("#1C1C1C"), // Button - Dark Gray
+                        (Color)ColorConverter.ConvertFromString("#0A0A0A"), // Background - Nearly Black
+                        (Color)ColorConverter.ConvertFromString("#E6E6E6"), // Text - Light Gray
+                        (Color)ColorConverter.ConvertFromString("#00BFFF")  // AltText - Deep Sky Blue
+                    );
+                    ChangeLogo("/Assets/RACKETEERS.png", (Color)ColorConverter.ConvertFromString("#FF00FF"));
+                    break;
+                case 19: // Blightveil Theme
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#8B4AC6"), // Accent/Border - Purple from the logo border
+                        (Color)ColorConverter.ConvertFromString("#2A2035"), // Button - Darker purple for buttons
+                        (Color)ColorConverter.ConvertFromString("#1A1621"), // Background - Very dark purple/black
+                        (Color)ColorConverter.ConvertFromString("#FFFFFF"), // Text - White like the logo text
+                        (Color)ColorConverter.ConvertFromString("#FF3333")  // AltText - Red like the eyes
+                    );
+                    ChangeLogo("/Assets/Blightveil.png", (Color)ColorConverter.ConvertFromString("#8B4AC6"));
+                    break;
+                case 20: // Gankhub Theme
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#ffa500"), // Accent/Border
+                        (Color)ColorConverter.ConvertFromString("#2C2C2C"), // Button
+                        (Color)ColorConverter.ConvertFromString("#1b1b1b"), // Background
+                        (Color)ColorConverter.ConvertFromString("#FFFFFF"), // Text
+                        (Color)ColorConverter.ConvertFromString("#ffa500")  // AltText
+                    );
+                    ChangeLogo("/Assets/Gankhub.png");
+                    break;
+                case 21: // IronPoint
+                    UpdateThemeColors(
+                        (Color)ColorConverter.ConvertFromString("#C83300"), // Accent/Border
+                        (Color)ColorConverter.ConvertFromString("#2D2D2D"), // Button
+                        (Color)ColorConverter.ConvertFromString("#161515"), // Background
+                        (Color)ColorConverter.ConvertFromString("#ffffff"), // Text
+                        (Color)ColorConverter.ConvertFromString("#aaaaaa")  // AltText
+                    );
+                    ChangeLogo("/Assets/IP.png", (Color)ColorConverter.ConvertFromString("#3F1210"));
+                    break;
             }
         }
 
diff --git a/AutoTrackR2/HomePage.xaml.cs b/AutoTrackR2/HomePage.xaml.cs
index 9ef801c..f65af75 100644
--- a/AutoTrackR2/HomePage.xaml.cs
+++ b/AutoTrackR2/HomePage.xaml.cs
@@ -15,6 +15,12 @@ namespace AutoTrackR2
         public HomePage()
         {
             InitializeComponent();
+
+            // Get the current month
+            string currentMonth = DateTime.Now.ToString("MMMM", CultureInfo.InvariantCulture);
+
+            // Set the TextBlock text
+            KillTallyTitle.Text = $"Kill Tally - {currentMonth}";
         }
 
         private Process runningProcess; // Field to store the running process
@@ -59,8 +65,9 @@ namespace AutoTrackR2
             }
         }
 
-        private void StartButton_Click(object sender, RoutedEventArgs e)
+        public void StartButton_Click(object sender, RoutedEventArgs e)
         {
+            UpdateButtonState(true);
             string scriptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "KillTrackR_MainScript.ps1");
             TailFileAsync(scriptPath);
         }
diff --git a/AutoTrackR2/KillTrackR_MainScript.ps1 b/AutoTrackR2/KillTrackR_MainScript.ps1
index 9fc3298..6a0d83a 100644
--- a/AutoTrackR2/KillTrackR_MainScript.ps1
+++ b/AutoTrackR2/KillTrackR_MainScript.ps1
@@ -1,4 +1,4 @@
-$TrackRver = "2.0r"
+$TrackRver = "2.09"
 
 # Path to the config file
 $appName = "AutoTrackR2"
@@ -32,33 +32,37 @@ $videoRecord = $config.VideoRecord
 $offlineMode = $config.OfflineMode
 
 if ($offlineMode -eq 1){
-	$offlineMode = $true
+    $offlineMode = $true
 } else {
-	$offlineMode = $false
+    $offlineMode = $false
 }
 Write-Output "PlayerName=OfflineMode: $offlineMode"
 
 if ($videoRecord -eq 1){
-	$videoRecord = $true
+    $videoRecord = $true
 } else {
-	$videoRecord = $false
+    $videoRecord = $false
 }
 Write-Output "PlayerName=VideoRecord: $videoRecord"
 
 if ($visorWipe -eq 1){
-	$visorWipe = $true
+    $visorWipe = $true
 } else {
-	$visorWipe = $false
+    $visorWipe = $false
 }
 Write-Output "PlayerName=VisorWipe: $visorWipe"
 
 If (Test-Path $logFilePath) {
-	Write-Output "PlayerName=Logfile found"
+    Write-Output "PlayerName=Logfile found"
 } else {
-	Write-Output "Logfile not found."
+    Write-Output "Logfile not found."
 }
+
 If ($null -ne $apiUrl){
-Write-output "PlayerName=$apiURL"
+    if ($apiUrl -notlike "*/register-kill") {
+        $apiUrl = $apiUrl.TrimEnd("/") + "/register-kill"
+    }
+    Write-output "PlayerName=$apiURL"
 }
 
 # Ship Manufacturers
@@ -79,19 +83,26 @@ $prefixes = @(
     "ESPR",
     "KRIG",
     "GRIN",
-    "XNAA"
+    "XNAA",
+	"MRAI"
 )
 
 # Define the regex pattern to extract information
 $killPattern = "<Actor Death> CActor::Kill: '(?<EnemyPilot>[^']+)' \[\d+\] in zone '(?<EnemyShip>[^']+)' killed by '(?<Player>[^']+)' \[[^']+\] using '(?<Weapon>[^']+)' \[Class (?<Class>[^\]]+)\] with damage type '(?<DamageType>[^']+)'"
-$puPattern = '<\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z> \[Notice\] <ContextEstablisherTaskFinished> establisher="CReplicationModel" message="CET completed" taskname="StopLoadingScreen" state=[^ ]+ status="Finished" runningTime=\d+\.\d+ numRuns=\d+ map="megamap" gamerules="SC_Default" sessionId="[a-f0-9\-]+" \[Team_Network\]\[Network\]\[Replication\]\[Loading\]\[Persistence\]'
-$acPattern = "ArenaCommanderFeature"
-$loadoutPattern = '\[InstancedInterior\] OnEntityLeaveZone - InstancedInterior \[(?<InstancedInterior>[^\]]+)\] \[\d+\] -> Entity \[(?<Entity>[^\]]+)\] \[\d+\] -- m_openDoors\[\d+\], m_managerGEID\[(?<ManagerGEID>\d+)\], m_ownerGEID\[(?<OwnerGEID>[^\[]+)\]'
+$puPattern = '<\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z> \[Notice\] <ContextEstablisherTaskFinished> establisher="CReplicationModel" message="CET completed" taskname="StopLoadingScreen" state=[^\s()]+\(\d+\) status="Finished" runningTime=\d+\.\d+ numRuns=\d+ map="megamap" gamerules="SC_Default" sessionId="[a-f0-9\-]+" \[Team_Network\]\[Network\]\[Replication\]\[Loading\]\[Persistence\]'
+$loadoutPattern = '<Jump Drive State Changed>.*.adam: (?<ShipName>.*.) in'
+$acPattern =  "Requesting Mode Change"  # "ArenaCommanderFeature"
 $shipManPattern = "^(" + ($prefixes -join "|") + ")"
 # $loginPattern = "\[Notice\] <AccountLoginCharacterStatus_Character> Character: createdAt [A-Za-z0-9]+ - updatedAt [A-Za-z0-9]+ - geid [A-Za-z0-9]+ - accountId [A-Za-z0-9]+ - name (?<Player>[A-Za-z0-9_-]+) - state STATE_CURRENT" # KEEP THIS INCASE LEGACY LOGIN IS REMOVED 
 $loginPattern = "\[Notice\] <Legacy login response> \[CIG-net\] User Login Success - Handle\[(?<Player>[A-Za-z0-9_-]+)\]"
 $cleanupPattern = '^(.+?)_\d+$'
-$versionPattern = "--system-trace-env-id='pub-sc-alpha-(?<gameversion>\d{4}-\d{7})'"
+$versionPattern = "--system-trace-env-id='pub-sc-alpha-(?<gameversion>\d{3,4}-\d{7})'"
+$vehiclePattern = "<(?<timestamp>[^>]+)> \[Notice\] <Vehicle Destruction> CVehicle::OnAdvanceDestroyLevel: " +
+    "Vehicle '(?<vehicle>[^']+)' \[\d+\] in zone '(?<vehicle_zone>[^']+)' " +
+    "\[pos x: (?<pos_x>[-\d\.]+), y: (?<pos_y>[-\d\.]+), z: (?<pos_z>[-\d\.]+) " +
+    "vel x: [^,]+, y: [^,]+, z: [^\]]+\] driven by '(?<driver>[^']+)' \[\d+\] " +
+    "advanced from destroy level (?<destroy_level_from>\d+) to (?<destroy_level_to>\d+) " +
+    "caused by '(?<caused_by>[^']+)' \[\d+\] with '(?<damage_type>[^']+)'"
 
 # Lookup Patterns
 $joinDatePattern = '<span class="label">Enlisted</span>\s*<strong class="value">([^<]+)</strong>'
@@ -100,15 +111,22 @@ $ueePattern = '<p class="entry citizen-record">\s*<span class="label">UEE Citize
 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
 $process = Get-Process | Where-Object {$_.Name -like "AutoTrackR2"}
 $global:killTally = 0
-$global:GameMode = ""
-$global:GameVersion = ""
 
 # Load historic kills from csv
 if (Test-Path "$scriptFolder\Kill-Log.csv") {
 	$historicKills = Import-CSV "$scriptFolder\Kill-log.csv"
+	$currentDate = Get-Date
+	$dateFormat = "dd MMM yyyy HH:mm UTC"
 	foreach ($kill in $historicKills) {
-		Write-Output "NewKill=throwaway,$($kill.EnemyPilot),$($kill.EnemyShip),$($kill.OrgAffiliation),$($kill.Enlisted),$($kill.RecordNumber),$($kill.KillTime),$($kill.PFP)"
-		$global:killTally++
+		$killDate = [datetime]::ParseExact($kill.KillTime.Trim(), $dateFormat, [System.Globalization.CultureInfo]::InvariantCulture)
+		If ($killdate.year -eq $currentDate.Year -and $killdate.month -eq $currentDate.Month) {
+			$global:killTally++
+		}
+		Try {
+			Write-Output "NewKill=throwaway,$($kill.EnemyPilot),$($kill.EnemyShip),$($kill.OrgAffiliation),$($kill.Enlisted),$($kill.RecordNumber),$($kill.KillTime), $($kill.PFP)"
+		} Catch {
+			Write-Output "Error Loading Kill: $($kill.EnemyPilot)"
+		}
 	}
 }
 Write-Output "KillTally=$global:killTally"
@@ -130,19 +148,13 @@ Do {
         }
 		# Get Loadout
 		if ($line -match $loadoutPattern) {
-			$entity = $matches['Entity']
-			$ownerGEID = $matches['OwnerGEID']
-
-			If ($ownerGEID -eq $global:userName -and $entity -match $shipManPattern) {
-				$tryloadOut = $entity
-				If ($tryloadOut -match $cleanupPattern){
+				If ($matches['ShipName'] -match $cleanupPattern){
 					if ($null -ne $matches[1]){
 						$global:loadOut = $matches[1]
 					}
-				}
-			}
+		        }
+		    Write-Output "PlayerShip=$global:loadOut"
 		}
-		Write-Output "PlayerShip=$global:loadOut"
 
 		If ($line -match $versionPattern){
 			$global:GameVersion = $matches['gameversion']
@@ -171,6 +183,14 @@ function Read-LogEntry {
     param (
         [string]$line
     )
+
+    # Look for vehicle events
+    if ($line -match $vehiclePattern) {
+        # Access the named capture groups from the regex match
+        $global:vehicle_id = $matches['vehicle']
+        $global:location = $matches['vehicle_zone']
+
+    }
     
     # Apply the regex pattern to the line
     if ($line -match $killPattern) {
@@ -182,6 +202,15 @@ function Read-LogEntry {
 		$damageType = $matches['DamageType']
 		$ship = $global:loadOut
 
+        If ($enemyShip -ne "vehicle_id"){
+            
+            $global:got_location = $location
+        }
+        else
+        {
+            $global:got_location = "NONE"
+        }
+
 		Try {
 			$page1 = Invoke-WebRequest -uri "https://robertsspaceindustries.com/citizens/$enemyPilot"
 		} Catch {
@@ -193,11 +222,12 @@ function Read-LogEntry {
 			if ($null -eq (Get-Process -ID $parentApp -ErrorAction SilentlyContinue)) {
 				Stop-Process -Id $PID -Force
 			}
-			
-			If ($enemyShip -eq $global:lastKill){
-				$enemyShip = "Passenger"
-			} Else {
-				$global:lastKill = $enemyShip
+			If ($enemyShip -ne "Player"){
+				If ($enemyShip -eq $global:lastKill){
+					$enemyShip = "Passenger"
+				} Else {
+					$global:lastKill = $enemyShip
+				}
 			}
 
 			If ($player -eq $global:userName -and $enemyPilot -ne $global:userName){
@@ -211,17 +241,21 @@ function Read-LogEntry {
 					$global:loadOut = "AEGS_Idris"
 					$ship = "AEGS_Idris"
 				}
-				if ($damageType -like "*bullet*") {
+				if ($damageType -eq "Bullet" -or $weapon -like "apar_special_ballistic*") {
 					$ship = "Player"
+					$enemyShip = "Player"
+					$global:got_location = "NONE"
 				}
 				If ($ship -match $cleanupPattern){
 					$ship = $matches[1]
 				}
 				if ($ship -notmatch $shipManPattern){
 					$ship = "Player"
+					$global:got_location = "NONE"
 				}
 				If ($enemyShip -notmatch $shipManPattern -and $enemyShip -notlike "Passenger" ) {
 					$enemyShip = "Player"
+					$global:got_location = "NONE"
 				}
 			
 				# Repeatedly remove all suffixes
@@ -238,7 +272,7 @@ function Read-LogEntry {
 					$ship = $ship -replace '-00(1|2|3|4|5|6|7|8|9|0)$', ''
 				}
 
-				$KillTime = (Get-Date).ToUniversalTime().ToString("dd MMM yyyy HH:mm 'UTC'")
+				$KillTime = (Get-Date).ToUniversalTime().ToString("dd MMM yyyy HH:mm 'UTC'", [System.Globalization.CultureInfo]::InvariantCulture)
 			
 				# Get Enlisted Date
 				if ($($page1.content) -match $joinDatePattern) {
@@ -249,7 +283,11 @@ function Read-LogEntry {
 				}
 
 				# Check if there are any matches
-				$enemyOrgs = $page1.links[3].innerHTML
+				If ($null -eq $page1.links[0].innerHTML) {
+					$enemyOrgs = $page1.links[4].innerHTML
+				} Else {
+					$enemyOrgs = $page1.links[3].innerHTML
+				}
 
 				if ($null -eq $enemyOrgs) {
 					$enemyOrgs = "-"
@@ -260,7 +298,7 @@ function Read-LogEntry {
 					# The matched UEE Citizen Record number is in $matches[1]
 					$citizenRecord = $matches[1]
 				} else {
-					$citizenRecord = "-"
+					$citizenRecord = "n/a"
 				}
 				If ($citizenRecord -eq "n/a") {
 					$citizenRecordAPI = "-1"
@@ -295,6 +333,7 @@ function Read-LogEntry {
 						game_version	= $global:GameVersion
 						gamemode		= $global:GameMode
 						trackr_version	= $TrackRver
+                        location        = $got_location
 					}
 
 					# Headers which may or may not be necessary
@@ -308,6 +347,7 @@ function Read-LogEntry {
 						# Send the POST request with JSON data
 						$null = Invoke-RestMethod -Uri $apiURL -Method Post -Body ($data | ConvertTo-Json -Depth 5) -Headers $headers
 						$logMode = "API"
+                        $global:got_location = "NONE"
 					} catch {
 						# Catch and display errors
 						$apiError = $_
@@ -323,6 +363,7 @@ function Read-LogEntry {
 
 				# Create an object to hold the data
 				$killData = [PSCustomObject]@{
+					Kill			 = "Kill"
 					KillTime         = $killTime
 					EnemyPilot       = $enemyPilot
 					EnemyShip        = $enemyShip
@@ -340,6 +381,13 @@ function Read-LogEntry {
 					PFP				 = $victimPFP
 				}
 
+				# Remove commas from all properties
+				foreach ($property in $killData.PSObject.Properties) {
+					if ($property.Value -is [string]) {
+						$property.Value = $property.Value -replace ',', ''
+					}
+				}
+
 				# Export to CSV
 				if (-Not (Test-Path $csvPath)) {
 					# If file doesn't exist, create it with headers
@@ -415,22 +463,49 @@ function Read-LogEntry {
 	}
 
 	#Set loadout 
-	if ($line -match $loadoutPattern) {
-		$entity = $matches['Entity']
-		$ownerGEID = $matches['OwnerGEID']
+    if ($line -match $loadoutPattern) {
+            If ($matches['ShipName'] -match $cleanupPattern){
+                if ($null -ne $matches[1]){
+                    $global:loadOut = $matches[1]
+                }
+            }
+        Write-Output "PlayerShip=$global:loadOut"
+    }
 
-        If ($ownerGEID -eq $global:userName -and $entity -match $shipManPattern) {
-			$tryloadOut = $entity
-			If ($tryloadOut -match $cleanupPattern){
-				$global:loadOut = $matches[1]
-			}
-			Write-Output "PlayerShip=$global:loadOut"
-		}
-	}
 }
 
+
 # Monitor the log file and process new lines as they are added
 Get-Content -Path $logFilePath -Wait -Tail 0 | ForEach-Object {
     Read-LogEntry $_
 }
-#>
\ No newline at end of file
+
+<#
+# Open the log file with shared access for reading and writing
+$fileStream = [System.IO.FileStream]::new($logFilePath, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite)
+$reader = [System.IO.StreamReader]::new($fileStream, [System.Text.Encoding]::UTF8)  # Ensure we're reading as UTF-8
+
+try {
+    # Move to the end of the file to start monitoring new entries
+    $reader.BaseStream.Seek(0, [System.IO.SeekOrigin]::End)
+
+    while ($true) {
+        # Read the next line from the file
+        $line = $reader.ReadLine()
+
+        # Ensure we have new content to process
+        if ($line) {
+            # Process the line (this is where your log entry handler would go)
+            Read-LogEntry $line
+        }
+
+        # Sleep for a brief moment to avoid high CPU usage
+        Start-Sleep -Milliseconds 100
+    }
+}
+finally {
+    # Ensure we close the reader and file stream properly when done
+    $reader.Close()
+    $fileStream.Close()
+}
+#>
diff --git a/AutoTrackR2/MainWindow.xaml.cs b/AutoTrackR2/MainWindow.xaml.cs
index 1d828d0..e432e97 100644
--- a/AutoTrackR2/MainWindow.xaml.cs
+++ b/AutoTrackR2/MainWindow.xaml.cs
@@ -11,6 +11,7 @@ namespace AutoTrackR2
 {
     public partial class MainWindow : Window
     {
+
         private Dictionary<string, bool> tabStates = new Dictionary<string, bool>
         {
             { "HomeTab", true }, // HomeTab is selected by default
@@ -49,6 +50,18 @@ namespace AutoTrackR2
             InitializeConfigPage();
 
             UpdateTabVisuals();
+
+            Loaded += MainWindow_Loaded; // Handle Loaded event
+        }
+
+        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+        {
+            // Check command-line arguments after the window is loaded
+            var args = Environment.GetCommandLineArgs();
+            if (args.Contains("-start", StringComparer.OrdinalIgnoreCase))
+            {
+                homePage.StartButton_Click(null, null);
+            }
         }
 
         private void CloseWindow(object sender, RoutedEventArgs e)
diff --git a/AutoTrackR2/UpdatePage.xaml.cs b/AutoTrackR2/UpdatePage.xaml.cs
index b085d80..dc92638 100644
--- a/AutoTrackR2/UpdatePage.xaml.cs
+++ b/AutoTrackR2/UpdatePage.xaml.cs
@@ -9,7 +9,7 @@ namespace AutoTrackR2
 {
     public partial class UpdatePage : UserControl
     {
-        private string currentVersion = "v2.0-release";
+        private string currentVersion = "v2.09";
         private string latestVersion;
 
         public UpdatePage()
@@ -86,8 +86,8 @@ namespace AutoTrackR2
 
         private bool IsNewVersionAvailable(string currentVersion, string latestVersion)
         {
-            // Compare version strings (you can implement more complex version parsing logic if needed)
-            return string.Compare(currentVersion, latestVersion, StringComparison.Ordinal) < 0;
+            // Return true if the versions are different
+            return !currentVersion.Equals(latestVersion, StringComparison.Ordinal);
         }
 
         private async void InstallButton_Click(object sender, RoutedEventArgs e)
@@ -95,25 +95,22 @@ namespace AutoTrackR2
             try
             {
                 InstallButton.IsEnabled = false;
-                InstallButton.Content = "Preparing to Install...";
+                InstallButton.Content = "Preparing to Update...";
 
-                // Get the download URL for the latest release
-                string downloadUrl = await GetLatestMsiDownloadUrlFromGitHub();
+                // Get the path to the update.ps1 script
+                string scriptPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "update.ps1");
 
-                // Download the installer to the user's Downloads folder
-                string installerPath = await DownloadInstallerToDownloads(downloadUrl);
+                // Run the PowerShell script
+                RunPowerShellScript(scriptPath);
 
-                // Launch the installer for manual installation
-                RunInstaller(installerPath);
-
-                // Gracefully close the app after launching the installer
+                // Gracefully close the app after running the script
                 Application.Current.Shutdown();
 
-                MessageBox.Show("Update installer has been downloaded. Please finish the installation manually.", "Update Ready", MessageBoxButton.OK, MessageBoxImage.Information);
+                MessageBox.Show("Update process has started. Please follow the instructions in the PowerShell script.", "Update Started", MessageBoxButton.OK, MessageBoxImage.Information);
             }
             catch (Exception ex)
             {
-                MessageBox.Show($"Failed to download and launch the installer: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+                MessageBox.Show($"Failed to run the update script: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
             }
             finally
             {
@@ -122,84 +119,26 @@ namespace AutoTrackR2
             }
         }
 
-        private async Task<string> GetLatestMsiDownloadUrlFromGitHub()
-        {
-            using var client = new HttpClient();
-            client.DefaultRequestHeaders.Add("User-Agent", "AutoTrackR2");
-
-            string repoOwner = "BubbaGumpShrump";
-            string repoName = "AutoTrackR2";
-
-            try
-            {
-                // Fetch the latest release info from GitHub
-                var url = $"https://api.github.com/repos/{repoOwner}/{repoName}/releases/latest";
-                var response = await client.GetStringAsync(url);
-
-                // Parse the JSON response
-                using var document = System.Text.Json.JsonDocument.Parse(response);
-                var root = document.RootElement;
-
-                // Find the .msi asset in the release
-                foreach (var asset in root.GetProperty("assets").EnumerateArray())
-                {
-                    string assetName = asset.GetProperty("name").GetString();
-                    if (assetName.EndsWith(".msi"))
-                    {
-                        return asset.GetProperty("browser_download_url").GetString();
-                    }
-                }
-
-                throw new Exception("No .msi file found in the latest release.");
-            }
-            catch (Exception ex)
-            {
-                throw new Exception($"Error fetching the release data: {ex.Message}");
-            }
-        }
-
-        private async Task<string> DownloadInstallerToDownloads(string url)
-        {
-            // Get the path to the user's Downloads folder (this works for OneDrive and other cloud storage setups)
-            string downloadsFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");
-            string installerPath = Path.Combine(downloadsFolder, "AutoTrackR2_Setup.msi");
-
-            // Ensure the downloads folder exists
-            if (!Directory.Exists(downloadsFolder))
-            {
-                throw new Exception($"Downloads folder not found at: {downloadsFolder}");
-            }
-
-            using var client = new HttpClient();
-            var response = await client.GetAsync(url);
-            response.EnsureSuccessStatusCode();
-
-            // Write the downloaded content to the Downloads folder
-            using var fs = new FileStream(installerPath, FileMode.Create);
-            await response.Content.CopyToAsync(fs);
-
-            return installerPath;
-        }
-
-        private void RunInstaller(string installerPath)
+        private void RunPowerShellScript(string scriptPath)
         {
             try
             {
-                // Prepare the command to run the .msi installer using msiexec
+                // Prepare the command to run the PowerShell script with elevation (admin rights)
                 var processStartInfo = new System.Diagnostics.ProcessStartInfo
                 {
-                    FileName = "msiexec",
-                    Arguments = $"/i \"{installerPath}\" /norestart REINSTALLMODE=amus", // Silent install with no restart
-                    UseShellExecute = true, // Ensures that the process runs in the background
-                    CreateNoWindow = true    // Hides the command prompt window
+                    FileName = "powershell.exe",
+                    Arguments = $"-ExecutionPolicy Bypass -File \"{scriptPath}\"", // Allow script to run
+                    Verb = "runas", // Request elevation (admin rights)
+                    UseShellExecute = true, // Use the shell to execute the process
+                    CreateNoWindow = false    // Show the PowerShell window
                 };
 
-                // Start the process (this will run the installer)
+                // Start the PowerShell process to run the script with admin rights
                 System.Diagnostics.Process.Start(processStartInfo);
             }
             catch (Exception ex)
             {
-                MessageBox.Show($"Failed to open the installer: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+                MessageBox.Show($"Failed to run the PowerShell script with admin rights: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
             }
         }
     }
diff --git a/AutoTrackR2/scripts/videorecord.ahk b/AutoTrackR2/scripts/videorecord.ahk
new file mode 100644
index 0000000..11c5556
--- /dev/null
+++ b/AutoTrackR2/scripts/videorecord.ahk
@@ -0,0 +1,2 @@
+; AutoHotkey v2 script to press Win + Alt + G
+Send("{LWin Down}{Alt Down}g{Alt Up}{LWin Up}")  ; Simulate pressing Win + Alt + G 
\ No newline at end of file
diff --git a/AutoTrackR2/scripts/visorwipe.ahk b/AutoTrackR2/scripts/visorwipe.ahk
new file mode 100644
index 0000000..564b7f2
--- /dev/null
+++ b/AutoTrackR2/scripts/visorwipe.ahk
@@ -0,0 +1,2 @@
+; AutoHotkey v2 script to press Alt + X
+Send("{Alt Down}x{Alt Up}")  ; Simulate pressing Alt + X 
\ No newline at end of file
diff --git a/AutoTrackR2/update.ps1 b/AutoTrackR2/update.ps1
new file mode 100644
index 0000000..b733579
--- /dev/null
+++ b/AutoTrackR2/update.ps1
@@ -0,0 +1,68 @@
+$repoUrl = "https://api.github.com/repos/BubbaGumpShrump/AutoTrackR2/releases/latest"
+$outputMsi = Join-Path -Path $env:TEMP -ChildPath "AutoTrackR2_Setup.msi"
+$tempFolder = Join-Path -Path $env:TEMP -ChildPath "AutoTrackR2"
+$headers = @{ "User-Agent" = "Mozilla/5.0" }
+
+# Fetch latest release data
+$response = Invoke-RestMethod -Uri $repoUrl -Headers $headers
+
+# Find the MSI asset
+$asset = $response.assets | Where-Object { $_.name -eq "AutoTrackR2_Setup.msi" }
+
+if ($asset -ne $null) {
+    $downloadUrl = $asset.browser_download_url
+    Write-Host "Downloading $($asset.name) from $downloadUrl"
+    Invoke-WebRequest -Uri $downloadUrl -OutFile $outputMsi -Headers $headers
+    Write-Host "Download completed: $outputMsi"
+
+    # Extract MSI contents
+    if (Test-Path $tempFolder) {
+        Remove-Item -Recurse -Force $tempFolder
+    }
+    Write-Host "Extracting MSI files..."
+
+    # Unpack the MSI installer to the temporary folder using msiexec with /a (administrative install) and /qb (quiet mode)
+    Start-Process msiexec.exe -ArgumentList "/a `"$outputMsi`" /qb TARGETDIR=`"$tempFolder`"" -Wait
+
+    # Generate checksums of extracted files and current directory files
+    $tempFiles = Get-ChildItem -Path $tempFolder -Recurse
+    $currentFiles = Get-ChildItem -Path (Get-Location) -Recurse
+
+    $tempChecksums = @{}
+    $currentChecksums = @{}
+
+    # Generate checksums for the temp folder files
+    foreach ($file in $tempFiles) {
+        if (-not $file.PSIsContainer) {
+            $tempChecksums[$file.FullName] = Get-FileHash $file.FullName -Algorithm SHA256
+        }
+    }
+
+    # Generate checksums for the current directory files
+    foreach ($file in $currentFiles) {
+        if (-not $file.PSIsContainer) {
+            $currentChecksums[$file.FullName] = Get-FileHash $file.FullName -Algorithm SHA256
+        }
+    }
+
+    # Compare and overwrite files if changed or missing, excluding update.ps1
+    foreach ($file in $tempChecksums.Keys) {
+        $relativePath = $file.Substring($tempFolder.Length)
+        
+        # Skip the update.ps1 file
+        if ($relativePath -eq "\update.ps1") {
+            continue
+        }
+
+        $currentFilePath = Join-Path -Path (Get-Location) -ChildPath $relativePath
+
+        if (-not (Test-Path $currentFilePath) -or ($currentChecksums[$currentFilePath].Hash -ne $tempChecksums[$file].Hash)) {
+            Write-Host "Copying $relativePath to current directory"
+            Copy-Item -Path $file -Destination $currentFilePath -Force
+        }
+    }
+
+    Write-Host "Files are successfully updated."
+} else {
+    Write-Host "AutoTrackR2_Setup.msi not found in the latest release."
+}
\ No newline at end of file
diff --git a/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj b/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
index d54d1bd..5be00b5 100644
--- a/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
+++ b/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
@@ -198,15 +198,15 @@
         {
         "Name" = "8:Microsoft Visual Studio"
         "ProductName" = "8:AutoTrackR2_Setup"
-        "ProductCode" = "8:{288819A9-947F-47BE-900E-205C7D7EAAF7}"
-        "PackageCode" = "8:{94C078B7-DD3E-4091-9F5E-780DE3481E1C}"
+        "ProductCode" = "8:{EA6F4A24-93AD-4470-8F1F-B7C30E1B0F3B}"
+        "PackageCode" = "8:{9D14EC78-0C53-4066-8C2F-325ED9C6ACE4}"
         "UpgradeCode" = "8:{0B78A147-D0DE-4F72-8906-A62611787CA7}"
         "AspNetVersion" = "8:"
         "RestartWWWService" = "11:FALSE"
         "RemovePreviousVersions" = "11:TRUE"
         "DetectNewerInstalledVersion" = "11:FALSE"
-        "InstallAllUsers" = "11:FALSE"
-        "ProductVersion" = "8:2.0.2"
+        "InstallAllUsers" = "11:TRUE"
+        "ProductVersion" = "8:2.0.6"
         "Manufacturer" = "8:GrieferNET"
         "ARPHELPTELEPHONE" = "8:"
         "ARPHELPLINK" = "8:discord.gg/griefernet"
diff --git a/README.md b/README.md
index 1a5db19..ab86662 100644
--- a/README.md
+++ b/README.md
@@ -1,90 +1,108 @@
-AutoTrackR2 - Star Citizen Kill-Tracking Tool
+# AutoTrackR2 - Star Citizen Kill-Tracking Tool
+
 AutoTrackR2 is a powerful and customizable kill-tracking tool for Star Citizen. Designed with gankers and combat enthusiasts in mind, it integrates seamlessly with the game to log, display, and manage your kills, providing detailed information and optional API integration for advanced tracking.
 
-🚀 Features
-Log File Integration: Point to Star Citizen's live game.log to track kills in real-time.
+## Testimonials
 
-API Integration (Optional):
-Configure a desired API to send kill data for external tracking or display.
-Secure your data with an optional API key.
+https://www.youtube.com/watch?v=bE6_MYY7ARU
 
-Video Clipping (Optional):
-Set a path to your clipping software to save kills automatically.
+## Features
 
-Visor Wipe Integration:
-Automates visor wiping using an AutoHotkey script (visorwipe.ahk).
-Requires AutoHotkey v2.
-Script must be placed in C:\Users\<Username>\AppData\Local\AutoTrackR2\.
+- **Log File Integration**: Point to Star Citizen's live game.log to track kills in real-time.
+- **API Integration (Optional)**:
+  - Configure a desired API to send kill data for external tracking or display.
+  - Secure your data with an optional API key.
+- **Video Clipping (Optional)**:
+  - Set a path to your clipping software to save kills automatically.
+- **Visor Wipe Integration (Optional)**:
+  - Automates visor wiping using an AutoHotkey script (`visorwipe.ahk`).
+  - Requires AutoHotkey v2.
+  - Script must be placed in `%LOCALAPPDATA%\AutoTrackR2\`.
+- **Video Record Integration (Optional)**:
+  - Customize the `videorecord.ahk` script for your specific video recording keybinds.
+  - Requires AutoHotkey v2.
+  - Script must be placed in `%LOCALAPPDATA%\AutoTrackR2\`
+- **Offline Mode**:
+  - Disables API submissions. The tool will still scrape and display information from the RobertsSpaceIndustries website for the profile of whomever you have killed.
+- **Custom Themes**:
+  - Easily add or modify themes by adjusting the `ThemeSlider_ValueChanged` function in `ConfigPage.xaml.cs`.
+  - Update the ThemeSlider maximum value in `ConfigPage.xaml` to reflect the number of themes added.
 
-Video Record Integration:
-Customize the videorecord.ahk script for your specific video recording keybinds.
-Requires AutoHotkey v2.
-Script must be placed in C:\Users\<Username>\AppData\Local\AutoTrackR2\
+## Setup
 
-Offline Mode:
-Disables API submissions. The tool will still scrape and display information from the RobertsSpaceIndustries website for the profile of whomever you have killed.
+1. **Prerequisites**:
 
-Custom Themes:
-Easily add or modify themes by adjusting the ThemeSlider_ValueChanged function in ConfigPage.xaml.cs.
-Update the ThemeSlider maximum value in ConfigPage.xaml to reflect the number of themes added.
+   - Windows 10 or later
+   - .NET Framework 4.7.2 or higher
+   - Star Citizen installed
+   - AutoHotkey v2 (optional - only needed for visor wipe and video recording features):
+     - Download from the official website at https://www.autohotkey.com/
+     - Install AutoHotkey v2 (not v1.x as they are not compatible)
+     - Verify installation by right-clicking on your desktop and confirming "New > AutoHotkey v2 Script" appears in the context menu
 
-📁 Configuration
-Log File:
-Specify the path to Star Citizen's game.log.
+2. **Installation Steps**:
 
-API Settings (Optional):
+   - Download the latest release package from the releases page
+   - Run the installer and follow the on-screen instructions
+   - Launch AutoTrackR2 after installation completes
 
-API URL: Provide the endpoint for posting kill data.
+3. **Initial Configuration**:
+   - Open the Configuration panel within the application
+   - Set the path to your Star Citizen game.log file (typically found in `[Star Citizen Install Path]\LIVE\game.log`)
+   - Configure API settings if desired (leave blank for offline mode)
+   - Set up video clipping paths if using this feature
+   - If using AutoHotkey features, verify the scripts are properly placed in the `%LOCALAPPDATA%\AutoTrackR2\` location
 
-API Key: Secure access to the API with your unique key.
+## Configuration
 
-Video Clipping Path (Optional):
-Set the directory where your clipping software saves kills.
+- **Log File**:
+  - Specify the path to Star Citizen's `game.log`.
+- **API Settings (Optional)**:
+  - API URL: Provide the endpoint for posting kill data.
+  - API Key: Secure access to the API with your unique key.
+- **Video Clipping Path (Optional)**:
+  - Set the directory where your clipping software saves kills.
+- **Visor Wipe Setup (Optional)**:
+  - Place `visorwipe.ahk` in `%LOCALAPPDATA%\AutoTrackR2\`.
+  - AutoHotkey v2 is required.
+- **Video Recording Setup (Optional)**:
+  - Modify `videorecord.ahk` to use the keybinds of your video recording software.
+  - Place `videorecord.ahk` in `%LOCALAPPDATA%\AutoTrackR2\`.
+  - AutoHotkey v2 is required.
+- **Offline Mode**:
+  - Enable to disable API submission. Restart the tracker to apply changes.
 
-Visor Wipe Setup:
-Place visorwipe.ahk in C:\Users\<Username>\AppData\Local\AutoTrackR2\.
-AutoHotkey v2 is required.
+## Privacy & Data Usage
 
-Video Recording Setup:
-Modify videorecord.ahk to use the keybinds of your video recording software.
-Place videorecord.ahk in C:\Users\<Username>\AppData\Local\AutoTrackR2\.
-AutoHotkey v2 is required.
+- **No Personal Data Collection**:
+  - AutoTrackR2 does not collect or store personal or system information, other than common file paths to manage necessary files.
+- **Access and Permissions**:
+  - The tool reads its own `config.ini` and the `game.log` from Star Citizen. It will also create a CSV file of all your logged kills, stored locally on your machine in the `%LOCALAPPDATA%\AutoTrackR2\` folder.
+- **Optional Data Submission**:
+  - Data is only sent to an API if explicitly configured by the user. Offline Mode disables all outgoing submissions.
+- **Killfeed Scraping**:
+  - The program scrapes the profile page of killed players to display their information locally. This feature remains active even in Offline Mode.
 
-Offline Mode:
-Enable to disable API submission. Restart the tracker to apply changes.
+## Customization
 
-🛡️ Privacy & Data Usage
-No Personal Data Collection:
-AutoTrackR2 does not collect or store personal or system information, other than common file paths to manage necessary files.
-
-Access and Permissions:
-The tool reads its own config.ini and the game.log from Star Citizen. It will also create a CSV file of all your logged kills, stored locally on your machine in the AppData folder.
-
-Optional Data Submission:
-Data is only sent to an API if explicitly configured by the user. Offline Mode disables all outgoing submissions.
-
-Killfeed Scraping:
-The program scrapes the profile page of killed players to display their information locally. This feature remains active even in Offline Mode.
-
-⚙️ Installation
-Download the latest release from the releases page.
-Follow the setup instructions included in the installer.
-Configure the tool using the settings outlined above.
-
-💡 Customization
 To customize themes or behaviors:
 
-Add Themes:
-Update the ThemeSlider_ValueChanged function in ConfigPage.xaml.cs with your desired colors and logos.
-Adjust the ThemeSlider maximum value in ConfigPage.xaml to match the number of themes.
+- **Add Themes**:
+  - Update the `ThemeSlider_ValueChanged` function in `ConfigPage.xaml.cs` with your desired colors and logos.
+  - Adjust the ThemeSlider maximum value in `ConfigPage.xaml` to match the number of themes.
+- **Modify AHK Scripts (Optional)**:
+  - Edit `visorwipe.ahk` and `videorecord.ahk` to fit your specific keybinds and preferences.
 
-Modify AHK Scripts:
-Edit visorwipe.ahk and videorecord.ahk to fit your specific keybinds and preferences.
+## Support
 
-📞 Support
-For questions, issues, or feature requests, please visit discord.gg/griefernet.
+For questions, issues, or feature requests:
+
+- Join our Discord server: [discord.gg/griefernet](https://discord.gg/griefernet)
+- Report bugs through the Discord's #autotrackr-bugs channel
+- For urgent issues, you can escalate in Discord by tagging moderators
+
+## License
 
-🔒 License
 AutoTrackR2 is released under the GNU v3 License.
 
 GRIEFERNET VICTORY!