diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index a09a44d..1934022 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1089,11 +1089,10 @@
 
 
 Vim 7.3:
-- in August remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
+- soon: remove UF_VERSION_CRYPT_PREV and UF_VERSION_PREV.
 - Conceal feature: no update when moving to another window. (Dominique Pelle,
   2010 Jul 5)  Vince will look into it.
 Patches to include:
-- Patch for Lisp support with ECL (Mikael Jansson, 2008 Oct 25)
 - Gvimext patch to support wide file names. (Szabolcs Horvat 2008 Sep 10)
 - Patch to support netbeans for Mac. (Kazuki Sakamoto, 2009 Jun 25)
 - Patch to support clipboard for Mac terminal. (Jjgod Jiang, 2009 Aug 1)
diff --git a/src/GvimExt/gvimext.cpp b/src/GvimExt/gvimext.cpp
index 71d180e..55d5a76 100644
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -85,6 +85,17 @@
     }
 }
 
+    static void
+getGvimNameW(wchar_t *nameW)
+{
+    char *name;
+
+    name = (char *)malloc(BUFSIZE);
+    getGvimName(name, 0);
+    mbstowcs(nameW, name, BUFSIZE);
+    free(name);
+}
+
 //
 // Get the Vim runtime directory into buf[BUFSIZE].
 // The result is empty when it failed.
@@ -848,34 +859,34 @@
 				   LPCSTR  /* pszParam */,
 				   int  /* iShowCmd */)
 {
-    char m_szFileUserClickedOn[BUFSIZE];
-    char cmdStr[BUFSIZE];
+    wchar_t m_szFileUserClickedOn[BUFSIZE];
+    wchar_t cmdStrW[BUFSIZE];
     UINT i;
 
     for (i = 0; i < cbFiles; i++)
     {
-	DragQueryFile((HDROP)medium.hGlobal,
+	DragQueryFileW((HDROP)medium.hGlobal,
 		i,
 		m_szFileUserClickedOn,
 		sizeof(m_szFileUserClickedOn));
 
-	getGvimName(cmdStr, 0);
-	strcat(cmdStr, " \"");
+	getGvimNameW(cmdStrW);
+	wcscat(cmdStrW, L" \"");
 
-	if ((strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 2) < BUFSIZE)
+	if ((wcslen(cmdStrW) + wcslen(m_szFileUserClickedOn) + 2) < BUFSIZE)
 	{
-	    strcat(cmdStr, m_szFileUserClickedOn);
-	    strcat(cmdStr, "\"");
+	    wcscat(cmdStrW, m_szFileUserClickedOn);
+	    wcscat(cmdStrW, L"\"");
 
-	    STARTUPINFO si;
+	    STARTUPINFOW si;
 	    PROCESS_INFORMATION pi;
 
 	    ZeroMemory(&si, sizeof(si));
 	    si.cb = sizeof(si);
 
 	    // Start the child process.
-	    if (!CreateProcess(NULL,	// No module name (use command line).
-			cmdStr,		// Command line.
+	    if (!CreateProcessW(NULL,	// No module name (use command line).
+			cmdStrW,	// Command line.
 			NULL,		// Process handle not inheritable.
 			NULL,		// Thread handle not inheritable.
 			FALSE,		// Set handle inheritance to FALSE.
@@ -919,44 +930,45 @@
 				   int  /* iShowCmd */,
 				   int useDiff)
 {
-    char	m_szFileUserClickedOn[BUFSIZE];
-    char	*cmdStr;
+    wchar_t	m_szFileUserClickedOn[BUFSIZE];
+    wchar_t	*cmdStrW;
     size_t	cmdlen;
     size_t	len;
     UINT i;
 
     cmdlen = BUFSIZE;
-    cmdStr = (char *)malloc(cmdlen);
-    getGvimName(cmdStr, 0);
+    cmdStrW  = (wchar_t *) malloc(cmdlen * sizeof(wchar_t));
+    getGvimNameW(cmdStrW);
+
     if (useDiff)
-	strcat(cmdStr, " -d");
+	wcscat(cmdStrW, L" -d");
     for (i = 0; i < cbFiles; i++)
     {
-	DragQueryFile((HDROP)medium.hGlobal,
+	DragQueryFileW((HDROP)medium.hGlobal,
 		i,
 		m_szFileUserClickedOn,
 		sizeof(m_szFileUserClickedOn));
 
-	len = strlen(cmdStr) + strlen(m_szFileUserClickedOn) + 4;
+	len = wcslen(cmdStrW) + wcslen(m_szFileUserClickedOn) + 4;
 	if (len > cmdlen)
 	{
 	    cmdlen = len + BUFSIZE;
-	    cmdStr = (char *)realloc(cmdStr, cmdlen);
+	    cmdStrW = (wchar_t *)realloc(cmdStrW, cmdlen * sizeof(wchar_t));
 	}
-	strcat(cmdStr, " \"");
-	strcat(cmdStr, m_szFileUserClickedOn);
-	strcat(cmdStr, "\"");
+	wcscat(cmdStrW, L" \"");
+	wcscat(cmdStrW, m_szFileUserClickedOn);
+	wcscat(cmdStrW, L"\"");
     }
 
-    STARTUPINFO si;
+    STARTUPINFOW si;
     PROCESS_INFORMATION pi;
 
     ZeroMemory(&si, sizeof(si));
     si.cb = sizeof(si);
 
     // Start the child process.
-    if (!CreateProcess(NULL,	// No module name (use command line).
-		cmdStr,		// Command line.
+    if (!CreateProcessW(NULL,	// No module name (use command line).
+		cmdStrW,	// Command line.
 		NULL,		// Process handle not inheritable.
 		NULL,		// Thread handle not inheritable.
 		FALSE,		// Set handle inheritance to FALSE.
@@ -979,7 +991,7 @@
 	CloseHandle(pi.hThread);
     }
 
-    free(cmdStr);
+    free(cmdStrW);
 
     return NOERROR;
 }
