diff --git a/client/win/res/icon.ico b/client/win/res/icon.ico
index 2056196d08..3cd974d7a7 100755
--- a/client/win/res/icon.ico
+++ b/client/win/res/icon.ico
@@ -1 +1 @@
-  è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿøø?øàøøøüøüøüøüøüøøøðøà?øøÿøÿøÿøÿøàøð?øøøøøøøøøøøðøÀ?øøÿøÿÿÿÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÇ‡ÇãÇãÇãÇÇÇÀ?ÇÇÇÇÇÇÇÇÇÀÀ?
\ No newline at end of file
+  è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÌÀÀÌàÀÌÀàÀÌÌDD@ÌÌÄDDDDDÌÄDDDDDDÌÌDDDDDDDDÌÀÌOÿÿôDDDDLÌÌOÿÿÿÿDDDLÌÀîàOôOôOÿDDLÌÌÌîDDOôDOôD@ÌÀîDDOôDDÿDNîÌDDOôDDÿDNÌÀDDOôDOÿDÌODOÿÿÿô@ÌÀÌOÿÿÿÿôDDÌÌÀÌDDOôÿDDDLÌÌÀÌDDOôOÿDDLÌÌÌÌÌÌOôDOôD@ÌÌÀDOôDOÿD@ÌÌÀDOôDDÿôLÌÀOÿôDDÿôLÌÀOÿÿDÿÿôàÀÀOÿÿÿÿ@îDÿÿD@îÌDDàÌÀÌÀÌÀÌÀÀÿÿ¿ÿïÿ?ÿçÿÿãþÿñþÿððÿøþøøüáŒÀà€àð?øüøøðà@ÁÀ?‡À?ÀÀÿÀÿ€�ÿˆÇÿ˜ÿçÿüÿ÷ÿýÿÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿDDDD‡DDDDD@Oÿø„DHOHôÿDHDHôDôHDHôDøHDHø‡ô€OÿÿøD@DHôøDHHôHôHHôD÷HÿôDÿH‡÷�÷€HÿDˆøÿàÀÀÀÀÀÀÀÀðàààøþ?
\ No newline at end of file
diff --git a/client/win/res/iconhigh.ico b/client/win/res/iconhigh.ico
index b34427c866..190644f7a3 100755
--- a/client/win/res/iconhigh.ico
+++ b/client/win/res/iconhigh.ico
@@ -1 +1 @@
-  è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ™™	™™™��	™™™™�	�	™™™™™	�	™™™™™�™�	™™™™™™™�	™™™™™™	™�	™™™™™™�	™�	™™™™�™�	™�	™™™™	™�™™�	™™™�™™™™™�	™™	™™™™™�™™™™™™�	™™™™™™™�	™™™™™™�	™™™™™™	™�	™™™�	™™�	™�	™™™™™™�	™�	™™™™�	™�™�	™™™™�	™™�	™™™™�	™	�	™™™™�	��	™™™™�	�	™™™™		™™™�	™™ÿü?ÿøÿøø?øððàÀÀ€€€€€€ÀÀàððøøøÿøÿÿü?ÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ	™™�	™�		™™�		™™��™	™™�™™	™™	™™	™™™™™™™™	™™™™	™™	™		™™	�	™™		™™	�øÀÀÀ€€ÀÀÀÀ
\ No newline at end of file
+  è&(( @€€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿ™œ™™™Ì™™À™™™™É™™Ì	™™™�àÉ™™�ÌÉ™™™�àÉ™™™�ÌÌ™™DD@Ì™™™™œÌÄDDDDD™™™™	œÌÄDDDDDD™™™œÌ™™ÌDDDDDDDD™œÌÀ™ÌOÿÿôDDDDLÌÌ	OÿÿÿÿDDDLÌÉ�	�îàOôOôOÿDDLÌ™�ÌÌîDDOôDOôD@œÌÀîDDOôDDÿDNî™™œÌDDOôDDÿDN™™™™ÌÀDDOôDOÿD™™™™™œÌODOÿÿÿô@ÌÉ™™™™™ÌOÿÿÿÿôDDÌÌÉ™™™œÌDDOôÿDDDLÌÌÉ	™œÌDDOôOÿDDLÌÌÌ	™ÌÌÌOôDOôDI™™�	œÌÌÉDOôDOÿDI™™�ÌÌÉ™DOôDDÿôL™™ÌÉ™™OÿôDDÿôL™™ÌÉ™™™OÿÿDÿÿôàÉ�À™™™Oÿÿÿÿ@î	™™™DÿÿDI	™�îÌDD™™�	�àœÌÉ™™™�ÌÀ�	œÌ™™™™À™™Ì™™™ÀÉ™ÿü?ÿïÀÿçÿâðððàÀ€€€€€€À€pðøþGÿçÿÀ÷ÿü?ÿ( À€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿD™�DDD‡DDDDDIOÿø„DH	OHôÿDH�™DHôDôH™™DHôDøH™™DHø‡ô‰™™OÿÿøDI™™DHôøDH™™™HôHôH™	˜HôD÷H�˜ÿôDÿH—‡÷�÷‰˜HÿD	—ˆ�øàÀÀ€€ÀÀðø
\ No newline at end of file
diff --git a/client/win/resource.aps b/client/win/resource.aps
index 89e4ff3c5d..cd75414167 100644
Binary files a/client/win/resource.aps and b/client/win/resource.aps differ
diff --git a/client/win/resource.h b/client/win/resource.h
index ef01545b84..162ce3b43e 100755
--- a/client/win/resource.h
+++ b/client/win/resource.h
@@ -59,13 +59,15 @@
 #define ID_FILE_CLEARMESSAGES           40028
 #define ID_SETTINGS_PROXYSERVER         40029
 #define ID_FILE_SHOWGRAPHICS            40030
+#define ID_STATUSICON_RESUME            40031
+#define ID_FILE_RESUME                  40032
 
 // Next default values for new objects
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        128
-#define _APS_NEXT_COMMAND_VALUE         40031
+#define _APS_NEXT_COMMAND_VALUE         40033
 #define _APS_NEXT_CONTROL_VALUE         1019
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
diff --git a/client/win/resource.rc b/client/win/resource.rc
index 7ab901660f..0885ba1c4d 100755
--- a/client/win/resource.rc
+++ b/client/win/resource.rc
@@ -179,8 +179,8 @@ BEGIN
         MENUITEM "Clear &Messages",             ID_FILE_CLEARMESSAGES
         MENUITEM "Clear &Inactive",             ID_FILE_CLEARINACTIVE
         MENUITEM SEPARATOR
-        MENUITEM "&Hide",                       ID_FILE_HIDE
         MENUITEM "&Suspend",                    ID_FILE_SUSPEND
+        MENUITEM "&Resume",                     ID_FILE_RESUME
         MENUITEM SEPARATOR
         MENUITEM "E&xit",                       ID_FILE_EXIT
     END
@@ -201,8 +201,8 @@ IDR_CONTEXT MENU DISCARDABLE
 BEGIN
     POPUP "Status Icon"
     BEGIN
-        MENUITEM "Hide",                        ID_STATUSICON_HIDE
         MENUITEM "Suspend",                     ID_STATUSICON_SUSPEND
+        MENUITEM "Resume",                      ID_STATUSICON_RESUME
         MENUITEM SEPARATOR
         MENUITEM "Exit",                        ID_STATUSICON_EXIT
     END
diff --git a/client/win/wingui.cpp b/client/win/wingui.cpp
index 4c7dbbe5ff..aa857e522f 100755
--- a/client/win/wingui.cpp
+++ b/client/win/wingui.cpp
@@ -1245,14 +1245,10 @@ void CPieChartCtrl::OnPaint()
 //				otherwise shows the currently running window
 BOOL CMyApp::InitInstance()
 {
-	CWnd* pBoincWnd;
-	pBoincWnd = CWnd::FindWindow(NULL, WND_TITLE);
-	if(pBoincWnd) {
-		if(pBoincWnd->GetExStyle() & WS_EX_TOOLWINDOW) {
-			pBoincWnd->ShowWindow(SW_SHOW);
-			pBoincWnd->SetForegroundWindow();
-			return FALSE;
-		}
+	if(CreateMutex(NULL, false, "BOINC_MUTEX") == 0 || GetLastError() == ERROR_ALREADY_EXISTS) {
+		UINT nShowMsg = RegisterWindowMessage("BOINC_SHOW_MESSAGE");
+		PostMessage(HWND_BROADCAST, nShowMsg, 0, 0);
+		return FALSE;
 	}
     m_pMainWnd = new CMainWindow();
 	m_pMainWnd->ShowWindow(SW_SHOW);
@@ -1270,6 +1266,7 @@ BEGIN_MESSAGE_MAP(CMainWindow, CWnd)
     ON_COMMAND(ID_FILE_CLEARMESSAGES, OnCommandFileClearMessages)
     ON_COMMAND(ID_FILE_HIDE, OnCommandHide)
     ON_COMMAND(ID_FILE_SUSPEND, OnCommandSuspend)
+    ON_COMMAND(ID_FILE_RESUME, OnCommandResume)
     ON_COMMAND(ID_FILE_EXIT, OnCommandExit)
     ON_COMMAND(ID_SETTINGS_LOGIN, OnCommandSettingsLogin)
     ON_COMMAND(ID_SETTINGS_QUIT, OnCommandSettingsQuit)
@@ -1279,6 +1276,7 @@ BEGIN_MESSAGE_MAP(CMainWindow, CWnd)
     ON_COMMAND(ID_PROJECT_QUIT, OnCommandProjectQuit)
     ON_COMMAND(ID_STATUSICON_HIDE, OnCommandHide)
     ON_COMMAND(ID_STATUSICON_SUSPEND, OnCommandSuspend)
+    ON_COMMAND(ID_STATUSICON_RESUME, OnCommandResume)
     ON_COMMAND(ID_STATUSICON_EXIT, OnCommandExit)
     ON_WM_CREATE()
     ON_WM_RBUTTONDOWN()
@@ -1808,6 +1806,24 @@ void CMainWindow::PostNcDestroy()
     delete this;
 }
 
+//////////
+// CMainWindow::DefWindowProc
+// arguments:	message: message received
+//				wParam: message's wparam
+//				lParam: message's lparam
+// returns:		dependent on message
+// function:	handles any messages not handled by the window previously
+LRESULT CMainWindow::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
+{
+	UINT uShowMsg = RegisterWindowMessage("BOINC_SHOW_MESSAGE");
+	if(uShowMsg == message) {
+		ShowWindow(SW_SHOW);
+		SetForegroundWindow();
+		return 0;
+	}
+	return CWnd::DefWindowProc(message, wParam, lParam);
+}
+
 //////////
 // CMainWindow::OnClose
 // arguments:	void
@@ -2017,27 +2033,43 @@ void CMainWindow::OnCommandHide()
 // CMainWindow::OnCommandSuspend
 // arguments:	void
 // returns:		void
-// function:	suspends or unsuspends the window
+// function:	suspends client
 void CMainWindow::OnCommandSuspend()
 {
+	gstate.suspend_requested = true;
+	m_bSuspend = true;
+
 	CMenu* pMainMenu;
 	CMenu* pFileMenu;
 	pMainMenu = GetMenu();
 	if(pMainMenu) {
 		pFileMenu = pMainMenu->GetSubMenu(0);
 	}
-	if(m_bSuspend) {
-		gstate.suspend_requested = false;
-		m_bSuspend = false;
-		if(pFileMenu) {
-			pFileMenu->CheckMenuItem(ID_FILE_SUSPEND, MF_UNCHECKED);
-		}
-	} else {
-		gstate.suspend_requested = true;
-		m_bSuspend = true;
-		if(pFileMenu) {
-			pFileMenu->CheckMenuItem(ID_FILE_SUSPEND, MF_CHECKED);
-		}
+	if(pFileMenu) {
+		pFileMenu->EnableMenuItem(ID_FILE_SUSPEND, MF_GRAYED);
+		pFileMenu->EnableMenuItem(ID_FILE_RESUME, MF_ENABLED);
+	}
+}
+
+//////////
+// CMainWindow::OnCommandResume
+// arguments:	void
+// returns:		void
+// function:	resumes client
+void CMainWindow::OnCommandResume()
+{
+	gstate.suspend_requested = false;
+	m_bSuspend = false;
+
+	CMenu* pMainMenu;
+	CMenu* pFileMenu;
+	pMainMenu = GetMenu();
+	if(pMainMenu) {
+		pFileMenu = pMainMenu->GetSubMenu(0);
+	}
+	if(pFileMenu) {
+		pFileMenu->EnableMenuItem(ID_FILE_SUSPEND, MF_ENABLED);
+		pFileMenu->EnableMenuItem(ID_FILE_RESUME, MF_GRAYED);
 	}
 }
 
@@ -2096,8 +2128,8 @@ int CMainWindow::OnCreate(LPCREATESTRUCT lpcs)
 
     g_myWnd = this;
 	m_nIconState = ICON_OFF;
-	m_bMessage = false;
 	m_bSuspend = false;
+	m_bMessage = false;
 	m_nContextItem = -1;
 
 	// load main menu
@@ -2185,8 +2217,7 @@ int CMainWindow::OnCreate(LPCREATESTRUCT lpcs)
 	m_TabCtrl.SetFont(&m_Font);
 	m_UsagePieCtrl.SetFont(&m_Font);
 
-	// remove button from taskbar and add status icon in taskbar
-	ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);
+	// add status icon to taskbar
 	SetStatusIcon(ICON_NORMAL);
 
 	// take care of other things
@@ -2226,6 +2257,7 @@ int CMainWindow::OnCreate(LPCREATESTRUCT lpcs)
 
 	LoadUserSettings();
 	UpdateGUI(&gstate);
+	OnCommandResume();
 
     return 0;
 }
@@ -2425,15 +2457,10 @@ LRESULT CMainWindow::OnStatusIcon(WPARAM wParam, LPARAM lParam)
 			Menu.DestroyMenu();
 			return FALSE;
 		}
-		if(IsWindowVisible()) {
-			pSubmenu->CheckMenuItem(ID_STATUSICON_HIDE, MF_UNCHECKED);
-		} else {
-			pSubmenu->CheckMenuItem(ID_STATUSICON_HIDE, MF_CHECKED);
-		}
 		if(m_bSuspend) {
-			pSubmenu->CheckMenuItem(ID_STATUSICON_SUSPEND, MF_CHECKED);
+			pSubmenu->EnableMenuItem(ID_STATUSICON_SUSPEND, MF_GRAYED);
 		} else {
-			pSubmenu->CheckMenuItem(ID_STATUSICON_SUSPEND, MF_UNCHECKED);
+			pSubmenu->EnableMenuItem(ID_STATUSICON_RESUME, MF_GRAYED);
 		}
 		pSubmenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
 		Menu.DestroyMenu();
diff --git a/client/win/wingui.h b/client/win/wingui.h
index cf90088add..8fdf4ded20 100755
--- a/client/win/wingui.h
+++ b/client/win/wingui.h
@@ -40,6 +40,7 @@
 // constants
 
 #define WND_TITLE			"BOINC"		// window's title
+#define REGISTER_WND_CLASS	AfxRegisterWndClass(CS_VREDRAW|CS_HREDRAW, ::LoadCursor(NULL, IDC_ARROW),	(HBRUSH)::GetStockObject(WHITE_BRUSH), ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON)))		// registering window's class
 
 #ifndef IDC_HAND
 #define IDC_HAND			MAKEINTRESOURCE(32649)	// hand pointer, the "hidden resource"
@@ -252,6 +253,7 @@ protected:
 	DWORD					GetUserIdleTime();
 	void					Syncronize(CProgressListCtrl*, vector<void*>*);
     virtual void			PostNcDestroy();
+	LRESULT					DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
 
     afx_msg void			OnClose();
 	afx_msg void			OnCommandSettingsQuit();
@@ -265,6 +267,7 @@ protected:
 	afx_msg void			OnCommandFileClearMessages();
 	afx_msg void			OnCommandHide();
 	afx_msg void			OnCommandSuspend();
+	afx_msg void			OnCommandResume();
 	afx_msg void			OnCommandExit();
     afx_msg int				OnCreate(LPCREATESTRUCT);
 	afx_msg BOOL			OnNotify(WPARAM, LPARAM, LRESULT*);
diff --git a/todo b/todo
index 78765bacd4..cde0613ead 100755
--- a/todo
+++ b/todo
@@ -8,12 +8,9 @@ get benchmark working as separate process
 validate in crontab
 
 Windows client
-    "bring up graphics" button/menu item in core client
     make mini-logo
     test uninstall
-    fix "unable to calculate"
     xfers: show file size,
-    completed results: show final CPU time
 -----------------------
 
 test feeder reread-DB mechanism
