diff --git a/WpkgInstaller/IWpkgNotifierMessageServer.cs b/WpkgInstaller/IWpkgNotifierMessageServer.cs
index 3dd53809d4a456eaa11b456f47c4ad0072d27af0..b1ec47cfc04c266898e212f3b3ff2377ab7c55cd 100755
--- a/WpkgInstaller/IWpkgNotifierMessageServer.cs
+++ b/WpkgInstaller/IWpkgNotifierMessageServer.cs
@@ -9,6 +9,9 @@ namespace WpkgInstaller
         [OperationContract(IsOneWay = true)]
         void Register(int pid);
 
+        [OperationContract(IsOneWay = true)]
+        void Unregister(int pid);
+
         [OperationContract(IsOneWay = true)]
         void ProcessRequest(WpkgMessageRequestType type);
     }
diff --git a/WpkgInstaller/WpkgInstaller.cs b/WpkgInstaller/WpkgInstaller.cs
index 9de8c699fca6fa9c6c16785221e10dad371d90a7..31f161b74d6b05f9c4717a75bfb514c0c6226d71 100644
--- a/WpkgInstaller/WpkgInstaller.cs
+++ b/WpkgInstaller/WpkgInstaller.cs
@@ -207,6 +207,17 @@ namespace WpkgInstaller
             }
         }
 
+        public void Unregister(int pid)
+        {
+            if(clients.Remove(pid))
+            {
+                eventLog.WriteEntry(String.Format("Client {0} unregistered", pid));
+            }
+            else
+            {
+                eventLog.WriteEntry(String.Format("Unknown client {0} requested to unregister", pid), EventLogEntryType.Warning);
+            }
+        }
         public void ProcessRequest(WpkgMessageRequestType type)
         {
             switch (type)
diff --git a/WpkgNotifier/TrayNotifier.cs b/WpkgNotifier/TrayNotifier.cs
index d097ee75f4667e46dd352c448ad2133390fd6b41..64855fa4b0ba8b5ef569e78bcd3b8122b694e32f 100644
--- a/WpkgNotifier/TrayNotifier.cs
+++ b/WpkgNotifier/TrayNotifier.cs
@@ -15,10 +15,13 @@ namespace WpkgNotifier
         private EventLog eventLog;
         private WpkgMessageState state;
         private IWpkgNotifierMessageServer server;
+        private int pid;
 
         public TrayNotifier()
         {
-
+            Process currentProcess = Process.GetCurrentProcess();
+            pid = currentProcess.Id;
+    
             eventLog = new EventLog();
             string eventSourceName = "TrayNotifier";
             string logName = "WpkgNotifier";
@@ -34,6 +37,8 @@ namespace WpkgNotifier
             
             OpenMessageChannel();
 
+            Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
+
             MenuItem actionsMenu = new MenuItem("Actions");
             MenuItem syncMenuItem = new MenuItem("Sync", new EventHandler(RequestSync));
             MenuItem queryMenuItem = new MenuItem("Query", new EventHandler(RequestQuery));
@@ -65,6 +70,11 @@ namespace WpkgNotifier
             };
         }
 
+        private void OnApplicationExit(object sender, EventArgs e)
+        {
+            server.Unregister(pid);
+        }
+
         private void OpenMessageChannel()
         {
             eventLog.WriteEntry("Trying to open channel");
@@ -78,8 +88,7 @@ namespace WpkgNotifier
 
                 server = channelFactory.CreateChannel();
                 eventLog.WriteEntry("channel created");
-                Process currentProcess = Process.GetCurrentProcess();
-                server.Register(currentProcess.Id);
+                server.Register(pid);
                 eventLog.WriteEntry("Registered with server");
             }
             catch (Exception e)
@@ -114,6 +123,8 @@ namespace WpkgNotifier
             Application.Exit();
         }
 
+
+
         public void SetToolTip(string msg)
         {
             notifyIcon.Text = msg;