diff --git a/dlls/shell32/classes.c b/dlls/shell32/classes.c
index bcb321a..b656b5c 100644
--- a/dlls/shell32/classes.c
+++ b/dlls/shell32/classes.c
@@ -12,19 +12,23 @@
 
 #include "shlobj.h"
 #include "shell32_main.h"
+#include "shlguid.h"
+#include "shresdef.h"
 
 DEFAULT_DEBUG_CHANNEL(shell)
 
 #define MAX_EXTENSION_LENGTH 20
 
-BOOL HCR_MapTypeToValue ( LPCSTR szExtension, LPSTR szFileType, DWORD len)
+BOOL HCR_MapTypeToValue ( LPCSTR szExtension, LPSTR szFileType, DWORD len, BOOL bPrependDot)
 {	HKEY	hkey;
 	char	szTemp[MAX_EXTENSION_LENGTH + 2];
 
 	TRACE("%s %p\n",szExtension, szFileType );
 
-	strcpy(szTemp, ".");
-	strncat(szTemp, szExtension, MAX_EXTENSION_LENGTH);
+	if (bPrependDot)
+	  strcpy(szTemp, ".");
+
+	lstrcpynA(szTemp+((bPrependDot)?1:0), szExtension, MAX_EXTENSION_LENGTH);
 	
 	if (RegOpenKeyExA(HKEY_CLASSES_ROOT,szTemp,0,0x02000000,&hkey))
 	{ return FALSE;
@@ -108,26 +112,40 @@
 BOOL HCR_GetClassName (REFIID riid, LPSTR szDest, DWORD len)
 {	HKEY	hkey;
 	char	xriid[50];
+	BOOL ret = FALSE;
+	DWORD buflen = len;
 
 	strcpy(xriid,"CLSID\\");
 	WINE_StringFromCLSID(riid,&xriid[strlen(xriid)]);
 
 	TRACE("%s\n",xriid );
 
-	if (RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey))
-	{ return FALSE;
+	if (!RegOpenKeyExA(HKEY_CLASSES_ROOT,xriid,0,KEY_READ,&hkey))
+	{
+	  if (!RegQueryValueExA(hkey,"",0,NULL,szDest,&len))
+	  {
+	    ret = TRUE;
+	  }
+	  RegCloseKey(hkey);
 	}
 
-	if (RegQueryValueExA(hkey,"",0,NULL,szDest,&len))
-	{ RegCloseKey(hkey);
-	  return FALSE;
-	}	
-
-	RegCloseKey(hkey);
+	if (!ret || !szDest[0])
+	{ 
+	  if(IsEqualIID(riid, &CLSID_ShellDesktop))
+	  {
+	    LoadStringA(shell32_hInstance, IDS_DESKTOP, szDest, buflen);
+	    ret = TRUE;
+	  }
+	  else if (IsEqualIID(riid, &IID_MyComputer))
+	  {
+	    LoadStringA(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen);
+	    ret = TRUE;
+	  }	
+	}
 
 	TRACE("-- %s\n", szDest);
 
-	return TRUE;
+	return ret;
 }
 
 /***************************************************************************************
@@ -156,7 +174,7 @@
 	{
 	  RegCloseKey(hkey);
 	  return FALSE;
-	}	
+	}
 
 	RegCloseKey(hkey);
 
