diff --git a/AutoTrackR2/Assets/WRITH.jpg b/AutoTrackR2/Assets/WRITH.jpg
deleted file mode 100644
index c942eb5..0000000
Binary files a/AutoTrackR2/Assets/WRITH.jpg and /dev/null differ
diff --git a/AutoTrackR2/Assets/WRITH.png b/AutoTrackR2/Assets/WRITH.png
new file mode 100644
index 0000000..cad0fe9
Binary files /dev/null and b/AutoTrackR2/Assets/WRITH.png differ
diff --git a/AutoTrackR2/AutoTrackR2.csproj b/AutoTrackR2/AutoTrackR2.csproj
index 986db13..d49ceef 100644
--- a/AutoTrackR2/AutoTrackR2.csproj
+++ b/AutoTrackR2/AutoTrackR2.csproj
@@ -19,11 +19,10 @@
     <None Remove="Assets\HIT.png" />
     <None Remove="Assets\NW.png" />
     <None Remove="Assets\VOX.png" />
-    <None Remove="Assets\WRITH.jpg" />
+    <None Remove="Assets\WRITH.png" />
     <None Remove="config.ini" />
     <None Remove="Fonts\Orbitron-Bold.ttf" />
     <None Remove="Fonts\Roboto-Regular.ttf" />
-    <None Remove="kill-log.csv" />
     <None Remove="KillTrackR_MainScript.ps1" />
   </ItemGroup>
 
@@ -59,7 +58,7 @@
     <Resource Include="Assets\VOX.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
-    <Resource Include="Assets\WRITH.jpg">
+    <Resource Include="Assets\WRITH.png">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Resource>
     <Resource Include="config.ini" />
@@ -69,7 +68,6 @@
     <Resource Include="Fonts\Roboto-Regular.ttf">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Resource>
-    <Resource Include="kill-log.csv" />
     <EmbeddedResource Include="KillTrackR_MainScript.ps1">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </EmbeddedResource>
diff --git a/AutoTrackR2/ConfigPage.xaml.cs b/AutoTrackR2/ConfigPage.xaml.cs
index 49e3a67..5ff2f69 100644
--- a/AutoTrackR2/ConfigPage.xaml.cs
+++ b/AutoTrackR2/ConfigPage.xaml.cs
@@ -259,7 +259,7 @@ namespace AutoTrackR2
                         (Color)ColorConverter.ConvertFromString("#FFFFFF"), // Text
                         (Color)ColorConverter.ConvertFromString("#CFFF04")  // AltText
                     );
-                    ChangeLogo("/Assets/AVSQN.png", (Color)ColorConverter.ConvertFromString("#3fbcff"));
+                    ChangeLogo("/Assets/HEX.png", (Color)ColorConverter.ConvertFromString("#39FF14"));
                     break;
             }
         }
diff --git a/AutoTrackR2/HomePage.xaml b/AutoTrackR2/HomePage.xaml
index a81035f..d1e2557 100644
--- a/AutoTrackR2/HomePage.xaml
+++ b/AutoTrackR2/HomePage.xaml
@@ -27,7 +27,7 @@
             </Border>
 
             <!-- StackPanel for Start and Stop buttons -->
-            <Border Background="{DynamicResource BackgroundDarkBrush}" BorderBrush="{DynamicResource AccentBrush}" Grid.Row="0" Grid.Column="1" BorderThickness="2" CornerRadius="5" Margin="0,0,0,134"/>
+            <Border Background="{DynamicResource BackgroundDarkBrush}" BorderBrush="{DynamicResource AccentBrush}" Grid.Row="0" Grid.Column="1" BorderThickness="2" CornerRadius="5" Margin="0,0,0,82"/>
             <StackPanel Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" Height="269" Width="152">
                 <TextBlock Name="PilotNameTitle" Text="Pilot" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,5,0,0" Foreground="{DynamicResource AltTextBrush}" FontSize="14"/>
                 <TextBlock Name="PilotNameTextBox" Text="" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,0,0,0" Foreground="{DynamicResource TextBrush}" FontSize="10" TextAlignment="Center"/>
@@ -35,7 +35,9 @@
                 <TextBlock Name="PlayerShipTextBox" Text="" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,0,0,0" Foreground="{DynamicResource TextBrush}" FontSize="10" TextAlignment="Center"/>
                 <TextBlock Name="GameModeTitle" Text="Game Mode" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,5,0,0" Foreground="{DynamicResource AltTextBrush}" FontSize="14"/>
                 <TextBlock Name="GameModeTextBox" Text="" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,0,0,0" Foreground="{DynamicResource TextBrush}" FontSize="10" TextAlignment="Center"/>
-                <TextBox Name="DebugPanel" Text="" Width="152" Height="136" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,0,0,0" Foreground="{DynamicResource TextBrush}" FontSize="8" BorderThickness="0"/>
+                <TextBlock Name="KillTallyTitle" Text="Kill Tally" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,5,0,0" Foreground="{DynamicResource AltTextBrush}" FontSize="14"/>
+                <TextBlock Name="KillTallyTextBox" Text="" Width="152" Height="20" Background="Transparent" FontFamily="{StaticResource Orbitron}" Margin="0,0,0,0" Foreground="{DynamicResource TextBrush}" FontSize="10" TextAlignment="Center"/>
+                <TextBox x:Name="DebugPanel" Text="" Width="152" Height="98" Background="Transparent" FontFamily="{StaticResource Orbitron}" Foreground="{DynamicResource TextBrush}" FontSize="8" BorderThickness="0" Margin="0,9,0,0"/>
             </StackPanel>
             <StackPanel Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center" Height="120" Width="172" >
                 <Button Name="StartButton" Content="Start" Width="100" Height="40" Style="{StaticResource ButtonStyle}" FontFamily="{StaticResource Orbitron}" Margin="0,20" Click="StartButton_Click"/>
diff --git a/AutoTrackR2/HomePage.xaml.cs b/AutoTrackR2/HomePage.xaml.cs
index 96ffdbd..9ef801c 100644
--- a/AutoTrackR2/HomePage.xaml.cs
+++ b/AutoTrackR2/HomePage.xaml.cs
@@ -109,6 +109,12 @@ namespace AutoTrackR2
                                     GameModeTextBox.Text = gameMode;
                                     AdjustFontSize(GameModeTextBox);
                                 }
+                                else if (e.Data.Contains("KillTally="))
+                                {
+                                    string killTally = e.Data.Split('=')[1].Trim();
+                                    KillTallyTextBox.Text = killTally;
+                                    AdjustFontSize(KillTallyTextBox);
+                                }
                                 else if (e.Data.Contains("NewKill="))
                                 {
                                     // Parse the kill data
@@ -278,6 +284,8 @@ namespace AutoTrackR2
             PilotNameTextBox.Text = string.Empty;
             PlayerShipTextBox.Text = string.Empty;
             GameModeTextBox.Text = string.Empty;
+            KillTallyTextBox.Text = string.Empty;
+            KillFeedStackPanel.Children.Clear();
         }
 
         private void AdjustFontSize(TextBlock textBlock)
diff --git a/AutoTrackR2/KillTrackR_MainScript.ps1 b/AutoTrackR2/KillTrackR_MainScript.ps1
index f579183..9fc3298 100644
--- a/AutoTrackR2/KillTrackR_MainScript.ps1
+++ b/AutoTrackR2/KillTrackR_MainScript.ps1
@@ -1,4 +1,4 @@
-$TrackRver = "2.0"
+$TrackRver = "2.0r"
 
 # Path to the config file
 $appName = "AutoTrackR2"
@@ -20,6 +20,8 @@ if (Test-Path $configFile) {
     exit
 }
 
+$parentApp = (Get-Process -Name AutoTrackR2).ID
+
 # Access config values
 $logFilePath = $config.Logfile
 $apiUrl = $config.ApiUrl
@@ -97,45 +99,19 @@ $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"}
-<#
-$enemyPilot = "feezydafox"
-$enemyShip = "AEGS_Gladius"
-$KillTime = (Get-Date).ToUniversalTime().ToString("d MMM yyyy H:mm 'UTC'")
-$page1 = Invoke-WebRequest -uri "https://robertsspaceindustries.com/citizens/$enemyPilot"
+$global:killTally = 0
+$global:GameMode = ""
+$global:GameVersion = ""
 
-# Get Enlisted Date
-if ($($page1.content) -match $joinDatePattern) {
-	$joinDate = $matches[1]
-	$joinDate = $joinDate -replace ',', ''
-} else {
-	$joinDate = "-"
+# Load historic kills from csv
+if (Test-Path "$scriptFolder\Kill-Log.csv") {
+	$historicKills = Import-CSV "$scriptFolder\Kill-log.csv"
+	foreach ($kill in $historicKills) {
+		Write-Output "NewKill=throwaway,$($kill.EnemyPilot),$($kill.EnemyShip),$($kill.OrgAffiliation),$($kill.Enlisted),$($kill.RecordNumber),$($kill.KillTime),$($kill.PFP)"
+		$global:killTally++
+	}
 }
-
-# Check if there are any matches
-$enemyOrgs = $page1.links[4].innerHTML
-
-if ($null -eq $enemyOrgs) {
-    $enemyOrgs = "-"
-}
-
-# Get UEE Number
-if ($($page1.content) -match $ueePattern) {
-	# The matched UEE Citizen Record number is in $matches[1]
-	$citizenRecord = $matches[1]
-} else {
-	$citizenRecord = "-"
-}
-If ($citizenRecord -eq "n/a") {
-	$citizenRecordAPI = "-1"
-	$citizenRecord = "-"
-} Else {
-	$citizenRecordAPI = $citizenRecord
-}
-# Get PFP
-$victimPFP = "https://robertsspaceindustries.com$($page1.images[0].src)"
-
-Write-Output "NewKill=break,$enemyPilot,$enemyShip,$enemyOrgs,$joinDate,$citizenRecord,$killTime,$victimPFP"
-#>
+Write-Output "KillTally=$global:killTally"
 
 # Match and extract username from gamelog
 Do {
@@ -169,15 +145,15 @@ Do {
 		Write-Output "PlayerShip=$global:loadOut"
 
 		If ($line -match $versionPattern){
-			$GameVersion = $matches['gameversion']
+			$global:GameVersion = $matches['gameversion']
 		}
 		if ($line -match $acPattern){
-			$GameMode = "AC"
+			$global:GameMode = "AC"
 		}
 		if ($line -match $puPattern){
-			$GameMode = "PU"
+			$global:GameMode = "PU"
 		}
-		Write-Output "GameMode=$GameMode"
+		Write-Output "GameMode=$global:GameMode"
 
 	}
     # If no match found, print "Logged In: False"
@@ -213,7 +189,11 @@ function Read-LogEntry {
 		}
 
 		If ($null -ne $page1){
-	
+			# Check if the Autotrackr2 process is running
+			if ($null -eq (Get-Process -ID $parentApp -ErrorAction SilentlyContinue)) {
+				Stop-Process -Id $PID -Force
+			}
+			
 			If ($enemyShip -eq $global:lastKill){
 				$enemyShip = "Passenger"
 			} Else {
@@ -240,7 +220,7 @@ function Read-LogEntry {
 				if ($ship -notmatch $shipManPattern){
 					$ship = "Player"
 				}
-				If ($enemyShip -notmatch $shipManPattern) {
+				If ($enemyShip -notmatch $shipManPattern -and $enemyShip -notlike "Passenger" ) {
 					$enemyShip = "Player"
 				}
 			
@@ -258,7 +238,7 @@ function Read-LogEntry {
 					$ship = $ship -replace '-00(1|2|3|4|5|6|7|8|9|0)$', ''
 				}
 
-				$KillTime = (Get-Date).ToUniversalTime().ToString("d MMM yyyy H:mm 'UTC'")
+				$KillTime = (Get-Date).ToUniversalTime().ToString("dd MMM yyyy HH:mm 'UTC'")
 			
 				# Get Enlisted Date
 				if ($($page1.content) -match $joinDatePattern) {
@@ -290,11 +270,17 @@ function Read-LogEntry {
 				}
 
 				# Get PFP
-				$victimPFP = "https://robertsspaceindustries.com$($page1.images[0].src)"
+				if ($page1.images[0].src -like "/media/*") {
+					$victimPFP = "https://robertsspaceindustries.com$($page1.images[0].src)"
+				} Else {
+					$victimPFP = "https://cdn.robertsspaceindustries.com/static/images/account/avatar_default_big.jpg"
+				}
 
+				$global:killTally++
+				Write-Output "KillTally=$global:killTally"
 				Write-Output "NewKill=throwaway,$enemyPilot,$enemyShip,$enemyOrgs,$joinDate2,$citizenRecord,$killTime,$victimPFP"
 
-				$GameMode = $GameMode.ToLower()
+				$global:GameMode = $global:GameMode.ToLower()
 				# Send to API
 				# Define the data to send
 				If ($null -ne $apiUrl -and $offlineMode -eq $false){
@@ -306,8 +292,8 @@ function Read-LogEntry {
 						weapon			= $weapon
 						method			= $damageType
 						loadout_ship	= $ship
-						game_version	= $GameVersion
-						gamemode		= $GameMode
+						game_version	= $global:GameVersion
+						gamemode		= $global:GameMode
 						trackr_version	= $TrackRver
 					}
 
@@ -320,7 +306,7 @@ function Read-LogEntry {
 
 					try {
 						# Send the POST request with JSON data
-						Invoke-RestMethod -Uri $apiURL -Method Post -Body ($data | ConvertTo-Json -Depth 5) -Headers $headers
+						$null = Invoke-RestMethod -Uri $apiURL -Method Post -Body ($data | ConvertTo-Json -Depth 5) -Headers $headers
 						$logMode = "API"
 					} catch {
 						# Catch and display errors
@@ -347,10 +333,11 @@ function Read-LogEntry {
 					Weapon           = $weapon
 					Ship             = $ship
 					Method           = $damageType
-					Mode             = $GameMode
-					GameVersion      = $GameVersion
+					Mode             = $global:GameMode
+					GameVersion      = $global:GameVersion
 					TrackRver		 = $TrackRver
 					Logged			 = $logMode
+					PFP				 = $victimPFP
 				}
 
 				# Export to CSV
@@ -358,8 +345,8 @@ function Read-LogEntry {
 					# If file doesn't exist, create it with headers
 					$killData | Export-Csv -Path $csvPath -NoTypeInformation
 				} else {
-					# Append data to the existing file
-					$killData | Export-Csv -Path $csvPath -Append -NoTypeInformation
+					# Append data to the existing file without adding headers
+					$killData | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -Encoding utf8 -FilePath $csvPath
 				}
 
 				$sleeptimer = 10
@@ -373,7 +360,7 @@ function Read-LogEntry {
 				}
 			
 				# Record video
-				if ($recording -eq $true -and $enemyShip -ne "Passenger"){
+				if ($videoRecord -eq $true -and $enemyShip -ne "Passenger"){
 					# send keybind for windows game bar recording
 					Start-Sleep 2
 					$sleeptimer = $sleeptimer -9
@@ -381,10 +368,10 @@ function Read-LogEntry {
 					Start-Sleep 7
 
 					$latestFile = Get-ChildItem -Path $videoPath | Where-Object { -not $_.PSIsContainer } | Sort-Object CreationTime -Descending | Select-Object -First 1
-					# Check if the latest file is no more than 10 seconds old
+					# Check if the latest file is no more than 30 seconds old
 					if ($latestFile) {
 						$fileAgeInSeconds = (New-TimeSpan -Start $latestFile.CreationTime -End (Get-Date)).TotalSeconds
-						if ($fileAgeInSeconds -le 10) {
+						if ($fileAgeInSeconds -le 30) {
 							# Generate a timestamp in ddMMMyyyy-HH:mm format
 							$timestamp = (Get-Date).ToString("ddMMMyyyy-HHmm")
         
@@ -419,12 +406,12 @@ function Read-LogEntry {
 
 	# Detect PU or AC
 	if ($line -match $puPattern) {
-		$GameMode = "PU"
-		Write-Output "GameMode=$GameMode"
+		$global:GameMode = "PU"
+		Write-Output "GameMode=$global:GameMode"
 	}
 	if ($line -match $acPattern) {
-		$GameMode = "AC"
-		Write-Output "GameMode=$GameMode"
+		$global:GameMode = "AC"
+		Write-Output "GameMode=$global:GameMode"
 	}
 
 	#Set loadout 
diff --git a/AutoTrackR2/UpdatePage.xaml b/AutoTrackR2/UpdatePage.xaml
index 2c86ea4..12ca5ca 100644
--- a/AutoTrackR2/UpdatePage.xaml
+++ b/AutoTrackR2/UpdatePage.xaml
@@ -3,6 +3,37 @@
              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
              Height="396" Width="626">
     <Grid Background="{DynamicResource BackgroundLightBrush}">
-        <TextBlock Text="Download and update features coming soon!" FontSize="24" Foreground="{DynamicResource TextBrush}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
+        <Grid Margin="0,0,5,7">
+            <Grid.RowDefinitions>
+                <RowDefinition Height="Auto" />
+                <RowDefinition Height="Auto" />
+                <RowDefinition Height="*" />
+            </Grid.RowDefinitions>
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="*" />
+            </Grid.ColumnDefinitions>
+
+            <!-- Current Version Display -->
+            <StackPanel Orientation="Horizontal" Margin="10" Grid.Row="0">
+                <TextBlock Text="Current Version: " FontSize="16" FontWeight="Bold" VerticalAlignment="Center" Foreground="{DynamicResource AltTextBrush}" />
+                <TextBlock x:Name="CurrentVersionText" Text="2.0-beta.0" FontSize="16" VerticalAlignment="Center" Foreground="{DynamicResource TextBrush}"/>
+            </StackPanel>
+
+            <!-- Available Version Display -->
+            <StackPanel Orientation="Horizontal" Margin="10" Grid.Row="1">
+                <TextBlock Text="Available Version: " FontSize="16" FontWeight="Bold" VerticalAlignment="Center" Foreground="{DynamicResource AltTextBrush}"/>
+                <TextBlock x:Name="AvailableVersionText" Text="Checking..." FontSize="16" VerticalAlignment="Center" Foreground="{DynamicResource TextBrush}"/>
+            </StackPanel>
+
+            <StackPanel Orientation="Horizontal" Margin="20" Grid.Row="2">
+                <TextBlock Text="Still a work in progress. Please uninstall current version before installing update." FontSize="16" Foreground="{DynamicResource TextBrush}" />
+            </StackPanel>
+
+            <!-- Install Button -->
+            <StackPanel HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="2" Grid.Column="2">
+                <Button x:Name="InstallButton" Content="Download Update" Width="150" Height="40" IsEnabled="False" 
+                    Click="InstallButton_Click"  Style="{StaticResource DisabledButtonStyle}" FontFamily="{StaticResource Orbitron}"/>
+            </StackPanel>
+        </Grid>
     </Grid>
 </UserControl>
diff --git a/AutoTrackR2/UpdatePage.xaml.cs b/AutoTrackR2/UpdatePage.xaml.cs
index e8b4302..b085d80 100644
--- a/AutoTrackR2/UpdatePage.xaml.cs
+++ b/AutoTrackR2/UpdatePage.xaml.cs
@@ -1,12 +1,206 @@
-using System.Windows.Controls;
+using System;
+using System.IO;
+using System.Net.Http;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
 
 namespace AutoTrackR2
 {
     public partial class UpdatePage : UserControl
     {
+        private string currentVersion = "v2.0-release";
+        private string latestVersion;
+
         public UpdatePage()
         {
             InitializeComponent();
+            CurrentVersionText.Text = currentVersion;
+            CheckForUpdates();
+        }
+
+        private async void CheckForUpdates()
+        {
+            try
+            {
+                // Fetch the latest release info from GitHub
+                latestVersion = await GetLatestVersionFromGitHub();
+
+                // Update the Available Version field
+                AvailableVersionText.Text = latestVersion;
+
+                // Enable the Install button if a new version is available
+                if (IsNewVersionAvailable(currentVersion, latestVersion))
+                {
+                    InstallButton.IsEnabled = true;
+                    InstallButton.Style = (Style)FindResource("ButtonStyle");
+                }
+            }
+            catch (Exception ex)
+            {
+                AvailableVersionText.Text = "Error checking updates.";
+                MessageBox.Show($"Failed to check for updates: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
+        }
+
+        private async Task<string> GetLatestVersionFromGitHub()
+        {
+            using var client = new HttpClient();
+            client.DefaultRequestHeaders.Add("User-Agent", "AutoTrackR2");
+
+            string repoOwner = "BubbaGumpShrump";
+            string repoName = "AutoTrackR2";
+
+            try
+            {
+                // Attempt to fetch the latest release
+                var url = $"https://api.github.com/repos/{repoOwner}/{repoName}/releases/latest";
+                var response = await client.GetStringAsync(url);
+
+                // Parse the JSON using System.Text.Json
+                using var document = System.Text.Json.JsonDocument.Parse(response);
+                var root = document.RootElement;
+                var tagName = root.GetProperty("tag_name").GetString();
+
+                return tagName;
+            }
+            catch (HttpRequestException ex) when (ex.StatusCode == System.Net.HttpStatusCode.NotFound)
+            {
+                // Fallback to releases list if 'latest' not found
+                var url = $"https://api.github.com/repos/{repoOwner}/{repoName}/releases";
+                var response = await client.GetStringAsync(url);
+
+                using var document = System.Text.Json.JsonDocument.Parse(response);
+                var root = document.RootElement;
+
+                // Get the tag name of the first release
+                if (root.GetArrayLength() > 0)
+                {
+                    var firstRelease = root[0];
+                    return firstRelease.GetProperty("tag_name").GetString();
+                }
+
+                throw new Exception("No releases found.");
+            }
+        }
+
+        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;
+        }
+
+        private async void InstallButton_Click(object sender, RoutedEventArgs e)
+        {
+            try
+            {
+                InstallButton.IsEnabled = false;
+                InstallButton.Content = "Preparing to Install...";
+
+                // Get the download URL for the latest release
+                string downloadUrl = await GetLatestMsiDownloadUrlFromGitHub();
+
+                // Download the installer to the user's Downloads folder
+                string installerPath = await DownloadInstallerToDownloads(downloadUrl);
+
+                // Launch the installer for manual installation
+                RunInstaller(installerPath);
+
+                // Gracefully close the app after launching the installer
+                Application.Current.Shutdown();
+
+                MessageBox.Show("Update installer has been downloaded. Please finish the installation manually.", "Update Ready", MessageBoxButton.OK, MessageBoxImage.Information);
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"Failed to download and launch the installer: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
+            finally
+            {
+                InstallButton.IsEnabled = true;
+                InstallButton.Content = "Install Update";
+            }
+        }
+
+        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)
+        {
+            try
+            {
+                // Prepare the command to run the .msi installer using msiexec
+                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
+                };
+
+                // Start the process (this will run the installer)
+                System.Diagnostics.Process.Start(processStartInfo);
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"Failed to open the installer: {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
+            }
         }
     }
 }
diff --git a/AutoTrackR2/kill-log.csv b/AutoTrackR2/kill-log.csv
deleted file mode 100644
index e69de29..0000000
diff --git a/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj b/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
index 6dc20be..d54d1bd 100644
--- a/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
+++ b/AutoTrackR2_Setup/AutoTrackR2_Setup.vdproj
@@ -50,6 +50,14 @@
             "PrerequisitesLocation" = "2:1"
             "Url" = "8:"
             "ComponentsUrl" = "8:"
+                "Items"
+                {
+                    "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2"
+                    {
+                    "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)"
+                    "ProductCode" = "8:.NETFramework,Version=v4.7.2"
+                    }
+                }
             }
         }
         "Release"
@@ -190,24 +198,24 @@
         {
         "Name" = "8:Microsoft Visual Studio"
         "ProductName" = "8:AutoTrackR2_Setup"
-        "ProductCode" = "8:{01D113D7-62EA-41EE-A06E-55A8D5DD1883}"
-        "PackageCode" = "8:{E1AF24CD-7A12-42A7-ABC0-6D3EDCDA6FF2}"
+        "ProductCode" = "8:{288819A9-947F-47BE-900E-205C7D7EAAF7}"
+        "PackageCode" = "8:{94C078B7-DD3E-4091-9F5E-780DE3481E1C}"
         "UpgradeCode" = "8:{0B78A147-D0DE-4F72-8906-A62611787CA7}"
         "AspNetVersion" = "8:"
         "RestartWWWService" = "11:FALSE"
         "RemovePreviousVersions" = "11:TRUE"
-        "DetectNewerInstalledVersion" = "11:TRUE"
+        "DetectNewerInstalledVersion" = "11:FALSE"
         "InstallAllUsers" = "11:FALSE"
-        "ProductVersion" = "8:2.0"
+        "ProductVersion" = "8:2.0.2"
         "Manufacturer" = "8:GrieferNET"
         "ARPHELPTELEPHONE" = "8:"
-        "ARPHELPLINK" = "8:"
+        "ARPHELPLINK" = "8:discord.gg/griefernet"
         "Title" = "8:AutoTrackR2_Setup"
         "Subject" = "8:"
         "ARPCONTACT" = "8:Fisk"
         "Keywords" = "8:"
-        "ARPCOMMENTS" = "8:"
-        "ARPURLINFOABOUT" = "8:"
+        "ARPCOMMENTS" = "8:Star Citizen Kill Tracking App"
+        "ARPURLINFOABOUT" = "8:https://GrieferNET.org"
         "ARPPRODUCTICON" = "8:"
         "ARPIconIndex" = "3:0"
         "SearchPath" = "8:"
@@ -554,7 +562,7 @@
                             "Type" = "3:8"
                             "ContextData" = "8:Bitmap"
                             "Attributes" = "3:4"
-                            "Setting" = "3:1"
+                            "Setting" = "3:0"
                             "UsePlugInResources" = "11:TRUE"
                             }
                             "CopyrightWarning"
@@ -565,8 +573,8 @@
                             "Type" = "3:3"
                             "ContextData" = "8:"
                             "Attributes" = "3:0"
-                            "Setting" = "3:1"
-                            "Value" = "8:#1202"
+                            "Setting" = "3:2"
+                            "Value" = "8:GNU GENERAL PUBLIC LICENSE v3"
                             "DefaultValue" = "8:#1202"
                             "UsePlugInResources" = "11:TRUE"
                             }