Index: modules/SysTray/TrayIcon.cpp
===================================================================
--- modules/SysTray/TrayIcon.cpp	(revision de8ef76befade0a20a14d547a1c134f37552cbf2)
+++ modules/SysTray/TrayIcon.cpp	(revision 6d3bbc1cbd06dba6145592a8ab68b1992b49e211)
@@ -26,8 +26,10 @@
 #include <ShellAPI.h>
 #include "SysTray.h"
+#include <error.hpp>
 
 
 extern SysTray gSysTray;
 
+//BOOL ChangeWindowMessageFilter(UINT message,DWORD dwFlag);
 
 unsigned IconWidget_::threadProc(LPVOID lpParameter)
@@ -40,4 +42,9 @@
 void IconWidget_::createDialog(void) {
 	hDlgWnd = ::CreateDialog(NSCModuleWrapper::getModule(),MAKEINTRESOURCE(IDD_NSTRAYDLG),NULL,TrayIcon::DialogProc);
+
+	UINT UDM_TASKBARCREATED = RegisterWindowMessage(_T("TaskbarCreated"));
+	if (UDM_TASKBARCREATED == 0) {
+		NSC_LOG_ERROR_STD(_T("Failed to register 'TaskbarCreated': ") + error::lookup::last_error());
+	}
 
 	MSG Msg;
@@ -47,4 +54,9 @@
 		if (Msg.message == WM_MY_CLOSE) {
 			::DestroyWindow(hDlgWnd);
+//		} else if (Msg.message == WM_QUERYENDSESSION) {
+//			NSC_LOG_ERROR_STD(_T("Got WM_QUERYENDSESSION thingy..."));
+		} else if (Msg.message == UDM_TASKBARCREATED) {
+			NSC_LOG_MESSAGE_STD(_T("Recreating systray icon..."));
+			TrayIcon::addIcon(Msg.hwnd);
 		} else if (bRet == -1) {
 			// handle the error and possibly exit
@@ -186,4 +198,6 @@
 }
 
+
+
 void insert_logrecord(HWND hwndLV, const SysTray::log_entry &entry) {
 	LVITEM item;
Index: modules/SysTray/TrayIcon.h
===================================================================
--- modules/SysTray/TrayIcon.h	(revision b5ef837d5259f7ef21114ea3318d58a7ea2a595f)
+++ modules/SysTray/TrayIcon.h	(revision 6d3bbc1cbd06dba6145592a8ab68b1992b49e211)
@@ -48,4 +48,5 @@
 	INT_PTR CALLBACK InjectDialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
 	INT_PTR CALLBACK LogDialogProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
+	void setupUI();
 	
 	void removeIcon(HWND hWnd);
