diff --git a/src/gui_w32.c b/src/gui_w32.c
index e6d2e80..c4bc3c9 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -253,7 +253,7 @@
 typedef int HBRUSH;
 typedef int HDROP;
 typedef int INT;
-typedef int LOGFONT[];
+typedef int LOGFONTW[];
 typedef int LPARAM;
 typedef int LPCREATESTRUCT;
 typedef int LPCSTR;
@@ -501,15 +501,15 @@
 /*
  * For control IME.
  *
- * These LOGFONT used for IME.
+ * These LOGFONTW used for IME.
  */
 #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
-/* holds LOGFONT for 'guifontwide' if available, otherwise 'guifont' */
-static LOGFONT norm_logfont;
+/* holds LOGFONTW for 'guifontwide' if available, otherwise 'guifont' */
+static LOGFONTW norm_logfont;
 #endif
 #ifdef FEAT_MBYTE_IME
-/* holds LOGFONT for 'guifont' always. */
-static LOGFONT sub_logfont;
+/* holds LOGFONTW for 'guifont' always. */
+static LOGFONTW sub_logfont;
 #endif
 
 #ifdef FEAT_MBYTE_IME
@@ -1520,12 +1520,12 @@
 }
 
     static GuiFont
-get_font_handle(LOGFONT *lf)
+get_font_handle(LOGFONTW *lf)
 {
     HFONT   font = NULL;
 
     /* Load the font */
-    font = CreateFontIndirect(lf);
+    font = CreateFontIndirectW(lf);
 
     if (font == NULL)
 	return NOFONT;
@@ -1556,7 +1556,7 @@
     char_u	*name,
     int		giveErrorIfMissing)
 {
-    LOGFONT	lf;
+    LOGFONTW	lf;
     GuiFont	font = NOFONT;
 
     if (get_logfont(&lf, name, NULL, giveErrorIfMissing) == OK)
@@ -3201,23 +3201,18 @@
 }
 
     static char_u *
-logfont2name(LOGFONT lf)
+logfont2name(LOGFONTW lf)
 {
     char	*p;
     char	*res;
     char	*charset_name;
     char	*quality_name;
-    char	*font_name = lf.lfFaceName;
+    char	*font_name;
 
+    font_name = (char *)utf16_to_enc(lf.lfFaceName, NULL);
+    if (font_name == NULL)
+	return NULL;
     charset_name = charset_id2name((int)lf.lfCharSet);
-    /* Convert a font name from the current codepage to 'encoding'.
-     * TODO: Use Wide APIs (including LOGFONTW) instead of ANSI APIs. */
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-    {
-	int	len;
-	acp_to_enc((char_u *)lf.lfFaceName, (int)strlen(lf.lfFaceName),
-						(char_u **)&font_name, &len);
-    }
     quality_name = quality_id2name((int)lf.lfQuality);
 
     res = (char *)alloc((unsigned)(strlen(font_name) + 20
@@ -3254,25 +3249,24 @@
 	}
     }
 
-    if (font_name != lf.lfFaceName)
-	vim_free(font_name);
+    vim_free(font_name);
     return (char_u *)res;
 }
 
 
 #ifdef FEAT_MBYTE_IME
 /*
- * Set correct LOGFONT to IME.  Use 'guifontwide' if available, otherwise use
+ * Set correct LOGFONTW to IME.  Use 'guifontwide' if available, otherwise use
  * 'guifont'
  */
     static void
 update_im_font(void)
 {
-    LOGFONT	lf_wide;
+    LOGFONTW	lf_wide;
 
     if (p_guifontwide != NULL && *p_guifontwide != NUL
 	    && gui.wide_font != NOFONT
-	    && GetObject((HFONT)gui.wide_font, sizeof(lf_wide), &lf_wide))
+	    && GetObjectW((HFONT)gui.wide_font, sizeof(lf_wide), &lf_wide))
 	norm_logfont = lf_wide;
     else
 	norm_logfont = sub_logfont;
@@ -3286,7 +3280,7 @@
     void
 gui_mch_wide_font_changed(void)
 {
-    LOGFONT lf;
+    LOGFONTW lf;
 
 #ifdef FEAT_MBYTE_IME
     update_im_font();
@@ -3300,7 +3294,7 @@
     gui.wide_boldital_font = NOFONT;
 
     if (gui.wide_font
-	&& GetObject((HFONT)gui.wide_font, sizeof(lf), &lf))
+	&& GetObjectW((HFONT)gui.wide_font, sizeof(lf), &lf))
     {
 	if (!lf.lfItalic)
 	{
@@ -3328,7 +3322,7 @@
     int
 gui_mch_init_font(char_u *font_name, int fontset UNUSED)
 {
-    LOGFONT	lf;
+    LOGFONTW	lf;
     GuiFont	font = NOFONT;
     char_u	*p;
 
@@ -4225,8 +4219,8 @@
 static BOOL (WINAPI *pImmReleaseContext)(HWND, HIMC);
 static BOOL (WINAPI *pImmGetOpenStatus)(HIMC);
 static BOOL (WINAPI *pImmSetOpenStatus)(HIMC, BOOL);
-static BOOL (WINAPI *pImmGetCompositionFont)(HIMC, LPLOGFONTA);
-static BOOL (WINAPI *pImmSetCompositionFont)(HIMC, LPLOGFONTA);
+static BOOL (WINAPI *pImmGetCompositionFontW)(HIMC, LPLOGFONTW);
+static BOOL (WINAPI *pImmSetCompositionFontW)(HIMC, LPLOGFONTW);
 static BOOL (WINAPI *pImmSetCompositionWindow)(HIMC, LPCOMPOSITIONFORM);
 static BOOL (WINAPI *pImmGetConversionStatus)(HIMC, LPDWORD, LPDWORD);
 static BOOL (WINAPI *pImmSetConversionStatus)(HIMC, DWORD, DWORD);
@@ -4239,8 +4233,8 @@
 # define pImmReleaseContext	  ImmReleaseContext
 # define pImmGetOpenStatus	  ImmGetOpenStatus
 # define pImmSetOpenStatus	  ImmSetOpenStatus
-# define pImmGetCompositionFont   ImmGetCompositionFontA
-# define pImmSetCompositionFont   ImmSetCompositionFontA
+# define pImmGetCompositionFontW  ImmGetCompositionFontW
+# define pImmSetCompositionFontW  ImmSetCompositionFontW
 # define pImmSetCompositionWindow ImmSetCompositionWindow
 # define pImmGetConversionStatus  ImmGetConversionStatus
 # define pImmSetConversionStatus  ImmSetConversionStatus
@@ -4379,14 +4373,14 @@
  * Return OK or FAIL.
  */
     static int
-gui_w32_get_menu_font(LOGFONT *lf)
+gui_w32_get_menu_font(LOGFONTW *lf)
 {
-    NONCLIENTMETRICS nm;
+    NONCLIENTMETRICSW nm;
 
-    nm.cbSize = sizeof(NONCLIENTMETRICS);
-    if (!SystemParametersInfo(
+    nm.cbSize = sizeof(NONCLIENTMETRICSW);
+    if (!SystemParametersInfoW(
 	    SPI_GETNONCLIENTMETRICS,
-	    sizeof(NONCLIENTMETRICS),
+	    sizeof(NONCLIENTMETRICSW),
 	    &nm,
 	    0))
 	return FAIL;
@@ -4403,7 +4397,7 @@
     static void
 set_tabline_font(void)
 {
-    LOGFONT	lfSysmenu;
+    LOGFONTW	lfSysmenu;
     HFONT	font;
     HWND	hwnd;
     HDC		hdc;
@@ -4413,7 +4407,7 @@
     if (gui_w32_get_menu_font(&lfSysmenu) != OK)
 	return;
 
-    font = CreateFontIndirect(&lfSysmenu);
+    font = CreateFontIndirectW(&lfSysmenu);
 
     SendMessage(s_tabhwnd, WM_SETFONT, (WPARAM)font, TRUE);
 
@@ -5562,7 +5556,7 @@
 	case IMN_SETOPENSTATUS:
 	    if (pImmGetOpenStatus(hImc))
 	    {
-		pImmSetCompositionFont(hImc, &norm_logfont);
+		pImmSetCompositionFontW(hImc, &norm_logfont);
 		im_set_position(gui.row, gui.col);
 
 		/* Disable langmap */
@@ -5703,13 +5697,13 @@
  * set font to IM.
  */
     void
-im_set_font(LOGFONT *lf)
+im_set_font(LOGFONTW *lf)
 {
     HIMC hImc;
 
     if (pImmGetContext && (hImc = pImmGetContext(s_hwnd)) != (HIMC)0)
     {
-	pImmSetCompositionFont(hImc, lf);
+	pImmSetCompositionFontW(hImc, lf);
 	pImmReleaseContext(s_hwnd, hImc);
     }
 }
@@ -6829,7 +6823,7 @@
     int		dlgPaddingX;
     int		dlgPaddingY;
 #ifdef USE_SYSMENU_FONT
-    LOGFONT	lfSysmenu;
+    LOGFONTW	lfSysmenu;
     int		use_lfSysmenu = FALSE;
 #endif
     garray_T	ga;
@@ -6894,7 +6888,7 @@
 #ifdef USE_SYSMENU_FONT
     if (gui_w32_get_menu_font(&lfSysmenu) == OK)
     {
-	font = CreateFontIndirect(&lfSysmenu);
+	font = CreateFontIndirectW(&lfSysmenu);
 	use_lfSysmenu = TRUE;
     }
     else
@@ -7123,7 +7117,8 @@
 	    /* point size */
 	    *p++ = -MulDiv(lfSysmenu.lfHeight, 72,
 		    GetDeviceCaps(hdc, LOGPIXELSY));
-	    nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName, FALSE);
+	    wcscpy(p, lfSysmenu.lfFaceName);
+	    nchar = (int)wcslen(lfSysmenu.lfFaceName) + 1;
 	}
 	else
 #endif
@@ -7488,14 +7483,14 @@
     DWORD	    dlgFontSize;
     SIZE	    size;
 #ifdef USE_SYSMENU_FONT
-    LOGFONT	    lfSysmenu;
+    LOGFONTW	    lfSysmenu;
 #endif
 
     s_usenewlook = FALSE;
 
 #ifdef USE_SYSMENU_FONT
     if (gui_w32_get_menu_font(&lfSysmenu) == OK)
-	hfontTools = CreateFontIndirect(&lfSysmenu);
+	hfontTools = CreateFontIndirectW(&lfSysmenu);
     else
 #endif
 	hfontTools = CreateFont(-DLG_FONT_POINT_SIZE, 0, 0, 0, 0, 0, 0, 0,
@@ -7563,7 +7558,7 @@
     int		x;
     int		y;
 #ifdef USE_SYSMENU_FONT
-    LOGFONT	lfSysmenu;
+    LOGFONTW	lfSysmenu;
     int		use_lfSysmenu = FALSE;
 #endif
 
@@ -7599,7 +7594,7 @@
 #ifdef USE_SYSMENU_FONT
     if (gui_w32_get_menu_font(&lfSysmenu) == OK)
     {
-	font = CreateFontIndirect(&lfSysmenu);
+	font = CreateFontIndirectW(&lfSysmenu);
 	use_lfSysmenu = TRUE;
     }
     else
@@ -7708,7 +7703,8 @@
 	    /* point size */
 	    *p++ = -MulDiv(lfSysmenu.lfHeight, 72,
 		    GetDeviceCaps(hdc, LOGPIXELSY));
-	    nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName, FALSE);
+	    wcscpy(p, lfSysmenu.lfFaceName);
+	    nchar = (int)wcslen(lfSysmenu.lfFaceName) + 1;
 	}
 	else
 #endif
@@ -8136,10 +8132,10 @@
 	    = (void *)GetProcAddress(hLibImm, "ImmGetOpenStatus");
     pImmSetOpenStatus
 	    = (void *)GetProcAddress(hLibImm, "ImmSetOpenStatus");
-    pImmGetCompositionFont
-	    = (void *)GetProcAddress(hLibImm, "ImmGetCompositionFontA");
-    pImmSetCompositionFont
-	    = (void *)GetProcAddress(hLibImm, "ImmSetCompositionFontA");
+    pImmGetCompositionFontW
+	    = (void *)GetProcAddress(hLibImm, "ImmGetCompositionFontW");
+    pImmSetCompositionFontW
+	    = (void *)GetProcAddress(hLibImm, "ImmSetCompositionFontW");
     pImmSetCompositionWindow
 	    = (void *)GetProcAddress(hLibImm, "ImmSetCompositionWindow");
     pImmGetConversionStatus
@@ -8154,8 +8150,8 @@
 	    || pImmReleaseContext == NULL
 	    || pImmGetOpenStatus == NULL
 	    || pImmSetOpenStatus == NULL
-	    || pImmGetCompositionFont == NULL
-	    || pImmSetCompositionFont == NULL
+	    || pImmGetCompositionFontW == NULL
+	    || pImmSetCompositionFontW == NULL
 	    || pImmSetCompositionWindow == NULL
 	    || pImmGetConversionStatus == NULL
 	    || pImmSetConversionStatus == NULL)
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 27a2cc6..ad5b60f 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -85,7 +85,7 @@
 typedef int CONSOLE_CURSOR_INFO;
 typedef int COORD;
 typedef int DWORD;
-typedef int ENUMLOGFONT;
+typedef int ENUMLOGFONTW;
 typedef int HANDLE;
 typedef int HDC;
 typedef int HFONT;
@@ -93,7 +93,7 @@
 typedef int HWND;
 typedef int INPUT_RECORD;
 typedef int KEY_EVENT_RECORD;
-typedef int LOGFONT;
+typedef int LOGFONTW;
 typedef int LPARAM;
 typedef int LPBOOL;
 typedef int LPCSTR;
@@ -103,7 +103,7 @@
 typedef int LPWSTR;
 typedef int LRESULT;
 typedef int MOUSE_EVENT_RECORD;
-typedef int NEWTEXTMETRIC;
+typedef int NEWTEXTMETRICW;
 typedef int PACL;
 typedef int PRINTDLG;
 typedef int PSECURITY_DESCRIPTOR;
@@ -1420,7 +1420,7 @@
     static int		stored_nCopies = 1;
     static int		stored_nFlags = 0;
 
-    LOGFONT		fLogFont;
+    LOGFONTW		fLogFont;
     int			pifItalic;
     int			pifBold;
     int			pifUnderline;
@@ -1577,7 +1577,7 @@
 		fLogFont.lfItalic = pifItalic;
 		fLogFont.lfUnderline = pifUnderline;
 		prt_font_handles[pifBold][pifItalic][pifUnderline]
-					      = CreateFontIndirect(&fLogFont);
+					      = CreateFontIndirectW(&fLogFont);
 	    }
 
     SetBkMode(prt_dlg.hDC, OPAQUE);
@@ -2915,12 +2915,12 @@
     return qp->name;
 }
 
-static const LOGFONT s_lfDefault =
+static const LOGFONTW s_lfDefault =
 {
     -12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
     OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
     PROOF_QUALITY, FIXED_PITCH | FF_DONTCARE,
-    "Fixedsys"	/* see _ReadVimIni */
+    L"Fixedsys"	/* see _ReadVimIni */
 };
 
 /* Initialise the "current height" to -12 (same as s_lfDefault) just
@@ -2937,7 +2937,7 @@
  * calculation is for a vertical (height) size or a horizontal (width) one.
  */
     static int
-points_to_pixels(char_u *str, char_u **end, int vertical, long_i pprinter_dc)
+points_to_pixels(WCHAR *str, WCHAR **end, int vertical, long_i pprinter_dc)
 {
     int		pixels;
     int		points = 0;
@@ -2948,7 +2948,7 @@
 
     while (*str != NUL)
     {
-	if (*str == '.' && divisor == 0)
+	if (*str == L'.' && divisor == 0)
 	{
 	    /* Start keeping a divisor, for later */
 	    divisor = 1;
@@ -2959,7 +2959,7 @@
 		break;
 
 	    points *= 10;
-	    points += *str - '0';
+	    points += *str - L'0';
 	    divisor *= 10;
 	}
 	++str;
@@ -2989,15 +2989,15 @@
 
     static int CALLBACK
 font_enumproc(
-    ENUMLOGFONT	    *elf,
-    NEWTEXTMETRIC   *ntm UNUSED,
-    int		    type UNUSED,
+    ENUMLOGFONTW    *elf,
+    NEWTEXTMETRICW  *ntm UNUSED,
+    DWORD	    type UNUSED,
     LPARAM	    lparam)
 {
     /* Return value:
      *	  0 = terminate now (monospace & ANSI)
      *	  1 = continue, still no luck...
-     *	  2 = continue, but we have an acceptable LOGFONT
+     *	  2 = continue, but we have an acceptable LOGFONTW
      *	      (monospace, not ANSI)
      * We use these values, as EnumFontFamilies returns 1 if the
      * callback function is never called. So, we check the return as
@@ -3005,7 +3005,7 @@
      * It's not pretty, but it works!
      */
 
-    LOGFONT *lf = (LOGFONT *)(lparam);
+    LOGFONTW *lf = (LOGFONTW *)(lparam);
 
 #ifndef FEAT_PROPORTIONAL_FONTS
     /* Ignore non-monospace fonts without further ado */
@@ -3013,7 +3013,7 @@
 	return 1;
 #endif
 
-    /* Remember this LOGFONT as a "possible" */
+    /* Remember this LOGFONTW as a "possible" */
     *lf = elf->elfLogFont;
 
     /* Terminate the scan as soon as we find an ANSI font */
@@ -3027,15 +3027,15 @@
 }
 
     static int
-init_logfont(LOGFONT *lf)
+init_logfont(LOGFONTW *lf)
 {
     int		n;
     HWND	hwnd = GetDesktopWindow();
     HDC		hdc = GetWindowDC(hwnd);
 
-    n = EnumFontFamilies(hdc,
-			 (LPCSTR)lf->lfFaceName,
-			 (FONTENUMPROC)font_enumproc,
+    n = EnumFontFamiliesW(hdc,
+			 lf->lfFaceName,
+			 (FONTENUMPROCW)font_enumproc,
 			 (LPARAM)lf);
 
     ReleaseDC(hwnd, hdc);
@@ -3044,7 +3044,7 @@
     if (n == 1)
 	return FAIL;
 
-    /* Tidy up the rest of the LOGFONT structure. We set to a basic
+    /* Tidy up the rest of the LOGFONTW structure. We set to a basic
      * font - get_logfont() sets bold, italic, etc based on the user's
      * input.
      */
@@ -3060,39 +3060,51 @@
 }
 
 /*
+ * Compare a UTF-16 string and an ASCII string literally.
+ * Only works all the code points are inside ASCII range.
+ */
+    static int
+utf16ascncmp(const WCHAR *w, const char *p, size_t n)
+{
+    size_t i;
+
+    for (i = 0; i < n; i++)
+    {
+	if (w[i] == 0 || w[i] != p[i])
+	    return w[i] - p[i];
+    }
+    return 0;
+}
+
+/*
  * Get font info from "name" into logfont "lf".
  * Return OK for a valid name, FAIL otherwise.
  */
     int
 get_logfont(
-    LOGFONT	*lf,
+    LOGFONTW	*lf,
     char_u	*name,
     HDC		printer_dc,
     int		verbose)
 {
-    char_u	*p;
+    WCHAR	*p;
     int		i;
     int		ret = FAIL;
-    static LOGFONT *lastlf = NULL;
-    char_u	*acpname = NULL;
+    static LOGFONTW *lastlf = NULL;
+    WCHAR	*wname;
 
     *lf = s_lfDefault;
     if (name == NULL)
 	return OK;
 
-    /* Convert 'name' from 'encoding' to the current codepage, because
-     * lf->lfFaceName uses the current codepage.
-     * TODO: Use Wide APIs instead of ANSI APIs. */
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-    {
-	int	len;
-	enc_to_acp(name, (int)STRLEN(name), &acpname, &len);
-	name = acpname;
-    }
-    if (STRCMP(name, "*") == 0)
+    wname = enc_to_utf16(name, NULL);
+    if (wname == NULL)
+	return FAIL;
+
+    if (wcscmp(wname, L"*") == 0)
     {
 #if defined(FEAT_GUI_MSWIN)
-	CHOOSEFONT	cf;
+	CHOOSEFONTW	cf;
 	/* if name is "*", bring up std font dialog: */
 	vim_memset(&cf, 0, sizeof(cf));
 	cf.lStructSize = sizeof(cf);
@@ -3102,7 +3114,7 @@
 	    *lf = *lastlf;
 	cf.lpLogFont = lf;
 	cf.nFontType = 0 ; //REGULAR_FONTTYPE;
-	if (ChooseFont(&cf))
+	if (ChooseFontW(&cf))
 	    ret = OK;
 #endif
 	goto theend;
@@ -3111,14 +3123,14 @@
     /*
      * Split name up, it could be <name>:h<height>:w<width> etc.
      */
-    for (p = name; *p && *p != ':'; p++)
+    for (p = wname; *p && *p != L':'; p++)
     {
-	if (p - name + 1 >= LF_FACESIZE)
+	if (p - wname + 1 >= LF_FACESIZE)
 	    goto theend;			/* Name too long */
-	lf->lfFaceName[p - name] = *p;
+	lf->lfFaceName[p - wname] = *p;
     }
-    if (p != name)
-	lf->lfFaceName[p - name] = NUL;
+    if (p != wname)
+	lf->lfFaceName[p - wname] = NUL;
 
     /* First set defaults */
     lf->lfHeight = -12;
@@ -3136,18 +3148,16 @@
 	int	did_replace = FALSE;
 
 	for (i = 0; lf->lfFaceName[i]; ++i)
-	    if (IsDBCSLeadByte(lf->lfFaceName[i]))
-		++i;
-	    else if (lf->lfFaceName[i] == '_')
+	    if (lf->lfFaceName[i] == L'_')
 	    {
-		lf->lfFaceName[i] = ' ';
+		lf->lfFaceName[i] = L' ';
 		did_replace = TRUE;
 	    }
 	if (!did_replace || init_logfont(lf) == FAIL)
 	    goto theend;
     }
 
-    while (*p == ':')
+    while (*p == L':')
 	p++;
 
     /* Set the values found after ':' */
@@ -3155,30 +3165,30 @@
     {
 	switch (*p++)
 	{
-	    case 'h':
+	    case L'h':
 		lf->lfHeight = - points_to_pixels(p, &p, TRUE, (long_i)printer_dc);
 		break;
-	    case 'w':
+	    case L'w':
 		lf->lfWidth = points_to_pixels(p, &p, FALSE, (long_i)printer_dc);
 		break;
-	    case 'b':
+	    case L'b':
 		lf->lfWeight = FW_BOLD;
 		break;
-	    case 'i':
+	    case L'i':
 		lf->lfItalic = TRUE;
 		break;
-	    case 'u':
+	    case L'u':
 		lf->lfUnderline = TRUE;
 		break;
-	    case 's':
+	    case L's':
 		lf->lfStrikeOut = TRUE;
 		break;
-	    case 'c':
+	    case L'c':
 		{
 		    struct charset_pair *cp;
 
 		    for (cp = charset_pairs; cp->name != NULL; ++cp)
-			if (STRNCMP(p, cp->name, strlen(cp->name)) == 0)
+			if (utf16ascncmp(p, cp->name, strlen(cp->name)) == 0)
 			{
 			    lf->lfCharSet = cp->charset;
 			    p += strlen(cp->name);
@@ -3186,17 +3196,19 @@
 			}
 		    if (cp->name == NULL && verbose)
 		    {
-			semsg(_("E244: Illegal charset name \"%s\" in font name \"%s\""), p, name);
+			char_u *s = utf16_to_enc(p, NULL);
+			semsg(_("E244: Illegal charset name \"%s\" in font name \"%s\""), s, name);
+			vim_free(s);
 			break;
 		    }
 		    break;
 		}
-	    case 'q':
+	    case L'q':
 		{
 		    struct quality_pair *qp;
 
 		    for (qp = quality_pairs; qp->name != NULL; ++qp)
-			if (STRNCMP(p, qp->name, strlen(qp->name)) == 0)
+			if (utf16ascncmp(p, qp->name, strlen(qp->name)) == 0)
 			{
 			    lf->lfQuality = qp->quality;
 			    p += strlen(qp->name);
@@ -3204,7 +3216,9 @@
 			}
 		    if (qp->name == NULL && verbose)
 		    {
-			semsg(_("E244: Illegal quality name \"%s\" in font name \"%s\""), p, name);
+			char_u *s = utf16_to_enc(p, NULL);
+			semsg(_("E244: Illegal quality name \"%s\" in font name \"%s\""), s, name);
+			vim_free(s);
 			break;
 		    }
 		    break;
@@ -3214,7 +3228,7 @@
 		    semsg(_("E245: Illegal char '%c' in font name \"%s\""), p[-1], name);
 		goto theend;
 	}
-	while (*p == ':')
+	while (*p == L':')
 	    p++;
     }
     ret = OK;
@@ -3224,11 +3238,11 @@
     if (ret == OK && printer_dc == NULL)
     {
 	vim_free(lastlf);
-	lastlf = (LOGFONT *)alloc(sizeof(LOGFONT));
+	lastlf = (LOGFONTW *)alloc(sizeof(LOGFONTW));
 	if (lastlf != NULL)
-	    mch_memmove(lastlf, lf, sizeof(LOGFONT));
+	    mch_memmove(lastlf, lf, sizeof(LOGFONTW));
     }
-    vim_free(acpname);
+    vim_free(wname);
 
     return ret;
 }
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index 75edd4b..9f2e5fb 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -70,7 +70,7 @@
 void gui_mch_set_fg_color(guicolor_T color);
 void gui_mch_set_bg_color(guicolor_T color);
 void gui_mch_set_sp_color(guicolor_T color);
-void im_set_font(LOGFONT *lf);
+void im_set_font(LOGFONTW *lf);
 void im_set_position(int row, int col);
 void im_set_active(int active);
 int im_get_status(void);
diff --git a/src/proto/os_mswin.pro b/src/proto/os_mswin.pro
index 3e8d487..2548d00 100644
--- a/src/proto/os_mswin.pro
+++ b/src/proto/os_mswin.pro
@@ -49,6 +49,6 @@
 void serverProcessPendingMessages(void);
 char *charset_id2name(int id);
 char *quality_id2name(DWORD id);
-int get_logfont(LOGFONT *lf, char_u *name, HDC printer_dc, int verbose);
+int get_logfont(LOGFONTW *lf, char_u *name, HDC printer_dc, int verbose);
 void channel_init_winsock(void);
 /* vim: set ft=c : */
diff --git a/src/version.c b/src/version.c
index 508736a..fad51e2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -776,6 +776,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1081,
+/**/
     1080,
 /**/
     1079,
