diff --git a/WpkgInstaller/WpkgInstaller.cs b/WpkgInstaller/WpkgInstaller.cs
index edb1a0e3b7a3867514ac63b680ac70690ac4f8e0..c36bb4f8b8f85f40149d136d0c8b6c3449d1ac96 100644
--- a/WpkgInstaller/WpkgInstaller.cs
+++ b/WpkgInstaller/WpkgInstaller.cs
@@ -3,6 +3,8 @@ using System.ServiceProcess;
 using System.Diagnostics;
 using System;
 using System.ServiceModel;
+using System.Collections;
+using System.Collections.Generic;
 
 namespace WpkgInstaller
 {
@@ -35,12 +37,14 @@ namespace WpkgInstaller
 
         [DllImport("advapi32.dll", SetLastError = true)]
         private static extern bool SetServiceStatus(System.IntPtr handle, ref ServiceStatus serviceStatus);
+        private Dictionary<int, IWpkgNotifierMessageClient> clients;
 
         public WpkgInstaller()
         {
             InitializeComponent();
             
             eventLog = new EventLog();
+            clients = new Dictionary<int, IWpkgNotifierMessageClient>();
             string eventSourceName = "WpkgInstaller Service";
             string logName = "WpkgNotifier";
 
@@ -206,12 +210,34 @@ namespace WpkgInstaller
         public void Register(int pid)
         {
             eventLog.WriteEntry(String.Format("Register requested for {0}", pid));
-            // throw new NotImplementedException();
+            IWpkgNotifierMessageClient client = OperationContext.Current.GetCallbackChannel <IWpkgNotifierMessageClient>();
+            clients.Add(pid, client);
+            
+            foreach(KeyValuePair<int, IWpkgNotifierMessageClient> kv in clients)
+            {
+                try
+                {
+                    kv.Value.StatusLine(String.Format("Register requested for {0}", pid));
+                }
+                catch (Exception e)
+                {
+                    eventLog.WriteEntry("Error communicating with client " + kv.Key + " " + e.ToString(), EventLogEntryType.Warning);
+                }
+            }
         }
 
         public void ProcessRequest(WpkgMessageRequestType type)
         {
-            throw new NotImplementedException();
+            switch (type)
+            {
+                case WpkgMessageRequestType.DO_SYNC:
+                    RunWpkgSync();
+                    break;
+                case WpkgMessageRequestType.RUN_QUERY:
+                    RunWpkgQuery();
+                    break;
+
+            }
         }
     }
 }
diff --git a/WpkgNotifier/TrayNotifier.cs b/WpkgNotifier/TrayNotifier.cs
index 64f4bd58dcb41b29340fdac7def32c70ad8732ef..4aa7c9bdab9236fcc7771038ace7db8be9293322 100644
--- a/WpkgNotifier/TrayNotifier.cs
+++ b/WpkgNotifier/TrayNotifier.cs
@@ -78,14 +78,13 @@ namespace WpkgNotifier
 
                 server = channelFactory.CreateChannel();
                 eventLog.WriteEntry("channel created");
-                server.Register(123);
+                Process currentProcess = Process.GetCurrentProcess();
+                server.Register(currentProcess.Id);
                 eventLog.WriteEntry("Registered with server");
-                // this method should probably be 'RegisterWithService'
             }
             catch (Exception e)
             {
                 eventLog.WriteEntry("problem creating channel");
-
                 eventLog.WriteEntry(e.Message);
             }
         }
@@ -93,13 +92,13 @@ namespace WpkgNotifier
         void RequestSync(object sender, EventArgs e)
         {
             notifyIcon.ContextMenu.MenuItems[0].Enabled = false;
-            // send DO_SYNC request to server
+            server.ProcessRequest(WpkgMessageRequestType.DO_SYNC);
         }
 
         void RequestQuery(object sender, EventArgs e)
         {
             notifyIcon.ContextMenu.MenuItems[0].Enabled = false;
-            // send RUN_QUERY request to server
+            server.ProcessRequest(WpkgMessageRequestType.RUN_QUERY);
         }
 
         void ManageSoftware(object sender, EventArgs e)
@@ -152,7 +151,7 @@ namespace WpkgNotifier
 
         public void StatusLine(string msg)
         {
-            throw new NotImplementedException();
+            SetToolTip(msg);
         }
     }
 }