diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index aa99164..d317e2f 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -205,13 +205,13 @@
 }
 
     static char *
-null_libintl_bindtextdomain(const char *domainname, const char *dirname)
+null_libintl_bindtextdomain(const char * /* domainname */, const char * /* dirname */)
 {
     return NULL;
 }
 
     static char *
-null_libintl_textdomain(const char* domainname)
+null_libintl_textdomain(const char*  /* domainname */)
 {
     return NULL;
 }
@@ -308,7 +308,7 @@
 // DllMain
 //---------------------------------------------------------------------------
 extern "C" int APIENTRY
-DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID  /* lpReserved */)
 {
     switch (dwReason)
     {
@@ -438,7 +438,7 @@
 }
 
 
-STDMETHODIMP CShellExtClassFactory::LockServer(BOOL fLock)
+STDMETHODIMP CShellExtClassFactory::LockServer(BOOL  /* fLock */)
 {
     return NOERROR;
 }
@@ -520,9 +520,9 @@
 //		It could be a context menu or a property sheet.
 //
 
-STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
+STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST  /* pIDFolder */,
 				   LPDATAOBJECT pDataObj,
-				   HKEY hRegKey)
+				   HKEY  /* hRegKey */)
 {
     // Initialize can be called more than once
     if (m_pDataObj)
@@ -562,8 +562,8 @@
 STDMETHODIMP CShellExt::QueryContextMenu(HMENU hMenu,
 					 UINT indexMenu,
 					 UINT idCmdFirst,
-					 UINT idCmdLast,
-					 UINT uFlags)
+					 UINT  /* idCmdLast */,
+					 UINT  /* uFlags */)
 {
     UINT idCmd = idCmdFirst;
 
@@ -718,11 +718,11 @@
     return hr;
 }
 
-STDMETHODIMP CShellExt::PushToWindow(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd,
+STDMETHODIMP CShellExt::PushToWindow(HWND  /* hParent */,
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */,
 				   int idHWnd)
 {
     HWND hWnd = m_hWnd[idHWnd];
@@ -740,9 +740,9 @@
     return NOERROR;
 }
 
-STDMETHODIMP CShellExt::GetCommandString(UINT_PTR idCmd,
+STDMETHODIMP CShellExt::GetCommandString(UINT_PTR  /* idCmd */,
 					 UINT uFlags,
-					 UINT FAR *reserved,
+					 UINT FAR * /* reserved */,
 					 LPSTR pszName,
 					 UINT cchMax)
 {
@@ -841,10 +841,10 @@
 #endif
 
 STDMETHODIMP CShellExt::InvokeGvim(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd)
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */)
 {
     char m_szFileUserClickedOn[BUFSIZE];
     char cmdStr[BUFSIZE];
@@ -911,10 +911,10 @@
 
 
 STDMETHODIMP CShellExt::InvokeSingleGvim(HWND hParent,
-				   LPCSTR pszWorkingDir,
-				   LPCSTR pszCmd,
-				   LPCSTR pszParam,
-				   int iShowCmd,
+				   LPCSTR  /* pszWorkingDir */,
+				   LPCSTR  /* pszCmd */,
+				   LPCSTR  /* pszParam */,
+				   int  /* iShowCmd */,
 				   int useDiff)
 {
     char	m_szFileUserClickedOn[BUFSIZE];
diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak
index c2567d7..d738670 100644
--- a/src/Make_mvc.mak
+++ b/src/Make_mvc.mak
@@ -207,9 +207,9 @@
 
 !include <Win32.mak>
 
-# Turn on Win64 compatibility warnings for 32-bit compiler in VC8. (/Wp64 is
-# deprecated in VC9.)
-!if ("$(MSVCVER)" == "8.0") 
+# Turn on Win64 compatibility warnings for VC7.x and VC8.
+# (/Wp64 is deprecated in VC9 and generates an obnoxious warning.)
+!if ("$(MSVCVER)" == "7.0") || ("$(MSVCVER)" == "7.1") || ("$(MSVCVER)" == "8.0") 
 DEFINES=$(DEFINES) /Wp64
 !endif
 
diff --git a/src/gui_w48.c b/src/gui_w48.c
index b391a0d..8b96f2b 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -3154,12 +3154,12 @@
 	    idc = MAKEINTRESOURCE(IDC_ARROW);
 	else
 	    idc = mshape_idcs[shape];
-#ifdef _WIN64
-	SetClassLongPtr(s_textArea, GCLP_HCURSOR, (LONG_PTR)LoadCursor(NULL, idc));
+#ifdef SetClassLongPtr
+	SetClassLongPtr(s_textArea, GCLP_HCURSOR, (__int3264)(LONG_PTR)LoadCursor(NULL, idc));
 #else
 # ifdef WIN32
-	SetClassLong(s_textArea, GCL_HCURSOR, (LONG)LoadCursor(NULL, idc));
-# else
+	SetClassLong(s_textArea, GCL_HCURSOR, (long_u)LoadCursor(NULL, idc));
+# else /* Win16 */
 	SetClassWord(s_textArea, GCW_HCURSOR, (WORD)LoadCursor(NULL, idc));
 # endif
 #endif
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 618fc80..d4a186d 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -1729,7 +1729,7 @@
 }
 
 /*ARGSUSED*/
-    static BOOL CALLBACK
+    static INT_PTR CALLBACK
 PrintDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 {
 #ifdef FEAT_GETTEXT
@@ -2125,8 +2125,8 @@
 	char_u	*port_name = (char_u *)devname +devname->wOutputOffset;
 	char_u	*text = _("to %s on %s");
 
-	prt_name = alloc(STRLEN(printer_name) + STRLEN(port_name)
-							      + STRLEN(text));
+	prt_name = alloc((unsigned)(STRLEN(printer_name) + STRLEN(port_name)
+							     + STRLEN(text)));
 	if (prt_name != NULL)
 	    wsprintf(prt_name, text, printer_name, port_name);
     }
diff --git a/src/os_win32.c b/src/os_win32.c
index 99523b7..4844299 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -4663,7 +4663,7 @@
 # endif
        )
     {
-# if defined(DEBUG) && _MSC_VER > 1200
+# if defined(DEBUG) && _MSC_VER >= 1400
 	/* Work around an annoying assertion in the Microsoft debug CRT
 	 * when mode's text/binary setting doesn't match _get_fmode(). */
 	char newMode = mode[strlen(mode) - 1];
@@ -4682,7 +4682,7 @@
 	vim_free(wn);
 	vim_free(wm);
 
-# if defined(DEBUG) && _MSC_VER > 1200
+# if defined(DEBUG) && _MSC_VER >= 1400
 	_set_fmode(oldMode);
 # endif
 
diff --git a/src/version.c b/src/version.c
index ec51a6c..d44083a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -677,6 +677,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    19,
+/**/
     18,
 /**/
     17,
diff --git a/src/vim.h b/src/vim.h
index 111723f..87a80b8 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -352,8 +352,8 @@
 typedef unsigned short	short_u;
 typedef unsigned int	int_u;
 /* Make sure long_u is big enough to hold a pointer.
- * On Win64 longs are 32 bit and pointers 64 bit.
- * For printf() and scanf() we need to take care of long_u specifically. */
+ * On Win64, longs are 32 bits and pointers are 64 bits.
+ * For printf() and scanf(), we need to take care of long_u specifically. */
 #ifdef _WIN64
 typedef unsigned __int64        long_u;
 typedef		 __int64        long_i;
@@ -361,8 +361,16 @@
 # define SCANF_DECIMAL_LONG_U   "%Iu"
 # define PRINTF_HEX_LONG_U      "0x%Ix"
 #else
-typedef unsigned long	        long_u;
-typedef		 long	        long_i;
+  /* Microsoft-specific. The __w64 keyword should be specified on any typedefs
+   * that change size between 32-bit and 64-bit platforms.  For any such type,
+   * __w64 should appear only on the 32-bit definition of the typedef.
+   * Define __w64 as an empty token for everything but MSVC 7.x or later.
+   */
+# if !defined(_MSC_VER)	|| (_MSC_VER < 1300)
+#  define __w64 
+# endif
+typedef unsigned long __w64	long_u;
+typedef		 long __w64     long_i;
 # define SCANF_HEX_LONG_U       "%lx"
 # define SCANF_DECIMAL_LONG_U   "%lu"
 # define PRINTF_HEX_LONG_U      "0x%lx"
