diff --git a/Console/ConsoleApp.cs b/Console/ConsoleApp.cs
index d869d10..efb657a 100644
--- a/Console/ConsoleApp.cs
+++ b/Console/ConsoleApp.cs
@@ -15,18 +15,7 @@ public ConsoleApp(IConfigurationService configurationService)
 
         public void Run(string[] args)
         {
-            if (args.Contains("--web"))
-            {
-                RestApi(args);
-            } else
-            {
-                MainMenu();
-            }
-        }
-
-        private void MainMenu()
-        {
-            throw new NotImplementedException();
+            RestApi(args);
         }
 
         private void RestApi(string[] args)
diff --git a/RestApi/Controllers/KeyController.cs b/RestApi/Controllers/KeyController.cs
index b39a06b..cb681d2 100644
--- a/RestApi/Controllers/KeyController.cs
+++ b/RestApi/Controllers/KeyController.cs
@@ -19,6 +19,7 @@ public class KeyController : AbstractBase
         [HttpPost]
         public IActionResult Post([FromBody] Command value)
         {
+            Program.ReceivedKey(value, false);
             return SendKeystroke(value, false);
         }
     }
diff --git a/RestApi/Controllers/ToggleController.cs b/RestApi/Controllers/ToggleController.cs
index be49003..2fdcf40 100644
--- a/RestApi/Controllers/ToggleController.cs
+++ b/RestApi/Controllers/ToggleController.cs
@@ -19,6 +19,7 @@ public class ToggleController : AbstractBase
         [HttpPost]
         public IActionResult Post([FromBody] Command value)
         {
+            Program.ReceivedKey(value, true);
             return SendKeystroke(value, true);
         }
     }
diff --git a/RestApi/Controllers/VersionController.cs b/RestApi/Controllers/VersionController.cs
index 7739e10..a47c62a 100644
--- a/RestApi/Controllers/VersionController.cs
+++ b/RestApi/Controllers/VersionController.cs
@@ -19,9 +19,9 @@ public class VersionController : ControllerBase
         [HttpPost]
         public IActionResult Get()
         {
+            Program.ReceivedVersionCheck();
             Assembly assembly = Assembly.GetExecutingAssembly();
-            //FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
-            string version = API_VERSION;// fileVersionInfo.ProductVersion;
+            string version = API_VERSION;
 
             return Ok(new { Version = version });
         }
diff --git a/RestApi/Crypto.cs b/RestApi/Crypto.cs
deleted file mode 100644
index 0c4138d..0000000
--- a/RestApi/Crypto.cs
+++ /dev/null
@@ -1,57 +0,0 @@
-﻿using System;
-using System.Text;
-using System.Security.Cryptography;
-
-namespace GIC.RestApi
-{
-    public class Crypto
-    {
-        private const string SECRET_KEY = "5MOujLrJUpjIEqLg";//16 char secret key
-
-        public static string Decrypt(string textToDecrypt)
-        {
-            RijndaelManaged rijndaelCipher = new RijndaelManaged();
-            rijndaelCipher.Mode = CipherMode.CBC;
-            rijndaelCipher.Padding = PaddingMode.PKCS7;
-
-            rijndaelCipher.KeySize = 0x80;
-            rijndaelCipher.BlockSize = 0x80;
-            byte[] encryptedData = Convert.FromBase64String(textToDecrypt);
-            byte[] pwdBytes = Encoding.UTF8.GetBytes(SECRET_KEY);
-            byte[] keyBytes = new byte[0x10];
-            int len = pwdBytes.Length;
-            if (len > keyBytes.Length)
-            {
-                len = keyBytes.Length;
-            }
-            Array.Copy(pwdBytes, keyBytes, len);
-            rijndaelCipher.Key = keyBytes;
-            rijndaelCipher.IV = keyBytes;
-            byte[] plainText = rijndaelCipher.CreateDecryptor().TransformFinalBlock(encryptedData, 0, encryptedData.Length);
-            return Encoding.UTF8.GetString(plainText);
-        }
-
-        public static string Encrypt(string textToEncrypt)
-        {
-            RijndaelManaged rijndaelCipher = new RijndaelManaged();
-            rijndaelCipher.Mode = CipherMode.CBC;
-            rijndaelCipher.Padding = PaddingMode.PKCS7;
-
-            rijndaelCipher.KeySize = 0x80;
-            rijndaelCipher.BlockSize = 0x80;
-            byte[] pwdBytes = Encoding.UTF8.GetBytes(SECRET_KEY);
-            byte[] keyBytes = new byte[0x10];
-            int len = pwdBytes.Length;
-            if (len > keyBytes.Length)
-            {
-                len = keyBytes.Length;
-            }
-            Array.Copy(pwdBytes, keyBytes, len);
-            rijndaelCipher.Key = keyBytes;
-            rijndaelCipher.IV = keyBytes;
-            ICryptoTransform transform = rijndaelCipher.CreateEncryptor();
-            byte[] plainText = Encoding.UTF8.GetBytes(textToEncrypt);
-            return Convert.ToBase64String(transform.TransformFinalBlock(plainText, 0, plainText.Length));
-        }
-    }
-}
diff --git a/RestApi/IListener.cs b/RestApi/IListener.cs
new file mode 100644
index 0000000..d574ea7
--- /dev/null
+++ b/RestApi/IListener.cs
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace GIC.RestApi
+{
+    public interface IListener
+    {
+        void KeystrokeReceived(int activator, string key, string[] modifier, bool quickCommand);
+        void Output(string message);
+    }
+}
diff --git a/RestApi/Program.cs b/RestApi/Program.cs
index 9eef3a1..f0daf89 100644
--- a/RestApi/Program.cs
+++ b/RestApi/Program.cs
@@ -1,4 +1,5 @@
 using CommandLine;
+using GIC.Common;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.Hosting;
 using System.Collections.Generic;
@@ -11,8 +12,6 @@ public class Program
     {
         public class Options
         {
-            [Option("web", Default = false, Required = false)]
-            public string Web { get; set; }
             [Option("port", Default = false, Required = true, HelpText = "IP Port to Listen on")]
             public int Port { get; set; }
             [Option("password", Default = false, Required = true, HelpText = "Password to expect from client")]
@@ -21,7 +20,20 @@ public class Options
             public string Application { get; set; }
         }
 
+        internal static void ReceivedKey(Common.Command value, bool quickCommand)
+        {
+            if (AppListener != null)
+                AppListener.KeystrokeReceived(value.ActivatorType, value.Key, value.Modifier, quickCommand);
+        }
+
+        internal static void ReceivedVersionCheck()
+        {
+            if (AppListener != null)
+                AppListener.Output("Version check received");
+        }
+
         public static string Key { get; internal set; }
+        public static IListener AppListener;
 
         public static void Main(string[] args)
         {
@@ -43,8 +55,10 @@ public static void Stop()
             host.StopAsync();
         }
 
-        public static bool Start(string[] args)
+        public static bool Start(string[] args, IListener listener = null)
         {
+            if (listener != null)
+                AppListener = listener;
             Parser.Default.ParseArguments<Options>(args)
                 .WithParsed(RunOptions)
                 .WithNotParsed(HandleParseError);
@@ -64,7 +78,8 @@ private static void RunOptions(Options opts)
 
         private static void HandleParseError(IEnumerable<Error> errs)
         {
-            //handle errors
+            //handle errorsE
+            System.Environment.Exit(1);
         }
 
         private static void CheckFirewall(int port)
diff --git a/Wpf/App.xaml.cs b/Wpf/App.xaml.cs
index 4bb5605..2d30e24 100644
--- a/Wpf/App.xaml.cs
+++ b/Wpf/App.xaml.cs
@@ -1,4 +1,5 @@
 ﻿using GIC.Common.Services;
+using GIC.RestApi;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
 using System.Windows;
@@ -12,6 +13,7 @@ public partial class App : Application
     {
         private ServiceProvider serviceProvider;
         private IConfigurationRoot configuration;
+        internal static string[] Arguments;
 
         public App()
         {
@@ -34,6 +36,9 @@ private void ConfigureServices(ServiceCollection services)
 
         protected void OnStartup(object sender, StartupEventArgs e)
         {
+            if (e.Args.Length > 0)
+                Arguments = e.Args;
+
             var mainWindow = serviceProvider.GetService<MainWindow>();
             mainWindow.Show();
         }
diff --git a/Wpf/Listener.cs b/Wpf/Listener.cs
new file mode 100644
index 0000000..ac42567
--- /dev/null
+++ b/Wpf/Listener.cs
@@ -0,0 +1,22 @@
+﻿using GIC.RestApi;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GIC.Wpf
+{
+    class Listener : IListener
+    {
+        public void KeystrokeReceived(int activator, string key, string[] modifier, bool quickCommand)
+        {
+            throw new NotImplementedException();
+        }
+
+        public void Output(string message)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/Wpf/MainWindow.xaml b/Wpf/MainWindow.xaml
index f8c987a..7fddda3 100644
--- a/Wpf/MainWindow.xaml
+++ b/Wpf/MainWindow.xaml
@@ -6,7 +6,7 @@
         Icon="app.ico"
         mc:Ignorable="d"
         Title="GIC Server" SizeToContent="WidthAndHeight" ResizeMode="NoResize">
-    <Grid Width="408" Height="267">
+    <Grid Width="408" Height="332">
         <Label Content="Port" HorizontalContentAlignment ="Right" HorizontalAlignment="Left" Margin="240,83,0,0" VerticalAlignment="Top"/>
         <TextBox x:Name="txtPort" DataObject.Pasting="TextBoxPasting" PreviewTextInput="PreviewTextInput" HorizontalAlignment="Left" Margin="278,83,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="8091"/>
         <Label Content="Password" HorizontalContentAlignment ="Right" HorizontalAlignment="Left" Margin="212,105,0,0" VerticalAlignment="Top" RenderTransformOrigin="2.875,0.886"/>
@@ -14,11 +14,12 @@
         <Label Content="Target" HorizontalContentAlignment ="Center" Margin="10,10,203,0" VerticalAlignment="Top" RenderTransformOrigin="-0.907,-2.615" Height="26"/>
         <Button x:Name="btnStart" Content="Start" Margin="212,151,10,0" VerticalAlignment="Top" Height="60" Click="btnStart_Click"/>
         <Button Content="About" x:Name="btnAbout" HorizontalAlignment="Left" Margin="323,38,0,0" VerticalAlignment="Top" Width="74" Height="20" Click="btnAbout_Click"/>
-        <ListBox Margin="10,36,203,37" x:Name="lstApps"/>
-        <ComboBox HorizontalAlignment="Left" Margin="10,229,0,0" VerticalAlignment="Top" Width="194" IsEditable="True" x:Name="cboApps" SelectionChanged="cboApps_SelectionChanged"/>
+        <ListBox Margin="10,36,203,0" x:Name="lstApps" Height="188" VerticalAlignment="Top"/>
+        <ComboBox HorizontalAlignment="Left" Margin="10,229,0,0" VerticalAlignment="Top" Width="195" IsEditable="True" x:Name="cboApps" SelectionChanged="cboApps_SelectionChanged"/>
         <Button Content="Remove" x:Name="btnRemove" HorizontalAlignment="Left" Margin="148,11,0,0" VerticalAlignment="Top" Width="56" Click="btnRemove_Click"/>
         <Button Content="Help" x:Name="btnHelp" HorizontalAlignment="Left" Margin="323,13,0,0" VerticalAlignment="Top" Width="74" Height="20" Click="btnHelp_Click"/>
         <Button Content="Add" x:Name="btnAdd" HorizontalAlignment="Left" Margin="209,231,0,0" VerticalAlignment="Top" Width="56" Click="btnAdd_Click"/>
+        <TextBox x:Name="txtOutput" HorizontalAlignment="Center" Margin="0,256,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="387" Height="66" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" IsReadOnly="True"/>
 
     </Grid>
 </Window>
diff --git a/Wpf/MainWindow.xaml.cs b/Wpf/MainWindow.xaml.cs
index cbd8bb7..b0dded3 100644
--- a/Wpf/MainWindow.xaml.cs
+++ b/Wpf/MainWindow.xaml.cs
@@ -1,20 +1,26 @@
 ﻿using GIC.Common;
 using GIC.Common.Services;
+using GIC.RestApi;
+using System;
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Input;
+using System.Windows.Media;
 
 namespace GIC.Wpf
 {
     /// <summary>
     /// Interaction logic for MainWindow.xaml
     /// </summary>
-    public partial class MainWindow : Window
+    public partial class MainWindow : Window, IListener
     {
         private bool isRunning = false;
+        private bool cmdLinePassword;
+        private bool cmdLinePort;
+        private string cmdLineApp;
         private readonly IConfigurationService configurationService;
 
         public MainWindow(IConfigurationService configurationService)
@@ -23,6 +29,38 @@ public MainWindow(IConfigurationService configurationService)
             InitializeComponent();
             LoadSettings();
             WindowHandles();
+            CheckArgs();
+        }
+
+        private void CheckArgs()
+        {
+            if (App.Arguments != null && App.Arguments.Length > 0)
+            {
+                for (int i = 0; i < App.Arguments.Length - 1; i++)
+                {
+                    if (App.Arguments[i].ToLower().Equals("--password"))
+                    {
+                        i++;
+                        txtPassword.Password = App.Arguments[i];
+                        cmdLinePassword = true;
+                    }
+                    else if (App.Arguments[i].ToLower().Equals("--port"))
+                    {
+                        i++;
+                        txtPort.Text = App.Arguments[i];
+                        cmdLinePort = true;
+                    }
+                    else if (App.Arguments[i].ToLower().Equals("--app"))
+                    {
+                        i++;
+                        cmdLineApp = App.Arguments[i];
+                    }
+                    if (!string.IsNullOrEmpty(cmdLineApp) && cmdLinePassword && cmdLinePort)
+                    {
+                        ToggleServer();
+                    }
+                }
+            }
         }
 
         private static readonly Regex regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text
@@ -102,6 +140,7 @@ private void ToggleServer()
                 }
                 else
                 {
+                    cmdLineApp = lstApps.SelectedItem.ToString();
                     string[] args = new string[]
                     {
                         "--port",
@@ -109,11 +148,12 @@ private void ToggleServer()
                         "--password",
                         txtPassword.Password,
                         "--app",
-                        lstApps.SelectedItem.ToString(),
+                        cmdLineApp,
                     };
 
                     SaveSettings();
                     StartWeb(args);
+                    Output($"Starting Server listening on Port {port} for App {cmdLineApp}");
                     isRunning = true;
                     txtPassword.IsEnabled = false;
                     txtPort.IsEnabled = false;
@@ -127,7 +167,7 @@ private void ToggleServer()
 
         private void StartWeb(string[] args)
         {
-            Task.Run(() => RestApi.Program.Start(args));
+            Task.Run(() => Program.Start(args, this));
         }
 
         private void ToggleText()
@@ -199,5 +239,31 @@ private void btnHelp_Click(object sender, RoutedEventArgs e)
             Help window = new Help();
             window.Show();
         }
+
+        public void KeystrokeReceived(int activator, string key, string[] modifier, bool quickCommand)
+        {
+            string output = $"Key {key}";
+            foreach (string mod in modifier)
+                output += $"+{mod}";
+            if (activator == 0)
+                output += " pressed";
+            else
+                output += " let go";
+            Dispatcher.Invoke(() =>
+            {
+
+                txtOutput.Text += $"{output}\n";
+                txtOutput.ScrollToEnd();
+            });
+        }
+
+        public void Output(string message)
+        {
+            Dispatcher.Invoke(() =>
+            {
+                txtOutput.Text += $"{message}\n";
+                txtOutput.ScrollToEnd();
+            });
+        }
     }
 }
diff --git a/Wpf/Wpf.csproj b/Wpf/Wpf.csproj
index 6033fe3..e4e7357 100644
--- a/Wpf/Wpf.csproj
+++ b/Wpf/Wpf.csproj
@@ -1,10 +1,10 @@
 ﻿<Project Sdk="Microsoft.NET.Sdk">
 
   <PropertyGroup>
-    <OutputType>WinExe</OutputType>
+    <OutputType>Exe</OutputType>
     <TargetFramework>net5.0-windows</TargetFramework>
     <UseWPF>true</UseWPF>
-    <AssemblyName>GIC.Wpf</AssemblyName>
+    <AssemblyName>GIC</AssemblyName>
     <RootNamespace>GIC.Wpf</RootNamespace>
     <Version>2.0.0</Version>
     <PackageIcon>app.ico</PackageIcon>
