diff --git a/StoPasswordBook/StoPasswordBook/Extern/AutoUpdate.cs b/StoPasswordBook/StoPasswordBook/Extern/AutoUpdate.cs
index 339a0da..1659d72 100644
--- a/StoPasswordBook/StoPasswordBook/Extern/AutoUpdate.cs
+++ b/StoPasswordBook/StoPasswordBook/Extern/AutoUpdate.cs
@@ -1,5 +1,6 @@
 using System.Diagnostics;
 using System.IO;
+using System.Windows;
 using log4net;
 using StoPasswordBook;
 using StoPasswordBook.Generic;
@@ -44,6 +45,7 @@ public static void CheckAndUpdate()
                 if (!File.Exists(commonUpdaterPath))
                 {
                     Log.Info("There's no CommonUpdater in the folder. Failed to update.");
+                    MessageBox.Show("There's no CommonUpdater in the folder. Failed to update.\nIf you want get more supports, Please use the AutoUpdate feature");
                     return;
                 }
                 
diff --git a/StoPasswordBook/StoPasswordBook/Generic/Api.cs b/StoPasswordBook/StoPasswordBook/Generic/Api.cs
index 0a07c06..5467c1c 100644
--- a/StoPasswordBook/StoPasswordBook/Generic/Api.cs
+++ b/StoPasswordBook/StoPasswordBook/Generic/Api.cs
@@ -1,6 +1,8 @@
 using System.ComponentModel;
 using System.Diagnostics;
 using System.IO;
+using System.Net;
+using System.Net.Sockets;
 using System.Reflection;
 using System.Text.RegularExpressions;
 using System.Windows.Media;
@@ -187,14 +189,14 @@ private static void AppendElement(XmlDocument doc, XmlNode root, string name, st
             root.AppendChild(element);
         }
         
-        private static async Task Locate()
+        private static async Task  Locate()
         {
             try
             {
                 if (BrowserManager.Browser == null)
                 {
                     Log.Error("Browser is null.");
-                    return;
+                    throw new UnreachableException();
                 }
 
                 var page = await BrowserManager.Browser.NewPageAsync();
@@ -204,7 +206,7 @@ private static async Task Locate()
                 
                 await pageHandler.NavigateTo(GlobalVariables.DebugUrl);
                 Log.Debug($"Attempting accessing {GlobalVariables.DebugUrl}");
-                MainWindow.UpdateText($"Attempting accessing {GlobalVariables.DebugUrl}");
+                MainWindow.UpdateText("Attempting accessing STO Launcher");
 
                 var linkElement = await pageHandler.QuerySelector("a[title='Cryptic Launcher | Star Trek']");
                 if (linkElement != null)
@@ -214,7 +216,7 @@ private static async Task Locate()
                     GlobalVariables.DebugUrl = hrefJson.ToString();
                     await page.GoToAsync(GlobalVariables.DebugUrl);
                     Log.Debug(GlobalVariables.DebugUrl);
-                    MainWindow.UpdateText($"Attempting accessing {GlobalVariables.DebugUrl}");
+                    MainWindow.UpdateText("Attempting accessing STO Launcher");
                 }
 
                 string pattern = @"ws=127\.0\.0\.1:\d+/devtools/page/([A-F0-9]{32})";
@@ -226,15 +228,13 @@ private static async Task Locate()
                 }
                 else
                 {
-                    MainWindow.UpdateText("Launcher timed out.");
-                    KillExistingInstances("Star Trek Online.exe");
+                    throw new UnreachableException();
                 }
 
                 if (pageId == "null")
                 {
                     Log.Error("PageId is null.");
-                    MainWindow.UpdateText("Please try again.");
-                    return;
+                    throw new UnreachableException();
                 }
                 
                 string webSocketUrl = $"ws://localhost:{GlobalVariables.DebugPort}/devtools/page/{pageId}";
@@ -244,7 +244,7 @@ private static async Task Locate()
                 
                 WebSocketManager.InitWebSocket(GlobalVariables.WebSocketUrl);
                 
-                MainWindow.UpdateText("Done.", Brushes.Green);
+                MainWindow.UpdateText("Done! Please choose a Account for login.", Brushes.Green);
                 Log.Info("Api initialized.");
 
                 await page.CloseAsync();
@@ -254,8 +254,20 @@ private static async Task Locate()
             catch (Exception ex)
             {
                 Log.Error(ex.Message + ex.StackTrace);
+                throw new UnreachableException();
             }
         }
+        
+        private static int GetAvailablePort()
+        {
+            using TcpListener listener = new TcpListener(IPAddress.Loopback, 0);
+
+            listener.Start();
+            IPEndPoint endpoint = (IPEndPoint)listener.LocalEndpoint;
+            listener.Stop();
+            
+            return endpoint.Port;
+        }
 
         public static async Task InitApi()
         {
@@ -282,9 +294,8 @@ public static async Task InitApi()
             SaveSettings();
             Log.Debug(GlobalVariables.LauncherPath);
 
-            Random random = new Random();
-            int randomNum = random.Next(500, 65535);
-            GlobalVariables.DebugPort = randomNum;
+            int availablePort = GetAvailablePort();
+            GlobalVariables.DebugPort = availablePort;
             Log.Debug(GlobalVariables.DebugPort);
             
             if (!File.Exists(GlobalVariables.LauncherPath))
@@ -301,9 +312,21 @@ public static async Task InitApi()
             Process.Start(processStartInfo);
             Log.Debug($"Trying to start launcher with {processStartInfo.Arguments}");
             
-            await Task.Delay(TimeSpan.FromSeconds(GlobalVariables.WaitInterval));
             await BrowserManager.InitBrowser();
-            await Locate();
+            await RetryLocate();
+        }
+
+        private static async Task RetryLocate()
+        {
+            try
+            {
+                await Locate();
+            }
+            catch (UnreachableException ex)
+            {
+                Log.Error($"Locate failed. Retrying...");
+                await RetryLocate();
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/StoPasswordBook/StoPasswordBook/Generic/GlobalVariables.cs b/StoPasswordBook/StoPasswordBook/Generic/GlobalVariables.cs
index 8bcf346..0bd5d72 100644
--- a/StoPasswordBook/StoPasswordBook/Generic/GlobalVariables.cs
+++ b/StoPasswordBook/StoPasswordBook/Generic/GlobalVariables.cs
@@ -19,8 +19,5 @@ public class GlobalVariables
 
         [IgnoreSetting]
         public static string WebSocketUrl { get; set; } = "null";
-        
-        [Description("How many seconds the program will wait. \nDefault value: 5")]
-        public static int WaitInterval { get; set; } = 10;
     }
 }
\ No newline at end of file
diff --git a/StoPasswordBook/StoPasswordBook/Generic/PageHandler.cs b/StoPasswordBook/StoPasswordBook/Generic/PageHandler.cs
index da1cef6..59f044a 100644
--- a/StoPasswordBook/StoPasswordBook/Generic/PageHandler.cs
+++ b/StoPasswordBook/StoPasswordBook/Generic/PageHandler.cs
@@ -38,26 +38,5 @@ public async Task NavigateTo(string url)
                 return null;
             }
         }
-
-        public async Task FillInputField(string selector, string value)
-        {
-            try
-            {
-                var element = await QuerySelector(selector);
-                if (element != null)
-                {
-                    await element.EvaluateFunctionAsync("el => el.value = arguments[0]", value);
-                    Console.WriteLine($"{selector} filled with {value}.");
-                }
-                else
-                {
-                    Console.WriteLine($"Element {selector} not found.");
-                }
-            }
-            catch (Exception e)
-            {
-                Console.WriteLine($"Error filling input field {selector}: {e.Message}");
-            }
-        }
     }
 }
\ No newline at end of file
diff --git a/StoPasswordBook/StoPasswordBook/Generic/WebSocketManager.cs b/StoPasswordBook/StoPasswordBook/Generic/WebSocketManager.cs
index c68fec4..c1d8cd1 100644
--- a/StoPasswordBook/StoPasswordBook/Generic/WebSocketManager.cs
+++ b/StoPasswordBook/StoPasswordBook/Generic/WebSocketManager.cs
@@ -45,6 +45,8 @@ private static void OnMessage(object? sender, MessageEventArgs ev)
                         {
                             rst = rst.Replace(LastAccount[0], "ACCOUNT_HIDDEN_DUE_TO_PRIVACY");
                             Log.Info($"Response From Username Column: {rst}");
+                            
+                            MainWindow.UpdateText("Sent account and passwords to Launcher.", Brushes.CornflowerBlue);
                             return;
                         }
 
@@ -52,6 +54,8 @@ private static void OnMessage(object? sender, MessageEventArgs ev)
                         {
                             rst = rst.Replace(LastAccount[1], "PASSWORD_HIDDEN_DUE_TO_PRIVACY");
                             Log.Info($"Response From Password Column: {rst}");
+                            
+                            MainWindow.UpdateText("Sent account and passwords to Launcher.", Brushes.CornflowerBlue);
                             return;
                         }
                     }
@@ -65,10 +69,22 @@ private static void OnMessage(object? sender, MessageEventArgs ev)
             }
         }
 
-        public static bool SetUsernameAndPassword(WebSocket webSocket, string userStr, string pwdStr)
+        public static bool SetUsernameAndPassword(WebSocket? webSocket, string? userStr, string? pwdStr)
         {
             try
             {
+                if (webSocket == null)
+                {
+                    MainWindow.UpdateText("Websocket is null. Please try again.");
+                    return false;
+                }
+
+                if (string.IsNullOrEmpty(userStr) || string.IsNullOrEmpty(pwdStr))
+                {
+                    MainWindow.UpdateText("Account or Password is null or empty. Please check Shadow.xml");
+                    return false;
+                }
+                
                 Random random = new Random();
                 int random0 = random.Next(1, 10000);
                 int random1 = random.Next(1, 10000);
@@ -96,7 +112,6 @@ public static bool SetUsernameAndPassword(WebSocket webSocket, string userStr, s
                     }
                 };
                 webSocket.Send(JsonConvert.SerializeObject(setPassword));
-                MainWindow.UpdateText("Sent account and passwords to Launcher.", Brushes.CornflowerBlue);
                 
                 return true;
             }
diff --git a/StoPasswordBook/StoPasswordBook/MainWindow.xaml.cs b/StoPasswordBook/StoPasswordBook/MainWindow.xaml.cs
index 7a3ee8e..894aa71 100644
--- a/StoPasswordBook/StoPasswordBook/MainWindow.xaml.cs
+++ b/StoPasswordBook/StoPasswordBook/MainWindow.xaml.cs
@@ -16,7 +16,7 @@ namespace StoPasswordBook;
 /// </summary>
 public partial class MainWindow : FluentWindow
 {
-    public static readonly string Version = "1.0.1";
+    public static readonly string Version = "1.0.2";
     
     private static readonly ILog Log = LogManager.GetLogger(typeof(MainWindow));
     
@@ -98,7 +98,7 @@ private async void SubmitButton_Click(object sender, RoutedEventArgs e)
     {
         var selectedAccount = AccountComboBox.SelectedItem as KeyValuePair<string, string>?;
 
-        if (selectedAccount.HasValue)
+        if (selectedAccount != null && selectedAccount.HasValue)
         {
             var accountName = selectedAccount.Value.Key;
             var selectedPassword = selectedAccount.Value.Value;