diff --git a/dlls/avifil32/factory.c b/dlls/avifil32/factory.c
index d148980..233e19d 100644
--- a/dlls/avifil32/factory.c
+++ b/dlls/avifil32/factory.c
@@ -33,7 +33,7 @@
 #include "initguid.h"
 #include "avifile_private.h"
 
-HMODULE AVIFILE_hModule   = (HMODULE)NULL;
+HMODULE AVIFILE_hModule   = NULL;
 
 BOOL    AVIFILE_bLocked   = FALSE;
 UINT    AVIFILE_uUseCount = 0;
@@ -204,7 +204,7 @@
 
   switch (fdwReason) {
   case DLL_PROCESS_ATTACH:
-    if (AVIFILE_hModule == (HMODULE)NULL)
+    if (AVIFILE_hModule == NULL)
       AVIFILE_hModule = (HMODULE)hInstDll;
     break;
   case DLL_PROCESS_DETACH:
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c
index c279c4e..fd0aae6 100644
--- a/dlls/comctl32/commctrl.c
+++ b/dlls/comctl32/commctrl.c
@@ -110,14 +110,14 @@
 extern void UPDOWN_Unregister(void);
 
 
-HANDLE COMCTL32_hHeap = (HANDLE)NULL;
-LPSTR    COMCTL32_aSubclass = (LPSTR)NULL;
+HANDLE COMCTL32_hHeap = NULL;
+LPSTR    COMCTL32_aSubclass = NULL;
 HMODULE COMCTL32_hModule = 0;
 LANGID  COMCTL32_uiLang = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
-HBRUSH  COMCTL32_hPattern55AABrush = (HANDLE)NULL;
+HBRUSH  COMCTL32_hPattern55AABrush = NULL;
 COMCTL32_SysColor  comctl32_color;
 
-static HBITMAP COMCTL32_hPattern55AABitmap = (HANDLE)NULL;
+static HBITMAP COMCTL32_hPattern55AABitmap = NULL;
 
 static const WORD wPattern55AA[] =
 {
@@ -203,19 +203,19 @@
 
             /* delete local pattern brush */
             DeleteObject (COMCTL32_hPattern55AABrush);
-            COMCTL32_hPattern55AABrush = (HANDLE)NULL;
+            COMCTL32_hPattern55AABrush = NULL;
             DeleteObject (COMCTL32_hPattern55AABitmap);
-            COMCTL32_hPattern55AABitmap = (HANDLE)NULL;
+            COMCTL32_hPattern55AABitmap = NULL;
 
             /* delete global subclassing atom */
             GlobalDeleteAtom (LOWORD(COMCTL32_aSubclass));
             TRACE("Subclassing atom deleted: %p\n", COMCTL32_aSubclass);
-            COMCTL32_aSubclass = (LPSTR)NULL;
+            COMCTL32_aSubclass = NULL;
 
             /* destroy private heap */
             HeapDestroy (COMCTL32_hHeap);
             TRACE("Heap destroyed: %p\n", COMCTL32_hHeap);
-            COMCTL32_hHeap = (HANDLE)NULL;
+            COMCTL32_hHeap = NULL;
             break;
     }
 
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 2e0936b..8f2367e 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -7045,7 +7045,7 @@
   LISTVIEW_SaveTextMetrics(infoPtr);
 
   /* create header */
-  infoPtr->hwndHeader =	CreateWindowW(WC_HEADERW, (LPCWSTR)NULL,
+  infoPtr->hwndHeader =	CreateWindowW(WC_HEADERW, NULL,
     WS_CHILD | HDS_HORZ | (DWORD)((LVS_NOSORTHEADER & lpcs->style)?0:HDS_BUTTONS),
     0, 0, 0, 0, hwnd, NULL,
     lpcs->hInstance, NULL);
diff --git a/dlls/commdlg/filedlg95.c b/dlls/commdlg/filedlg95.c
index b2f7037..7b46869 100644
--- a/dlls/commdlg/filedlg95.c
+++ b/dlls/commdlg/filedlg95.c
@@ -1028,7 +1028,7 @@
   GetWindowRect(GetDlgItem(hwnd,IDC_TOOLBARSTATIC),&rectTB);
   MapWindowPoints( 0, hwnd,(LPPOINT)&rectTB,2);
 
-  fodInfos->DlgInfos.hwndTB = CreateWindowExA(0, TOOLBARCLASSNAMEA, (LPSTR) NULL,
+  fodInfos->DlgInfos.hwndTB = CreateWindowExA(0, TOOLBARCLASSNAMEA, NULL,
         WS_CHILD | WS_GROUP | TBSTYLE_TOOLTIPS | CCS_NODIVIDER | CCS_NORESIZE,
         0, 0, 150, 26, hwnd, (HMENU) IDC_TOOLBAR, COMMDLG_hInstance32, NULL);
 
diff --git a/dlls/imagehlp/access.c b/dlls/imagehlp/access.c
index 35afaea..785ece2 100644
--- a/dlls/imagehlp/access.c
+++ b/dlls/imagehlp/access.c
@@ -208,9 +208,9 @@
   BOOL bDotDll, BOOL bReadOnly)
 {
   CHAR szFileName[MAX_PATH];
-  HANDLE hFile = (HANDLE) NULL;
-  HANDLE hFileMapping = (HANDLE) NULL;
-  HMODULE hModule = (HMODULE) NULL;
+  HANDLE hFile = NULL;
+  HANDLE hFileMapping = NULL;
+  HMODULE hModule = NULL;
   PIMAGE_NT_HEADERS pNtHeader = NULL;
 
   /* PathCombine(&szFileName, pszDllPath, pszImageName); */
@@ -219,7 +219,7 @@
   /* FIXME: Check if the file already loaded (use IMAGEHLP_pFirstLoadedImage) */
   if(!(hFile = CreateFileA(
     szFileName, GENERIC_READ, 1, /* FIXME: FILE_SHARE_READ not defined */
-    NULL, OPEN_EXISTING, 0, (HANDLE) NULL)))
+    NULL, OPEN_EXISTING, 0, NULL)))
     {
       SetLastError(ERROR_FILE_NOT_FOUND);
       goto Error;
@@ -234,7 +234,7 @@
       goto Error;
     }
   CloseHandle(hFile);
-  hFile = (HANDLE) NULL;
+  hFile = NULL;
 
   if(!(hModule = (HMODULE) MapViewOfFile(
     hFileMapping, FILE_MAP_READ, 0, 0, 0)))
@@ -246,7 +246,7 @@
     }
 
   CloseHandle(hFileMapping);
-  hFileMapping=(HANDLE) NULL;
+  hFileMapping=NULL;
 
   pLoadedImage = (PLOADED_IMAGE) HeapAlloc(
     IMAGEHLP_hHeap, 0, sizeof(LOADED_IMAGE)
diff --git a/dlls/imagehlp/debug.c b/dlls/imagehlp/debug.c
index 666fa73..c1c98c2 100644
--- a/dlls/imagehlp/debug.c
+++ b/dlls/imagehlp/debug.c
@@ -37,7 +37,7 @@
     debugstr_a(DebugFilePath)
   );
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return (HANDLE) NULL;
+  return NULL;
 }
 
 /***********************************************************************
@@ -51,7 +51,7 @@
     debugstr_a(ImageFilePath)
   );
   SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-  return (HANDLE) NULL;
+  return NULL;
 }
 
 /***********************************************************************
diff --git a/dlls/imagehlp/imagehlp_main.c b/dlls/imagehlp/imagehlp_main.c
index 542fde9..48af476 100644
--- a/dlls/imagehlp/imagehlp_main.c
+++ b/dlls/imagehlp/imagehlp_main.c
@@ -28,7 +28,7 @@
 
 /**********************************************************************/
 
-HANDLE IMAGEHLP_hHeap = (HANDLE) NULL;
+HANDLE IMAGEHLP_hHeap = NULL;
 
 static API_VERSION IMAGEHLP_ApiVersion = { 4, 0, 0, 5 };
 
@@ -44,7 +44,7 @@
       break;
     case DLL_PROCESS_DETACH:
       HeapDestroy(IMAGEHLP_hHeap);
-      IMAGEHLP_hHeap = (HANDLE) NULL;
+      IMAGEHLP_hHeap = NULL;
       break;
     case DLL_THREAD_ATTACH:
       break;
diff --git a/dlls/kernel/tests/path.c b/dlls/kernel/tests/path.c
index ebc7b1f..d98a321 100644
--- a/dlls/kernel/tests/path.c
+++ b/dlls/kernel/tests/path.c
@@ -388,22 +388,22 @@
   ok(CreateDirectoryA(tmpstr,NULL),"CreateDirectoryA failed");
   sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,SHORTFILE);
   hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL,
-                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
+                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
   ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed");
   ok(CloseHandle(hndl),"CloseHandle failed");
   sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,LONGFILE);
   hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL,
-                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
+                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
   ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed");
   ok(CloseHandle(hndl),"CloseHandle failed");
   sprintf(tmpstr,"%s\\%s\\%s",newdir,LONGDIR,SHORTFILE);
   hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL,
-                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
+                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
   ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed");
   ok(CloseHandle(hndl),"CloseHandle failed");
   sprintf(tmpstr,"%s\\%s\\%s",newdir,LONGDIR,LONGFILE);
   hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL,
-                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
+                   CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
   ok(hndl!=INVALID_HANDLE_VALUE,"CreateFileA failed");
   ok(CloseHandle(hndl),"CloseHandle failed");
 }
diff --git a/dlls/msacm/internal.c b/dlls/msacm/internal.c
index 7d6c8f0..5d41368 100644
--- a/dlls/msacm/internal.c
+++ b/dlls/msacm/internal.c
@@ -39,7 +39,7 @@
 
 /**********************************************************************/
 
-HANDLE MSACM_hHeap = (HANDLE) NULL;
+HANDLE MSACM_hHeap = NULL;
 PWINE_ACMDRIVERID MSACM_pFirstACMDriverID = NULL;
 PWINE_ACMDRIVERID MSACM_pLastACMDriverID = NULL;
 
diff --git a/dlls/msacm/msacm32_main.c b/dlls/msacm/msacm32_main.c
index 6b7b39b..82317dc7 100644
--- a/dlls/msacm/msacm32_main.c
+++ b/dlls/msacm/msacm32_main.c
@@ -51,7 +51,7 @@
     case DLL_PROCESS_DETACH:
         MSACM_UnregisterAllDrivers();
         HeapDestroy(MSACM_hHeap);
-        MSACM_hHeap = (HANDLE)NULL;
+        MSACM_hHeap = NULL;
         MSACM_hInstance32 = NULL;
 	break;
     case DLL_THREAD_ATTACH:
diff --git a/dlls/msvcrt/console.c b/dlls/msvcrt/console.c
index 1e7a4fb..c660631 100644
--- a/dlls/msvcrt/console.c
+++ b/dlls/msvcrt/console.c
@@ -51,11 +51,11 @@
 
   /* FIXME: Should be initialised with:
    * CreateFileA("CONIN$", GENERIC_READ, FILE_SHARE_READ,
-   * NULL, OPEN_EXISTING, 0, (HANDLE)NULL);
+   * NULL, OPEN_EXISTING, 0, NULL);
    */
 
   MSVCRT_console_out= CreateFileA("CONOUT$", GENERIC_WRITE, FILE_SHARE_WRITE,
-				    NULL, OPEN_EXISTING, 0, (HANDLE)NULL);
+				    NULL, OPEN_EXISTING, 0, NULL);
 
   if ((MSVCRT_console_in == INVALID_HANDLE_VALUE) ||
       (MSVCRT_console_out== INVALID_HANDLE_VALUE))
diff --git a/dlls/msvideo/msvideo_main.c b/dlls/msvideo/msvideo_main.c
index 55406c4..54a6b32 100644
--- a/dlls/msvideo/msvideo_main.c
+++ b/dlls/msvideo/msvideo_main.c
@@ -687,7 +687,7 @@
 	FIXME("(%p,%08x,%p,%p,%p,%ld,%p)\n",
 		hic, uiFlags, lpbiIn, lpBits, lpbiOut, lQuality, plSize);
 
-	return (HANDLE)NULL;
+	return NULL;
 }
 
 /***********************************************************************
diff --git a/dlls/ole32/clipboard.c b/dlls/ole32/clipboard.c
index df84312..7bc46d3 100644
--- a/dlls/ole32/clipboard.c
+++ b/dlls/ole32/clipboard.c
@@ -398,7 +398,7 @@
               GetClipboardFormatNameA(rgelt.cfFormat, szFmtName, sizeof(szFmtName)-1)
                 ? szFmtName : "");
 
-        SetClipboardData( rgelt.cfFormat, (HANDLE)NULL);
+        SetClipboardData( rgelt.cfFormat, NULL);
       }
     }
     IEnumFORMATETC_Release(penumFormatetc);
diff --git a/dlls/richedit/richedit.c b/dlls/richedit/richedit.c
index 8232007..20c7b57 100644
--- a/dlls/richedit/richedit.c
+++ b/dlls/richedit/richedit.c
@@ -42,8 +42,8 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(richedit);
 
-HANDLE RICHED32_hHeap = (HANDLE)NULL;
-/* LPSTR  RICHED32_aSubclass = (LPSTR)NULL; */
+HANDLE RICHED32_hHeap = NULL;
+/* LPSTR  RICHED32_aSubclass = NULL; */
 
 #define DPRINTF_EDIT_MSG32(str) \
         TRACE(\
@@ -81,7 +81,7 @@
         /* unregister all common control classes */
         RICHED32_Unregister ();
         HeapDestroy (RICHED32_hHeap);
-        RICHED32_hHeap = (HANDLE)NULL;
+        RICHED32_hHeap = NULL;
         break;
     }
     return TRUE;
diff --git a/dlls/rpcrt4/rpcrt4_main.c b/dlls/rpcrt4/rpcrt4_main.c
index 8e6b41f..8005a97 100644
--- a/dlls/rpcrt4/rpcrt4_main.c
+++ b/dlls/rpcrt4/rpcrt4_main.c
@@ -174,7 +174,7 @@
 
     case DLL_PROCESS_DETACH:
         CloseHandle(master_mutex);
-        master_mutex = (HANDLE) NULL;
+        master_mutex = NULL;
         break;
     }
 
diff --git a/dlls/rpcrt4/rpcss_np_client.c b/dlls/rpcrt4/rpcss_np_client.c
index d53f872..ffbeadb 100644
--- a/dlls/rpcrt4/rpcss_np_client.c
+++ b/dlls/rpcrt4/rpcss_np_client.c
@@ -47,7 +47,7 @@
       case WAIT_TIMEOUT:
       default: 
         ERR("This should never happen: couldn't enter mutex.\n");
-        return (HANDLE) NULL;
+        return NULL;
     }
 
     /* try to open the client side of the named pipe. */
diff --git a/dlls/shell32/dialogs.c b/dlls/shell32/dialogs.c
index 185c735..501e823 100644
--- a/dlls/shell32/dialogs.c
+++ b/dlls/shell32/dialogs.c
@@ -189,7 +189,7 @@
 
                 case 12288 :
                     {
-                    HMODULE hComdlg = (HMODULE)NULL ;
+                    HMODULE hComdlg = NULL ;
                     LPFNOFN ofnProc = NULL ;
                     static char szFName[1024] = "", szFileTitle[256] = "", szInitDir[768] = "" ;
                     static OPENFILENAMEA ofn =
@@ -198,7 +198,7 @@
                         NULL,
                         NULL,
                         "Executable Files\0*.exe\0All Files\0*.*\0\0\0\0",
-                        (LPSTR)NULL,
+                        NULL,
                         0,
                         0,
                         szFName,
@@ -210,15 +210,15 @@
                         OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST,
                         0,
                         0,
-                        (LPCSTR)NULL,
+                        NULL,
                         0,
                         (LPOFNHOOKPROC)NULL,
-                        (LPCSTR)NULL
+                        NULL
                         } ;
 
                     ofn.hwndOwner = hwnd ;
 
-                    if ((HMODULE)NULL == (hComdlg = LoadLibraryExA ("comdlg32", (HANDLE)NULL, 0)))
+                    if (NULL == (hComdlg = LoadLibraryExA ("comdlg32", NULL, 0)))
                         {
                         MessageBoxA (hwnd, "Unable to display dialog box (LoadLibraryEx) !", "Nix", MB_OK | MB_ICONEXCLAMATION) ;
                         return TRUE ;
diff --git a/dlls/shell32/shell32_main.c b/dlls/shell32/shell32_main.c
index 4b555bd..30f8321 100644
--- a/dlls/shell32/shell32_main.c
+++ b/dlls/shell32/shell32_main.c
@@ -96,7 +96,7 @@
             size*=2;
             hargv=GlobalReAlloc(hargv, size, 0);
             argv=GlobalLock(hargv);
-        } while (GetModuleFileNameW((HMODULE)0, (LPWSTR)(argv+1), size-sizeof(LPWSTR)) == 0);
+        } while (GetModuleFileNameW(0, (LPWSTR)(argv+1), size-sizeof(LPWSTR)) == 0);
         argv[0]=(LPWSTR)(argv+1);
         if (numargs)
             *numargs=2;
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
index d373ed6..7445306 100644
--- a/dlls/shell32/shlexec.c
+++ b/dlls/shell32/shlexec.c
@@ -563,7 +563,7 @@
             debugstr_a(sei->lpDirectory), sei->nShow,
             (sei->fMask & SEE_MASK_CLASSNAME) ? debugstr_a(sei->lpClass) : "not used");
 
-    sei->hProcess = (HANDLE)NULL;
+    sei->hProcess = NULL;
     ZeroMemory(szApplicationName,MAX_PATH);
     if (sei->lpFile)
         strcpy(szApplicationName, sei->lpFile);
diff --git a/dlls/shell32/shpolicy.c b/dlls/shell32/shpolicy.c
index dc58d88..7bdf06b 100644
--- a/dlls/shell32/shpolicy.c
+++ b/dlls/shell32/shpolicy.c
@@ -574,7 +574,7 @@
         key string, then pass.  Otherwise return 0.
      */
 
-     if (inpRegKey != (LPSTR)NULL)
+     if (inpRegKey != NULL)
      {
          if (lstrcmpiA(inpRegKey, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies"))
 	 {
diff --git a/dlls/shell32/tests/shlfileop.c b/dlls/shell32/tests/shlfileop.c
index 357d18d..4d9713e 100644
--- a/dlls/shell32/tests/shlfileop.c
+++ b/dlls/shell32/tests/shlfileop.c
@@ -36,7 +36,7 @@
     DWORD written;
     CHAR msg[MAX_PATH];
 
-    file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, (HANDLE)NULL);
+    file = CreateFileA(name, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
     sprintf(msg, "Failure to open file %s", name);
     ok(file != INVALID_HANDLE_VALUE, msg);
     WriteFile(file, name, strlen(name), &written, NULL);
@@ -109,7 +109,7 @@
     sprintf(buf, "%s\\%s", CURR_DIR, "test?.txt");
     buf[strlen(buf) + 1] = '\0';
 
-    shfo.hwnd = (HANDLE)NULL;
+    shfo.hwnd = NULL;
     shfo.wFunc = FO_DELETE;
     shfo.pFrom = buf;
     shfo.pTo = "\0";
@@ -153,7 +153,7 @@
     CHAR from[MAX_PATH];
     CHAR to[MAX_PATH];
 
-    shfo.hwnd = (HANDLE)NULL;
+    shfo.hwnd = NULL;
     shfo.wFunc = FO_RENAME;
     shfo.pFrom = from;
     shfo.pTo = to;
@@ -212,7 +212,7 @@
     CHAR to[MAX_PATH];
     FILEOP_FLAGS tmp_flags;
 
-    shfo.hwnd = (HANDLE)NULL;
+    shfo.hwnd = NULL;
     shfo.wFunc = FO_COPY;
     shfo.pFrom = from;
     shfo.pTo = to;
@@ -296,7 +296,7 @@
     CHAR from[MAX_PATH];
     CHAR to[MAX_PATH];
 
-    shfo.hwnd = (HANDLE)NULL;
+    shfo.hwnd = NULL;
     shfo.wFunc = FO_MOVE;
     shfo.pFrom = from;
     shfo.pTo = to;
diff --git a/dlls/shlwapi/istream.c b/dlls/shlwapi/istream.c
index ca9a26f..d5df968 100644
--- a/dlls/shlwapi/istream.c
+++ b/dlls/shlwapi/istream.c
@@ -444,7 +444,7 @@
 
   /* Open HANDLE to file */
   hFile = CreateFileW(lpszPath, dwAccess, dwShare, NULL, dwCreate,
-                      dwAttributes, (HANDLE)0);
+                      dwAttributes, 0);
 
   if(hFile == INVALID_HANDLE_VALUE)
   {
diff --git a/dlls/wineps/init.c b/dlls/wineps/init.c
index 9a422c4..d376cb7 100644
--- a/dlls/wineps/init.c
+++ b/dlls/wineps/init.c
@@ -123,7 +123,7 @@
 	case DLL_PROCESS_ATTACH:
 
 	    PSDRV_Heap = HeapCreate(0, 0x10000, 0);
-	    if (PSDRV_Heap == (HANDLE)NULL)
+	    if (PSDRV_Heap == NULL)
 		return FALSE;
 
 	    if (PSDRV_GetFontMetrics() == FALSE) {
@@ -132,7 +132,7 @@
 	    }
 
 	    PSDRV_DefaultFont = CreateFontIndirectA(&DefaultLogFont);
-	    if (PSDRV_DefaultFont == (HANDLE)NULL) {
+	    if (PSDRV_DefaultFont == NULL) {
 		HeapDestroy(PSDRV_Heap);
 		return FALSE;
 	    }
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index aff6f07..0ceff7a 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -192,7 +192,7 @@
 BOOL WINAPI FTP_FtpPutFileA(HINTERNET hConnect, LPCSTR lpszLocalFile,
     LPCSTR lpszNewRemoteFile, DWORD dwFlags, DWORD dwContext)
 {
-    HANDLE hFile = (HANDLE)NULL;
+    HANDLE hFile = NULL;
     BOOL bSuccess = FALSE;
     LPWININETAPPINFOA hIC = NULL;
     LPWININETFTPSESSIONA lpwfs = (LPWININETFTPSESSIONA) hConnect;
diff --git a/dlls/winsock/tests/sock.c b/dlls/winsock/tests/sock.c
index daa1f48..9028f5a 100644
--- a/dlls/winsock/tests/sock.c
+++ b/dlls/winsock/tests/sock.c
@@ -579,7 +579,7 @@
 {
     par->general = general;
     thread[0] = CreateThread ( NULL, 0, routine, par, 0, &thread_id[0] );
-    ok ( thread[0] != (HANDLE) NULL, "Failed to create server thread" );
+    ok ( thread[0] != NULL, "Failed to create server thread" );
 }
 
 static void StartClients (LPTHREAD_START_ROUTINE routine,
@@ -591,7 +591,7 @@
     {
         client_id = i - 1;
         thread[i] = CreateThread ( NULL, 0, routine, par, 0, &thread_id[i] );
-        ok ( thread[i] != (HANDLE) NULL, "Failed to create client thread" );
+        ok ( thread[i] != NULL, "Failed to create client thread" );
         /* Make sure the client is up and running */
         WaitForSingleObject ( client_ready[client_id], INFINITE );
     };
diff --git a/dlls/winspool/info.c b/dlls/winspool/info.c
index 2edf9d4..646cabc 100644
--- a/dlls/winspool/info.c
+++ b/dlls/winspool/info.c
@@ -3125,7 +3125,7 @@
     ++cbMaxValueNameLen;			/* allow for trailing '\0' */
 
     hHeap = GetProcessHeap ();
-    if (hHeap == (HANDLE) NULL)
+    if (hHeap == NULL)
     {
 	ERR ("GetProcessHeap failed\n");
 	r = RegCloseKey (hkSubKey);
@@ -3314,7 +3314,7 @@
     }
 
     hHeap = GetProcessHeap ();
-    if (hHeap == (HANDLE) NULL)
+    if (hHeap == NULL)
     {
 	ERR ("GetProcessHeap failed\n");
 	return ERROR_OUTOFMEMORY;
diff --git a/memory/global.c b/memory/global.c
index 91b3fd5..eb64e88 100644
--- a/memory/global.c
+++ b/memory/global.c
@@ -475,7 +475,7 @@
 ) {
     if (!handle) return 0;
     if (!VALID_HANDLE(handle))
-	return (LPVOID)0;
+	return 0;
     GET_ARENA_PTR(handle)->lockCount++;
     return (LPVOID)GET_ARENA_PTR(handle)->base;
 }
@@ -1117,7 +1117,7 @@
    else
    {
       WARN("invalid handle\n");
-      palloc=(LPVOID) NULL;
+      palloc=NULL;
       SetLastError(ERROR_INVALID_HANDLE);
    }
    /* HeapUnlock(GetProcessHeap()); */;
diff --git a/programs/regtest/regtest.c b/programs/regtest/regtest.c
index fb9b72a..92e0392 100644
--- a/programs/regtest/regtest.c
+++ b/programs/regtest/regtest.c
@@ -363,7 +363,7 @@
     long lSts;
     HANDLE hEvent;
 
-    hEvent = (HANDLE)0;
+    hEvent = 0;
 
     lSts = RegNotifyChangeKeyValue((HKEY)2, TRUE, REG_NOTIFY_CHANGE_NAME, 0, 0);
     if (lSts != ERROR_INVALID_HANDLE) xERROR(1,lSts);
@@ -695,4 +695,3 @@
 
     return 0;
 }
-
diff --git a/programs/rpcss/np_server.c b/programs/rpcss/np_server.c
index 84720a6..6323357 100644
--- a/programs/rpcss/np_server.c
+++ b/programs/rpcss/np_server.c
@@ -352,7 +352,7 @@
       case WAIT_TIMEOUT:
       default: 
         WINE_ERR("This should never happen: couldn't enter mutex.\n");
-        return (HANDLE) NULL;
+        return NULL;
     }
 
     /* try to open the client side of the named pipe. */
@@ -516,7 +516,7 @@
       NULL,                      /* no security attribute */ 
       0,                         /* default stack size */
       (LPTHREAD_START_ROUTINE) NPMainWorkThread,
-      (LPVOID) NULL,             /* thread parameter */
+      NULL,             /* thread parameter */
       0,                         /* not suspended */
       &threadid                  /* returns thread ID  (not used) */
     );
diff --git a/programs/rpcss/rpcss_main.c b/programs/rpcss/rpcss_main.c
index 7fcb847..4cab5d9 100644
--- a/programs/rpcss/rpcss_main.c
+++ b/programs/rpcss/rpcss_main.c
@@ -210,7 +210,7 @@
   if (!CloseHandle(master_mutex))
     WINE_WARN("Failed to release master mutex\n");
 
-  master_mutex = (HANDLE)NULL;
+  master_mutex = NULL;
 
   return TRUE;
 }
diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index 7917989..37dd4a4 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -1202,7 +1202,7 @@
             WINE_FIXME("Too high face ref (%u/%u)\n", idx, face_num);
             strcpy(hlpfile->fonts[i].LogFont.lfFaceName, "Helv");
         }
-        hlpfile->fonts[i].hFont = (HANDLE)0;
+        hlpfile->fonts[i].hFont = 0;
         hlpfile->fonts[i].color = RGB(ref[dscr_offset + i * 11 + 5],
                                       ref[dscr_offset + i * 11 + 6],
                                       ref[dscr_offset + i * 11 + 7]);
diff --git a/win32/newfns.c b/win32/newfns.c
index 16e66ae..6a42109 100644
--- a/win32/newfns.c
+++ b/win32/newfns.c
@@ -297,7 +297,7 @@
 DWORD dwNumberOfConcurrentThreads)
 {
     FIXME("(%p, %p, %08lx, %08lx): stub.\n", hFileHandle, hExistingCompletionPort, dwCompletionKey, dwNumberOfConcurrentThreads);
-    return (HANDLE)NULL;
+    return NULL;
 }
 
 /******************************************************************************
