- Cleaned up the implementation of shell folders and put them into
  separate files.
- Fixed some memory leaks.
- Some more fixes.

diff --git a/dlls/shell32/classes.c b/dlls/shell32/classes.c
index 9f1af16..d8bc723 100644
--- a/dlls/shell32/classes.c
+++ b/dlls/shell32/classes.c
@@ -30,7 +30,7 @@
 #include "shell32_main.h"
 #include "shlguid.h"
 #include "shresdef.h"
-#include "wine/obj_queryassociations.h"
+#include "shlwapi.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
@@ -62,36 +62,24 @@
 
 	RegCloseKey(hkey);
 
-	TRACE("-- %s\n", szFileType );
+	TRACE("--UE;
+} %s\n", szFileType );
 
 	return TRUE;
 }
 BOOL HCR_GetExecuteCommand ( LPCSTR szClass, LPCSTR szVerb, LPSTR szDest, DWORD len )
 {
-	HKEY	hkey;
 	char	sTemp[MAX_PATH];
-	DWORD	dwType;
-	BOOL	ret = FALSE;
 
 	TRACE("%s %s\n",szClass, szVerb );
 
-	sprintf(sTemp, "%s\\shell\\%s\\command",szClass, szVerb);
+	snprintf(sTemp, MAX_PATH, "%s\\shell\\%s\\command",szClass, szVerb);
 
-	if (!RegOpenKeyExA(HKEY_CLASSES_ROOT,sTemp,0,0x02000000,&hkey))
-	{
-	  if (!RegQueryValueExA(hkey, NULL, 0, &dwType, szDest, &len))
-	  {
-	    if (dwType == REG_EXPAND_SZ)
-	    {
-	      ExpandEnvironmentStringsA(szDest, sTemp, MAX_PATH);
-	      strcpy(szDest, sTemp);
-	    }
-	    ret = TRUE;
-	  }
-	  RegCloseKey(hkey);
+	if (ERROR_SUCCESS == SHGetValueA(HKEY_CLASSES_ROOT, sTemp, NULL, NULL, szDest, &len)) {
+	    TRACE("-- %s\n", debugstr_a(szDest) );
+	    return TRUE;
 	}
-	TRACE("-- %s\n", szDest );
-	return ret;
+	return FALSE;
 }
 /***************************************************************************************
 *	HCR_GetDefaultIcon	[internal]
@@ -243,7 +231,6 @@
 	ICOM_VTBL(ei) = &qavt;
 
 	TRACE("(%p)\n",ei);
-	shell32_ObjCount++;
 	return (IQueryAssociations *)ei;
 }
 /**************************************************************************
@@ -288,8 +275,6 @@
 
 	TRACE("(%p)->(count=%lu)\n",This, This->ref );
 
-	shell32_ObjCount++;
-
 	return ++(This->ref);
 }
 /**************************************************************************
@@ -301,8 +286,6 @@
 
 	TRACE("(%p)->()\n",This);
 
-	shell32_ObjCount--;
-
 	if (!--(This->ref))
 	{
 	  TRACE(" destroying IExtractIcon(%p)\n",This);