Small fixes.

diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
index 75b78f6..115867f 100644
--- a/dlls/shell32/shell32.spec
+++ b/dlls/shell32/shell32.spec
@@ -77,7 +77,7 @@
   69 stub SHGetNetResource
   70 stdcall SHCreateDefClassObject(long long long long long)SHCreateDefClassObject
   71 stdcall Shell_GetImageList(ptr ptr) Shell_GetImageList
-  72 stdcall Shell_GetCachedImageIndex(ptr ptr long) Shell_GetCachedImageIndexA # ASCII!!!
+  72 stdcall Shell_GetCachedImageIndex(ptr ptr long) Shell_GetCachedImageIndexAW
   73 stdcall SHShellFolderView_Message(long long long) SHShellFolderView_Message 
   74 stub SHCreateStdEnumFmtEtc
   75 stdcall PathYetAnotherMakeUniqueName(ptr ptr) PathYetAnotherMakeUniqueNameA
@@ -304,7 +304,7 @@
  295 stub ShellHookProc   # exported by name
  296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIcon
  297 stdcall Shell_NotifyIconA(long ptr) Shell_NotifyIconA
- 298 stub Shell_NotifyIconW   # exported by name
+ 298 stdcall Shell_NotifyIconW(long ptr) Shell_NotifyIconW
  299 stub Shl1632_ThunkData32
  300 stub Shl3216_ThunkData32
  301 stub StrChrA # proper ordinal unknown
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 77f5990..4cd76ed 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -816,7 +816,8 @@
 	    }
 
 	    SIC_Initialize();
-
+	    SYSTRAY_Init();
+	    
 	    break;
 
 	  case DLL_THREAD_ATTACH:
diff --git a/dlls/shell32/shell32_main.h b/dlls/shell32/shell32_main.h
index 60c3b00..b2a0547 100644
--- a/dlls/shell32/shell32_main.h
+++ b/dlls/shell32/shell32_main.h
@@ -138,4 +138,7 @@
 	(((kst) & MK_SHIFT) ? DROPEFFECT_LINK : DROPEFFECT_COPY):\
 	DROPEFFECT_MOVE)
 
+/* Systray */
+BOOL SYSTRAY_Init(void);
+
 #endif
diff --git a/dlls/shell32/shellord.c b/dlls/shell32/shellord.c
index bbbf4dd..3fbabf4 100644
--- a/dlls/shell32/shellord.c
+++ b/dlls/shell32/shellord.c
@@ -1454,3 +1454,14 @@
 
   return TRUE;
 }
+/*
+LPSTR WINAPI StrCpyNA(LPSTR psz1, LPCSTR psz2, int cchMax)
+{
+	return lstrcpynA(psz1, psz2, cchMax);
+}
+
+LPWSTR WINAPI StrCpyNW(LPWSTR psz1, LPCWSTR psz2, int cchMax)
+{
+	return lstrcpynW(psz1, psz2, cchMax);
+}
+*/
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index 40d5b7c..530271c 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -651,9 +651,11 @@
 	return;
 }
 VOID WINAPI PathUnquoteSpacesAW(LPVOID str) 
-{	if(VERSION_OsIsUnicode())
+{
+	if(VERSION_OsIsUnicode())
 	  PathUnquoteSpacesW(str);
-	PathUnquoteSpacesA(str);
+	else
+	  PathUnquoteSpacesA(str);
 }
 
 
@@ -890,7 +892,7 @@
 	  case CSIDL_PROGRAMS:
 	    hRootKey = HKEY_CURRENT_USER;
 	    strcpy(szValueName, "Programs");
-	    strcpy(szDefaultPath, "StatrMenu\\Programs");
+	    strcpy(szDefaultPath, "StartMenu\\Programs");
 	    break;
 
 	  case CSIDL_COMMON_PROGRAMS:
@@ -1012,31 +1014,22 @@
  *
  */
 
-LPSTR WINAPI PathRemoveBackslashA(
-    LPSTR lpPath
-    )
+LPSTR WINAPI PathRemoveBackslashA( LPSTR lpPath )
 {
-	LPSTR temp = lpPath;
-	LPSTR prev = lpPath;
+	LPSTR p = lpPath;
 	
-	while (*temp)
-	{
-		prev = temp++;
-	}
-	if ( *prev == (CHAR)'\\')
-	{
-		*prev = (CHAR)'\0';
-	}
-
-	return prev;
+	while (*lpPath) p = lpPath++;
+	if ( *p == (CHAR)'\\') *p = (CHAR)'\0';
+	return p;
 }
 
-LPWSTR WINAPI PathRemoveBackslashW(
-    LPWSTR lpPath
-    )
+LPWSTR WINAPI PathRemoveBackslashW( LPWSTR lpPath )
 {
-    FIXME("(%p),stub!\n", lpPath);
-	return lpPath;
+	LPWSTR p = lpPath;
+	
+	while (*lpPath); p = lpPath++;
+	if ( *p == (WCHAR)'\\') *p = (WCHAR)'\0';
+	return p;
 }
 
 /*
diff --git a/dlls/shell32/shlmenu.c b/dlls/shell32/shlmenu.c
index 064c70b..06c5653 100644
--- a/dlls/shell32/shlmenu.c
+++ b/dlls/shell32/shlmenu.c
@@ -1,7 +1,6 @@
 /*
  * see www.geocities.com/SiliconValley/4942/filemenu.html
  */
-#include <assert.h>
 #include <string.h>
 
 #include "wine/obj_base.h"
@@ -61,7 +60,11 @@
 
 	menudata = (LPFMINFO)MenuInfo.dwMenuData;
 
-	assert ((menudata != 0) && (MenuInfo.cbSize == sizeof(MENUINFO)));
+	if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO)))
+	{
+	  ERR("menudata corrupt: %p %lu\n", menudata, MenuInfo.cbSize);
+	  return 0;
+	}
 	
 	return menudata;
 
@@ -122,7 +125,11 @@
 
 	menudata = (LPFMINFO)MenuInfo.dwMenuData;
 	
-	assert ((menudata != 0) && (MenuInfo.cbSize == sizeof(MENUINFO)));
+	if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO)))
+	{
+	  ERR("menudata corrupt: %p %lu\n", menudata, MenuInfo.cbSize);
+	  return 0;
+	}
 	
 	if (menudata->bInitialized)
 	  return 0;
@@ -334,7 +341,12 @@
 	  return FALSE;
 
 	menudata = (LPFMINFO)MenuInfo.dwMenuData;
-	assert ((menudata != 0) && (MenuInfo.cbSize == sizeof(MENUINFO)));
+	if ((menudata == 0) || (MenuInfo.cbSize != sizeof(MENUINFO)))
+	{
+	  ERR("menudata corrupt: %p %lu\n", menudata, MenuInfo.cbSize);
+	  return 0;
+	}
+
 	menudata->bFixedItems = TRUE;
 	SetMenuInfo(hMenu, &MenuInfo);
 
diff --git a/dlls/shell32/systray.c b/dlls/shell32/systray.c
index 53d960b..acaa9e5 100644
--- a/dlls/shell32/systray.c
+++ b/dlls/shell32/systray.c
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "heap.h"
 #include "shellapi.h"
 #include "shell32_main.h"
 #include "windows.h"
@@ -421,6 +422,23 @@
 }
 
 /*************************************************************************
+ * Shell_NotifyIconA			[SHELL32.297]
+ */
+BOOL WINAPI Shell_NotifyIconW (DWORD dwMessage, PNOTIFYICONDATAW pnid )
+{
+	BOOL ret;
+
+	PNOTIFYICONDATAA p = HeapAlloc(GetProcessHeap(),0,sizeof(NOTIFYICONDATAA));
+	memcpy(p, pnid, sizeof(NOTIFYICONDATAA));
+	if (*(pnid->szTip))
+	  lstrcpynWtoA (p->szTip, pnid->szTip, 64 );
+
+	ret = Shell_NotifyIconA(dwMessage, p );
+
+	HeapFree(GetProcessHeap(),0,p);
+	return ret;
+}
+/*************************************************************************
  * Shell_NotifyIcon			[SHELL32.296]
  */
 BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATAA pnid)