diff --git a/Marsey/Game/Patches/HWID.cs b/Marsey/Game/Patches/HWID.cs
index 7eaae03..b3a4a01 100644
--- a/Marsey/Game/Patches/HWID.cs
+++ b/Marsey/Game/Patches/HWID.cs
@@ -1,4 +1,5 @@
 using System.Text;
+using System.Text.RegularExpressions;
 using HarmonyLib;
 using Marsey.Config;
 using Marsey.Handbreak;
@@ -87,6 +88,11 @@ private static void PatchCalcMethod()
             );
     }
 
+    public static bool CheckHWID(string hwid)
+    {
+        return Regex.IsMatch(hwid, "^$|^[A-F0-9]{64}$");
+    }
+
     private static void RecalcHwid(ref byte[] __result)
     {
         string hwidString = BitConverter.ToString(_hwId).Replace("-", "");
diff --git a/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs b/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs
index 230320a..d718ae3 100644
--- a/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs
+++ b/SS14.Launcher/ViewModels/MainWindowTabs/OptionsTabViewModel.cs
@@ -7,7 +7,10 @@
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using System.Windows.Input;
+using Avalonia.Controls;
 using Avalonia.Data.Converters;
+using Avalonia.Input;
+using Avalonia.Media;
 using DynamicData;
 using Marsey;
 using Marsey.Config;
@@ -61,6 +64,7 @@ public OptionsTabViewModel()
         DumpConfigCommand = new RelayCommand(DumpConfig.Dump);
 
         Persist.UpdateLauncherConfig();
+        SetTempHwid();
     }
 
 #if RELEASE
@@ -271,7 +275,11 @@ public bool FakeRPC
     public string RPCUsername
     {
         get => Cfg.GetCVar(CVars.RPCUsername);
-        set => _RPCUsername = value;
+        set
+        {
+            Cfg.SetCVar(CVars.RPCUsername, value);
+            Cfg.CommitConfig();
+        }
     }
 
     public bool ForcingHWID
@@ -305,17 +313,36 @@ public bool RandHWID
         }
     }
 
-    private string _HWIdString = "";
-    public string HWIdString
+    private void SetTempHwid()
     {
-        get
+        if (!LIHWIDBind)
         {
-            if (!LIHWIDBind)
-                return Cfg.GetCVar(CVars.ForcedHWId);
+            _hwidString = Cfg.GetCVar(CVars.ForcedHWId);
+            return;
+        }
+
+        _hwidString = _loginManager.ActiveAccount != null ? _loginManager.ActiveAccount.LoginInfo.HWID : "";
+    }
+
+    private string _hwidString = "";
+    public string HWIdString
+    {
+        get => _hwidString;
+        set => _hwidString = value;
+    }
 
-            return _loginManager.ActiveAccount != null ? _loginManager.ActiveAccount.LoginInfo.HWID : "";
+
+    // This is cancer, quite literally
+    // I hate this
+    private Brush? _hwidTextBoxBorderBrush = new SolidColorBrush(Color.Parse("#FF888888"));
+    public Brush? HWIDTextBoxBorderBrush
+    {
+        get => _hwidTextBoxBorderBrush;
+        set
+        {
+            _hwidTextBoxBorderBrush = value;
+            OnPropertyChanged(nameof(HWIDTextBoxBorderBrush));
         }
-        set => _HWIdString = value;
     }
 
     private string _GuestUname;
@@ -431,43 +458,30 @@ public string Username
 
     private void OnSetHWIdClick()
     {
-        string hwid = _HWIdString;
+        Cfg.SetCVar(CVars.ForcedHWId, _hwidString);
 
-        // Check if _HWIdString is a valid hex string (allowing empty string) and pad it if necessary
-        if (Regex.IsMatch(_HWIdString, "^$|^[A-F0-9]{64}$")) // '*' allows for zero or more characters
+        if (HWID.CheckHWID(_hwidString))
         {
-            if (LIHWIDBind)
-            {
-                if (_loginManager.ActiveAccount != null)
-                {
-                    Log.Debug($"Writing {hwid} to {_loginManager.ActiveAccount.Username}");
-                    _loginManager.ActiveAccount.LoginInfo.HWID = hwid;
-                }
-            }
-            else
-            {
-                Log.Debug($"Writing {hwid} to MarseyConf");
-                Cfg.SetCVar(CVars.ForcedHWId, _HWIdString);
-                Cfg.CommitConfig();
-            }
-
-            OnPropertyChanged(nameof(HWIdString));
-            return;
+            HWIDTextBoxBorderBrush = new SolidColorBrush(Color.Parse("#FF888888"));
+            Cfg.CommitConfig();
+        }
+        else
+        {
+            HWIDTextBoxBorderBrush = new SolidColorBrush(Brushes.Red.Color);
         }
 
-        Log.Warning("Passed HWId is not a valid hexadecimal string! Refusing to apply.");
+        OnPropertyChanged(nameof(HWIdString));
     }
 
     private void OnSetRPCUsernameClick()
     {
-        Cfg.SetCVar(CVars.RPCUsername, _RPCUsername);
+        Cfg.SetCVar(CVars.RPCUsername, RPCUsername);
         Cfg.CommitConfig();
     }
 
     private void OnGenHWIdClick()
     {
         string hwid = HWID.GenerateRandom();
-        _HWIdString = hwid;
         HWIdString = hwid;
 
         OnSetHWIdClick();
diff --git a/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml b/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml
index 5bcb0e3..dc190f5 100644
--- a/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml
+++ b/SS14.Launcher/Views/MainWindowTabs/OptionsTabView.xaml
@@ -91,7 +91,7 @@
               <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" TextWrapping="NoWrap"
                          Text="Set your username below. This username will be shown in the discord rich presence activity when hovering on the big icon."
                          Margin="8"/>
-              <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="RPCUsernameTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding RPCUsername}"/>
+              <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="RPCUsernameTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding RPCUsername, Mode=TwoWay}" IsEnabled="True" IsReadOnly="False"/>
               <Button Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left" Content="Set username" Command="{Binding SetRPCUsernameCommand}" VerticalAlignment="Center" Margin="4"/>
             </Grid>
 
@@ -115,7 +115,8 @@
                  <TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" VerticalAlignment="Center" TextWrapping="NoWrap"
                             Text="Change your HWID. Can be set to be empty or any hexadecimal string."
                             Margin="8"/>
-                 <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" x:Name="HWIdTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding HWIdString}"/>
+                 <TextBox Grid.Row="1" Grid.Column="0" Width="600" MaxWidth="1000" HorizontalAlignment="Left" BorderBrush="{Binding HWIDTextBoxBorderBrush}"
+                          x:Name="HWIdTextBox" VerticalAlignment="Center" Margin="4" Text="{Binding HWIdString, Mode=TwoWay}"/>
                  <Button Grid.Row="2" Grid.Column="0" HorizontalAlignment="Left" Content="Set HWID" Command="{Binding SetHWIdCommand}" VerticalAlignment="Center" Margin="4"/>
                  <Button Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" Content="Generate random" Command="{Binding GenHWIdCommand}" VerticalAlignment="Center" Margin="4"/>
              </Grid>