diff --git a/dlls/commdlg/Makefile.in b/dlls/commdlg/Makefile.in
index cd9e332baac40f19b298829318d5b721e52b4ea2..632ab8a1aa220b10963d1e9fbbffa430cc292dc7 100644
--- a/dlls/commdlg/Makefile.in
+++ b/dlls/commdlg/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = comdlg32
 SOVERSION = 1.0
 ALTNAMES  = commdlg
-IMPORTS   = shell32 ole32 comctl32 winspool
+IMPORTS   = winspool
 WRCEXTRA  = -s -pcomdlg32
 
 SPEC_SRCS = commdlg.spec comdlg32.spec
diff --git a/dlls/commdlg/cdlg.h b/dlls/commdlg/cdlg.h
index d4eccd333cece517063af7d68a09be0816058abd..8e8fdfac8ba890cecb1cac1e4ab202afb1f419c4 100644
--- a/dlls/commdlg/cdlg.h
+++ b/dlls/commdlg/cdlg.h
@@ -91,19 +91,8 @@ typedef struct {
 #include "wine/undocshell.h"
 #include "shellapi.h"
 
-/* DPA */
-extern HDPA	(WINAPI* COMDLG32_DPA_Create) (INT);  
-extern LPVOID	(WINAPI* COMDLG32_DPA_GetPtr) (const HDPA, INT);   
-extern LPVOID	(WINAPI* COMDLG32_DPA_DeleteAllPtrs) (const HDPA hdpa);
-extern LPVOID	(WINAPI* COMDLG32_DPA_DeletePtr) (const HDPA hdpa, INT i);
-extern INT	(WINAPI* COMDLG32_DPA_InsertPtr) (const HDPA, INT, LPVOID); 
-extern BOOL	(WINAPI* COMDLG32_DPA_Destroy) (const HDPA); 
-
 /* IMAGELIST */
-extern HICON	(WINAPI* COMDLG32_ImageList_GetIcon) (HIMAGELIST, INT, UINT);
-extern HIMAGELIST (WINAPI *COMDLG32_ImageList_LoadImageA) (HINSTANCE, LPCSTR, INT, INT, COLORREF, UINT, UINT);
 extern BOOL	(WINAPI* COMDLG32_ImageList_Draw) (HIMAGELIST himl, int i, HDC hdcDest, int x, int y, UINT fStyle);
-extern BOOL	(WINAPI* COMDLG32_ImageList_Destroy) (HIMAGELIST himl);
 
 /* ITEMIDLIST */
 
@@ -118,6 +107,7 @@ extern BOOL (WINAPI *COMDLG32_SHGetPathFromIDListA) (LPCITEMIDLIST,LPSTR);
 extern HRESULT (WINAPI *COMDLG32_SHGetSpecialFolderLocation)(HWND,INT,LPITEMIDLIST *);
 extern DWORD (WINAPI *COMDLG32_SHGetDesktopFolder)(IShellFolder **);
 extern DWORD	(WINAPI *COMDLG32_SHGetFileInfoA)(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+extern LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
 extern DWORD (WINAPI *COMDLG32_SHFree)(LPVOID);
 
 /* PATH */
diff --git a/dlls/commdlg/cdlg32.c b/dlls/commdlg/cdlg32.c
index b31f1ebe31ea32c2ad77bfa634485680ffec7a28..32b01d2dae8dd7bfeb0ed2fb16a3cbc1a95f26f7 100644
--- a/dlls/commdlg/cdlg32.c
+++ b/dlls/commdlg/cdlg32.c
@@ -25,19 +25,8 @@ HINSTANCE	COMCTL32_hInstance = 0;
 HINSTANCE	SHELL32_hInstance = 0;
 HINSTANCE       SHLWAPI_hInstance = 0;
 
-/* DPA */
-HDPA	(WINAPI* COMDLG32_DPA_Create) (INT);  
-LPVOID	(WINAPI* COMDLG32_DPA_GetPtr) (const HDPA, INT);   
-LPVOID	(WINAPI* COMDLG32_DPA_DeletePtr) (const HDPA hdpa, INT i);
-LPVOID	(WINAPI* COMDLG32_DPA_DeleteAllPtrs) (const HDPA hdpa);
-INT	(WINAPI* COMDLG32_DPA_InsertPtr) (const HDPA, INT, LPVOID); 
-BOOL	(WINAPI* COMDLG32_DPA_Destroy) (const HDPA); 
-
 /* IMAGELIST */
-HICON	(WINAPI* COMDLG32_ImageList_GetIcon) (HIMAGELIST, INT, UINT);
-HIMAGELIST (WINAPI *COMDLG32_ImageList_LoadImageA) (HINSTANCE, LPCSTR, INT, INT, COLORREF, UINT, UINT);
 BOOL	(WINAPI* COMDLG32_ImageList_Draw) (HIMAGELIST himl, int i, HDC hdcDest, int x, int y, UINT fStyle);
-BOOL	(WINAPI* COMDLG32_ImageList_Destroy) (HIMAGELIST himl);
 
 /* ITEMIDLIST */
 LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILClone) (LPCITEMIDLIST);
@@ -51,7 +40,10 @@ BOOL (WINAPI *COMDLG32_SHGetPathFromIDListA) (LPCITEMIDLIST,LPSTR);
 HRESULT (WINAPI *COMDLG32_SHGetSpecialFolderLocation)(HWND,INT,LPITEMIDLIST *);
 DWORD (WINAPI *COMDLG32_SHGetDesktopFolder)(IShellFolder **);
 DWORD	(WINAPI *COMDLG32_SHGetFileInfoA)(LPCSTR,DWORD,SHFILEINFOA*,UINT,UINT);
+LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD);
 DWORD (WINAPI *COMDLG32_SHFree)(LPVOID);
+HRESULT (WINAPI *COMDLG32_StrRetToBufA)(LPSTRRET,LPITEMIDLIST,LPSTR,DWORD);
+HRESULT (WINAPI *COMDLG32_StrRetToBufW)(LPSTRRET,LPITEMIDLIST,LPWSTR,DWORD);
 
 /* PATH */
 BOOL (WINAPI *COMDLG32_PathIsRootA)(LPCSTR x);
@@ -115,19 +107,9 @@ BOOL WINAPI COMDLG32_DllEntryPoint(HINSTANCE hInstance, DWORD Reason, LPVOID Res
 			ERR("loading of comctl32 or shell32 or shlwapi failed\n");
 			return FALSE;
 		}
-		/* DPA */
-		COMDLG32_DPA_Create=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)328L);
-		COMDLG32_DPA_Destroy=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)329L);
-		COMDLG32_DPA_GetPtr=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)332L);
-		COMDLG32_DPA_InsertPtr=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)334L);
-		COMDLG32_DPA_DeletePtr=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)336L);
-		COMDLG32_DPA_DeleteAllPtrs=(void*)GetProcAddress(COMCTL32_hInstance, (LPCSTR)337L);
 
 		/* IMAGELIST */
-		COMDLG32_ImageList_GetIcon=(void*)GetProcAddress(COMCTL32_hInstance,"ImageList_GetIcon");
-		COMDLG32_ImageList_LoadImageA=(void*)GetProcAddress(COMCTL32_hInstance,"ImageList_LoadImageA");
 		COMDLG32_ImageList_Draw=(void*)GetProcAddress(COMCTL32_hInstance,"ImageList_Draw");
-		COMDLG32_ImageList_Destroy=(void*)GetProcAddress(COMCTL32_hInstance,"ImageList_Destroy");
 		
 		/* ITEMISLIST */
 		
@@ -139,6 +121,7 @@ BOOL WINAPI COMDLG32_DllEntryPoint(HINSTANCE hInstance, DWORD Reason, LPVOID Res
 		
 		/* SHELL */
 		
+		COMDLG32_SHAlloc = (void*)GetProcAddress(SHELL32_hInstance, (LPCSTR)196L);
 		COMDLG32_SHFree = (void*)GetProcAddress(SHELL32_hInstance, (LPCSTR)195L);
 		COMDLG32_SHGetSpecialFolderLocation = (void*)GetProcAddress(SHELL32_hInstance,"SHGetSpecialFolderLocation");
 		COMDLG32_SHGetPathFromIDListA = (void*)GetProcAddress(SHELL32_hInstance,"SHGetPathFromIDListA");
diff --git a/dlls/commdlg/filedlg95.c b/dlls/commdlg/filedlg95.c
index b62fce950b53ecda24d3439260956a747ef4485c..e6247a222fc014410c1aba2d525f2f296a878930 100644
--- a/dlls/commdlg/filedlg95.c
+++ b/dlls/commdlg/filedlg95.c
@@ -148,8 +148,8 @@ LPITEMIDLIST  GetParentPidl(LPITEMIDLIST pidl);
 LPITEMIDLIST  GetPidlFromName(IShellFolder *psf,LPCSTR lpcstrFileName);
 
 /* Shell memory allocation */
-void *MemAlloc(UINT size);
-void MemFree(void *mem);
+static void *MemAlloc(UINT size);
+static void MemFree(void *mem);
 
 BOOL WINAPI GetFileName95(FileOpenDlgInfos *fodInfos);
 HRESULT WINAPI FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
@@ -835,9 +835,6 @@ static LRESULT FILEDLG95_OnWMInitDialog(HWND hwnd, WPARAM wParam, LPARAM lParam)
 
   TRACE("\n");
 
-  /* Make sure the common control DLL is loaded */      
-  InitCommonControls();
-
   /* Initialise shell objects */
   FILEDLG95_SHELL_Init(hwnd);
 
@@ -2303,6 +2300,35 @@ static void FILEDLG95_LOOKIN_Clean(HWND hwnd)
  * TOOLS
  */
 
+/* copied from shell32 to avoid linking to it */
+static HRESULT COMDLG32_StrRetToStrNA (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
+{
+	switch (src->uType)
+	{
+	  case STRRET_WSTR:
+	    WideCharToMultiByte(CP_ACP, 0, src->u.pOleStr, -1, (LPSTR)dest, len, NULL, NULL);
+	    COMDLG32_SHFree(src->u.pOleStr);
+	    break;
+
+	  case STRRET_CSTRA:
+	    lstrcpynA((LPSTR)dest, src->u.cStr, len);
+	    break;
+
+	  case STRRET_OFFSETA:
+	    lstrcpynA((LPSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
+	    break;
+
+	  default:
+	    FIXME("unknown type!\n");
+	    if (len)
+	    {
+	      *(LPSTR)dest = '\0';
+	    }
+	    return(FALSE);
+	}
+	return S_OK;
+}
+
 /***********************************************************************
  *      GetName
  *
@@ -2335,7 +2361,7 @@ HRESULT GetName(LPSHELLFOLDER lpsf, LPITEMIDLIST pidl,DWORD dwFlags,LPSTR lpstrF
                                                      dwFlags, 
                                                      &str)))
   {
-      return StrRetToBufA(&str, pidl,lpstrFileName, MAX_PATH);
+      return COMDLG32_StrRetToStrNA(lpstrFileName, MAX_PATH, &str, pidl);
   }
   return E_FAIL;
 }
@@ -2446,12 +2472,12 @@ BOOL GetFileExtension(IShellFolder *psf,LPITEMIDLIST pidl,LPSTR lpstrFileExtensi
 
 /*
  * Memory allocation methods */
-void *MemAlloc(UINT size)
+static void *MemAlloc(UINT size)
 {
     return HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,size);
 }
 
-void MemFree(void *mem)
+static void MemFree(void *mem)
 {
     if(mem)
     {
diff --git a/dlls/commdlg/filedlgbrowser.c b/dlls/commdlg/filedlgbrowser.c
index a14a3fe5f582afe7c144726d60613f080eca78c7..a75524d2e3696916e322065e578220f452287a2d 100644
--- a/dlls/commdlg/filedlgbrowser.c
+++ b/dlls/commdlg/filedlgbrowser.c
@@ -108,7 +108,7 @@ IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner)
     IShellBrowserImpl *sb;
     FileOpenDlgInfos *fodInfos = (FileOpenDlgInfos *) GetPropA(hwndOwner,FileOpenDlgInfosStr);
 
-    sb=(IShellBrowserImpl*)SHAlloc(sizeof(IShellBrowserImpl));
+    sb=(IShellBrowserImpl*)COMDLG32_SHAlloc(sizeof(IShellBrowserImpl));
 
     /* Initialisation of the member variables */
     sb->ref=1;
@@ -704,6 +704,39 @@ HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnStateChange(ICommDlgBrowser *
 
     return NOERROR;     
 }
+
+/* copied from shell32 to avoid linking to it */
+static HRESULT COMDLG32_StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPITEMIDLIST pidl)
+{
+	TRACE("dest=0x%p len=0x%lx strret=0x%p pidl=%p stub\n",dest,len,src,pidl);
+
+	switch (src->uType)
+	{
+	  case STRRET_WSTR:
+	    lstrcpynW((LPWSTR)dest, src->u.pOleStr, len);
+	    COMDLG32_SHFree(src->u.pOleStr);
+	    break;
+
+	  case STRRET_CSTRA:
+	    lstrcpynAtoW((LPWSTR)dest, src->u.cStr, len);
+	    break;
+
+	  case STRRET_OFFSETA:
+	    if (pidl)
+	    {
+	      lstrcpynAtoW((LPWSTR)dest, ((LPCSTR)&pidl->mkid)+src->u.uOffset, len);
+	    }
+	    break;
+
+	  default:
+	    FIXME("unknown type!\n");
+	    if (len)
+	    { *(LPSTR)dest = '\0';
+	    }
+	    return(FALSE);
+	}
+	return S_OK;
+}
 /**************************************************************************
 *  IShellBrowserImpl_ICommDlgBrowser_IncludeObject
 */
@@ -738,7 +771,7 @@ HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_IncludeObject(ICommDlgBrowser *
         return S_OK;
 
     if (SUCCEEDED(IShellFolder_GetDisplayNameOf(fodInfos->Shell.FOIShellFolder, pidl, SHGDN_FORPARSING, &str)))
-    { if (SUCCEEDED(StrRetToBufW(&str, pidl,szPathW, MAX_PATH)))
+    { if (SUCCEEDED(COMDLG32_StrRetToStrNW(szPathW, MAX_PATH, &str, pidl)))
       {
 	  if (COMDLG32_PathMatchSpecW(szPathW, fodInfos->ShellInfos.lpstrCurrentFilter))
           return S_OK;
diff --git a/dlls/commdlg/printdlg.c b/dlls/commdlg/printdlg.c
index 383a4a23038d8f12f1f3e03e4929ed5cb8424156..7275cd68e857b89f5acb0fd6137e4580bc431a8e 100644
--- a/dlls/commdlg/printdlg.c
+++ b/dlls/commdlg/printdlg.c
@@ -318,7 +318,7 @@ BOOL WINAPI PrintDlgW( LPPRINTDLGW printdlg )
 /***********************************************************************
  *               PRINTDLG_UpdatePrinterInfoTexts               [internal]
  */
-void PRINTDLG_UpdatePrinterInfoTexts(HWND hDlg, PRINT_PTRA* PrintStructures)
+static void PRINTDLG_UpdatePrinterInfoTexts(HWND hDlg, PRINT_PTRA* PrintStructures)
 {
     char   StatusMsg[256];
     char   ResourceString[256];
@@ -382,7 +382,7 @@ void PRINTDLG_UpdatePrinterInfoTexts(HWND hDlg, PRINT_PTRA* PrintStructures)
  *   but on ID value, as some drivers name the same paper format 
  *   differently (language differences, added paper size)
  */
-short PRINTSETUP32DLG_UpdateComboBox(HWND hDlg,
+static short PRINTSETUP32DLG_UpdateComboBox(HWND hDlg,
                                       int   nIDComboBox,
                                       char* PrinterName, 
                                       char* PortName)
@@ -702,7 +702,7 @@ static LRESULT PRINTSETUP32DLG_WMInitDialog(HWND hDlg, WPARAM wParam,
  *   HGLOBAL to DevNames memory object on success or
  *   zero on faillure
  */
-HGLOBAL PRINTDLG_CreateDevNames(
+static HGLOBAL PRINTDLG_CreateDevNames(
                     char* DeviceDriverName, 
                     char* DeviceName, 
                     char* OutputPort, 
diff --git a/dlls/shell32/Makefile.in b/dlls/shell32/Makefile.in
index e4991255a37419b635a45aa3afea78ecbfdce1b4..7f3769d8a939821bb45a1b628cb882a1b111790a 100644
--- a/dlls/shell32/Makefile.in
+++ b/dlls/shell32/Makefile.in
@@ -5,7 +5,7 @@ VPATH     = @srcdir@
 MODULE    = shell32
 SOVERSION = 1.0
 ALTNAMES  = shell shlwapi
-IMPORTS   = ole32 comctl32
+IMPORTS   = ole32
 WRCEXTRA  = -s -p$(MODULE)
 
 SPEC_SRCS = \
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index 63dbdf89434bf64b2fb3cc682c326547156ef03a..f2cb56209d59944275d14081354185b0cfdbbe89 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -599,7 +599,7 @@ static HRESULT ShellView_FillList(IShellViewImpl * This)
 
 	for (i=0; i < DPA_GetPtrCount(hdpa); ++i) 	/* DPA_GetPtrCount is a macro*/
 	{
-	  pidl = (LPITEMIDLIST)DPA_GetPtr(hdpa, i);
+	  pidl = (LPITEMIDLIST)pDPA_GetPtr(hdpa, i);
 
 	  /* in a commdlg This works as a filemask*/
 	  if ( IncludeObject(This, pidl)==S_OK )