diff --git a/src/os_win32.c b/src/os_win32.c
index b5a6cce..8966053 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -452,11 +452,7 @@
     {
 	if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
 	    mch_memmove(p, p + 1, l--);
-#ifdef FEAT_MBYTE
 	n = (*mb_ptr2len)(p);
-#else
-	n = 1;
-#endif
 	p += n;
 	l -= n;
     }
@@ -1890,7 +1886,6 @@
 	    {
 		int	n = 1;
 
-#ifdef FEAT_MBYTE
 		if (ch2 == NUL)
 		{
 		    int	    i;
@@ -1912,7 +1907,6 @@
 		    }
 		}
 		else
-#endif
 		    typeahead[typeaheadlen] = c;
 		if (ch2 != NUL)
 		{
@@ -1950,17 +1944,11 @@
 		if ((modifiers & MOD_MASK_ALT)
 			&& n == 1
 			&& (typeahead[typeaheadlen] & 0x80) == 0
-#ifdef FEAT_MBYTE
 			&& !enc_dbcs
-#endif
 		   )
 		{
-#ifdef FEAT_MBYTE
 		    n = (*mb_char2bytes)(typeahead[typeaheadlen] | 0x80,
 						    typeahead + typeaheadlen);
-#else
-		    typeahead[typeaheadlen] |= 0x80;
-#endif
 		    modifiers &= ~MOD_MASK_ALT;
 		}
 
@@ -2044,7 +2032,6 @@
 	return FALSE;
     }
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	*p = enc_to_utf16((char_u *)name, NULL);
@@ -2073,7 +2060,6 @@
 	    return TRUE;
 	}
     }
-#endif
 
     curpath = getenv("PATH");
     newpath = (char*)alloc((unsigned)(STRLEN(curpath) + 3));
@@ -2768,7 +2754,6 @@
 }
 
 
-#ifdef FEAT_MBYTE
 /*
  * fname_casew(): Wide version of fname_case().  Set the case of the file name,
  * if it already exists.  When "len" is > 0, also expand short to long
@@ -2878,7 +2863,6 @@
     wcscpy(name, szTrueName);
     return OK;
 }
-#endif
 
 /*
  * fname_case(): Set the case of the file name, if it already exists.
@@ -2906,7 +2890,6 @@
 
     slash_adjust(name);
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	*p = enc_to_utf16(name, NULL);
@@ -2933,7 +2916,6 @@
 	}
 	return;
     }
-#endif
 
     /* If 'enc' is utf-8, flen can be larger than _MAX_PATH.
      * So we should check this after calling wide function. */
@@ -2962,7 +2944,6 @@
 	porigPrev = porig;
 	while (*porig != NUL && *porig != psepc)
 	{
-#ifdef FEAT_MBYTE
 	    int l;
 
 	    if (enc_dbcs)
@@ -2972,7 +2953,6 @@
 		    *ptrue++ = *porig++;
 	    }
 	    else
-#endif
 		*ptrue++ = *porig++;
 	}
 	*ptrue = NUL;
@@ -3044,7 +3024,6 @@
     char szUserName[256 + 1];	/* UNLEN is 256 */
     DWORD cch = sizeof szUserName;
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR wszUserName[256 + 1];	/* UNLEN is 256 */
@@ -3062,7 +3041,6 @@
 	    }
 	}
     }
-#endif
     if (GetUserName(szUserName, &cch))
     {
 	vim_strncpy(s, (char_u *)szUserName, len - 1);
@@ -3083,7 +3061,6 @@
 {
     DWORD cch = len;
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR wszHostName[256 + 1];
@@ -3101,7 +3078,6 @@
 	    }
 	}
     }
-#endif
     if (!GetComputerName((LPSTR)s, &cch))
 	vim_strncpy(s, (char_u *)"PC (Win32 Vim)", len - 1);
 }
@@ -3135,7 +3111,6 @@
      * But the Win32s known bug list says that getcwd() doesn't work
      * so use the Win32 system call instead. <Negri>
      */
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	wbuf[_MAX_PATH + 1];
@@ -3167,7 +3142,6 @@
 	}
 	return FAIL;
     }
-#endif
     if (GetCurrentDirectory(len, (LPSTR)buf) == 0)
 	return FAIL;
     lfnlen = GetLongPathNameA((LPCSTR)buf, (LPSTR)abuf, _MAX_PATH);
@@ -3205,7 +3179,6 @@
 {
     long	n = -1;
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR *p = enc_to_utf16(name, NULL);
@@ -3219,7 +3192,6 @@
 	}
     }
     if (n == -1)
-#endif
 	n = _chmod((const char *)name, perm);
     if (n == -1)
 	return FAIL;
@@ -3290,7 +3262,6 @@
     int
 mch_mkdir(char_u *name)
 {
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	*p;
@@ -3303,7 +3274,6 @@
 	vim_free(p);
 	return retval;
     }
-#endif
     return _mkdir((const char *)name);
 }
 
@@ -3314,7 +3284,6 @@
     int
 mch_rmdir(char_u *name)
 {
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	*p;
@@ -3327,7 +3296,6 @@
 	vim_free(p);
 	return retval;
     }
-#endif
     return _rmdir((const char *)name);
 }
 
@@ -3353,7 +3321,6 @@
     int			res = FALSE;
     WIN32_FIND_DATAA	findDataA;
     DWORD		fileFlags = 0, reparseTag = 0;
-#ifdef FEAT_MBYTE
     WCHAR		*wn = NULL;
     WIN32_FIND_DATAW	findDataW;
 
@@ -3370,7 +3337,6 @@
 	}
     }
     else
-#endif
     {
 	hFind = FindFirstFile((LPCSTR)name, &findDataA);
 	if (hFind != INVALID_HANDLE_VALUE)
@@ -3415,7 +3381,6 @@
 {
     HANDLE	hFile;
     int		res = FILEINFO_READ_FAIL;
-#ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
@@ -3436,7 +3401,6 @@
 	vim_free(wn);
     }
     else
-#endif
 	hFile = CreateFile((LPCSTR)fname,    /* file name */
 		    GENERIC_READ,	    /* access mode */
 		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
@@ -3466,7 +3430,6 @@
 win32_getattrs(char_u *name)
 {
     int		attr;
-#ifdef FEAT_MBYTE
     WCHAR	*p = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
@@ -3478,7 +3441,6 @@
 	vim_free(p);
     }
     else
-#endif
 	attr = GetFileAttributes((char *)name);
 
     return attr;
@@ -3493,7 +3455,6 @@
 win32_setattrs(char_u *name, int attrs)
 {
     int res;
-#ifdef FEAT_MBYTE
     WCHAR	*p = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
@@ -3505,7 +3466,6 @@
 	vim_free(p);
     }
     else
-#endif
 	res = SetFileAttributes((char *)name, attrs);
 
     return res ? 0 : -1;
@@ -3621,9 +3581,7 @@
 {
     HANDLE	hFile;
     int		type;
-#ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
-#endif
 
     /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to
      * read from it later will cause Vim to hang.  Thus return NODE_WRITABLE
@@ -3631,7 +3589,6 @@
     if (STRNCMP(name, "\\\\.\\", 4) == 0)
 	return NODE_WRITABLE;
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
 	wn = enc_to_utf16(name, NULL);
 
@@ -3647,7 +3604,6 @@
 	vim_free(wn);
     }
     else
-#endif
 	hFile = CreateFile((LPCSTR)name,    /* file name */
 		    GENERIC_WRITE,	    /* access mode */
 		    0,			    /* share mode */
@@ -3695,7 +3651,6 @@
     p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl));
     if (p != NULL)
     {
-# ifdef FEAT_MBYTE
 	WCHAR	*wn = NULL;
 
 	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
@@ -3737,7 +3692,6 @@
 	    vim_free(wn);
 	}
 	else
-# endif
 	{
 	    /* Try to retrieve the entire security descriptor. */
 	    err = GetNamedSecurityInfo(
@@ -3815,9 +3769,7 @@
 
     if (p != NULL)
     {
-# ifdef FEAT_MBYTE
 	WCHAR	*wn = NULL;
-# endif
 
 	/* Set security flags */
 	if (p->pSidOwner)
@@ -3836,7 +3788,6 @@
 	if (p->pSacl)
 	    sec_info |= SACL_SECURITY_INFORMATION;
 
-# ifdef FEAT_MBYTE
 	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
 	    wn = enc_to_utf16(fname, NULL);
 	if (wn != NULL)
@@ -3853,7 +3804,6 @@
 	    vim_free(wn);
 	}
 	else
-# endif
 	{
 	    (void)SetNamedSecurityInfo(
 			(LPSTR)fname,		// Abstract filename
@@ -4211,7 +4161,6 @@
     LPVOID		*env,
     char		*cwd)
 {
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	BOOL	ret;
@@ -4247,7 +4196,6 @@
 	return ret;
     }
 fallback:
-#endif
     return CreateProcess(
 	NULL,			/* Executable name */
 	cmd,			/* Command to execute */
@@ -4267,7 +4215,6 @@
     char *cmd,
     INT	 n_show_cmd)
 {
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL);
@@ -4279,7 +4226,6 @@
 	    return ret;
 	}
     }
-#endif
     return ShellExecute(NULL, NULL, cmd, NULL, NULL, n_show_cmd);
 }
 
@@ -4466,20 +4412,9 @@
     while (ret != 0 && availableBytes > 0)
     {
 	repeatCount++;
-	toRead =
-# ifdef FEAT_MBYTE
-		 (DWORD)(BUFLEN - *buffer_off);
-# else
-		 (DWORD)BUFLEN;
-# endif
+	toRead = (DWORD)(BUFLEN - *buffer_off);
 	toRead = availableBytes < toRead ? availableBytes : toRead;
-	ReadFile(g_hChildStd_OUT_Rd, buffer
-# ifdef FEAT_MBYTE
-		 + *buffer_off, toRead
-# else
-		 , toRead
-# endif
-		 , &len, NULL);
+	ReadFile(g_hChildStd_OUT_Rd, buffer + *buffer_off, toRead , &len, NULL);
 
 	/* If we haven't read anything, there is a problem */
 	if (len == 0)
@@ -4501,7 +4436,6 @@
 		    ga_append(ga, buffer[i]);
 	    }
 	}
-# ifdef FEAT_MBYTE
 	else if (has_mbyte)
 	{
 	    int		l;
@@ -4545,7 +4479,6 @@
 	    }
 	    *buffer_off = 0;
 	}
-# endif /* FEAT_MBYTE */
 	else
 	{
 	    buffer[len] = NUL;
@@ -4740,11 +4673,9 @@
 			}
 			else if (ta_buf[i] == '\r')
 			    ta_buf[i] = '\n';
-# ifdef FEAT_MBYTE
 			if (has_mbyte)
 			    i += (*mb_ptr2len_len)(ta_buf + i,
 						    ta_len + len - i) - 1;
-# endif
 		    }
 
 		    /*
@@ -4755,7 +4686,6 @@
 		    {
 			if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
 			    msg_putchar(ta_buf[i]);
-# ifdef FEAT_MBYTE
 			else if (has_mbyte)
 			{
 			    int l = (*mb_ptr2len)(ta_buf + i);
@@ -4763,7 +4693,6 @@
 			    msg_outtrans_len(ta_buf + i, l);
 			    i += l - 1;
 			}
-# endif
 			else
 			    msg_outtrans_len(ta_buf + i, 1);
 		    }
@@ -4857,7 +4786,6 @@
 }
 #else
 
-# ifdef FEAT_MBYTE
     static int
 mch_system(char *cmd, int options)
 {
@@ -4873,9 +4801,6 @@
     }
     return system(cmd);
 }
-# else
-#  define mch_system(c, o) system(c)
-# endif
 
 #endif
 
@@ -4972,7 +4897,6 @@
     int		tmode = cur_tmode;
 #ifdef FEAT_TITLE
     char	szShellTitle[512];
-# ifdef FEAT_MBYTE
     int		did_set_title = FALSE;
 
     /* Change the title to reflect that we are in a subshell. */
@@ -5003,7 +4927,6 @@
 	}
     }
     if (!did_set_title)
-# endif
 	/* Change the title to reflect that we are in a subshell. */
 	if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0)
 	{
@@ -5217,7 +5140,6 @@
 			"External commands will not pause after completion.\n"
 			"See  :help win32-vimrun  for more information.");
 		    char *title = _("Vim Warning");
-# ifdef FEAT_MBYTE
 		    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
 		    {
 			WCHAR *wmsg = enc_to_utf16((char_u *)msg, NULL);
@@ -5229,7 +5151,6 @@
 			vim_free(wtitle);
 		    }
 		    else
-# endif
 			MessageBox(NULL, msg, title, MB_ICONWARNING);
 		    need_vimrun_warning = FALSE;
 		}
@@ -5294,8 +5215,8 @@
 	DWORD dwFlagsAndAttributes)
 {
     HANDLE h;
-# ifdef FEAT_MBYTE
     WCHAR *wn = NULL;
+
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	wn = enc_to_utf16(fname, NULL);
@@ -5308,7 +5229,6 @@
 	}
     }
     if (wn == NULL)
-# endif
 	h = CreateFile((LPCSTR)fname, dwDesiredAccess, dwShareMode,
 		lpSecurityAttributes, dwCreationDisposition,
 		dwFlagsAndAttributes, NULL);
@@ -6339,7 +6259,6 @@
     COORD coord = g_coord;
     DWORD written;
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	static WCHAR	*unicodebuf = NULL;
@@ -6392,7 +6311,6 @@
 	}
     }
     else
-#endif
     {
 	if (!USE_VTP)
 	{
@@ -6763,10 +6681,8 @@
     int
 mch_remove(char_u *name)
 {
-#ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
     int		n;
-#endif
 
     /*
      * On Windows, deleting a directory's symbolic link is done by
@@ -6777,7 +6693,6 @@
 
     win32_setattrs(name, FILE_ATTRIBUTE_NORMAL);
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	wn = enc_to_utf16(name, NULL);
@@ -6788,7 +6703,6 @@
 	    return n;
 	}
     }
-#endif
     return DeleteFile((LPCSTR)name) ? 0 : -1;
 }
 
@@ -6839,7 +6753,6 @@
     return (long_u)((ms.ullTotalPhys - WINNT_RESERVE_BYTES) / 1024);
 }
 
-#ifdef FEAT_MBYTE
 /*
  * Same code as below, but with wide functions and no comments.
  * Return 0 for success, non-zero for failure.
@@ -6893,7 +6806,6 @@
 
     return 0;
 }
-#endif
 
 
 /*
@@ -6924,7 +6836,6 @@
     char	szNewPath[_MAX_PATH+1];
     char	*pszFilePart;
     HANDLE	hf;
-#ifdef FEAT_MBYTE
     WCHAR	*wold = NULL;
     WCHAR	*wnew = NULL;
     int		retval = -1;
@@ -6939,7 +6850,6 @@
 	vim_free(wnew);
 	return retval;
     }
-#endif
 
     /*
      * No need to play tricks unless the file name contains a "~" as the
@@ -7024,25 +6934,20 @@
 {
     HANDLE	hFile;
     int		retval = -1;	    /* default: fail */
-#ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
 	wn = enc_to_utf16((char_u *)n, NULL);
-#endif
 
     if (mch_isdir((char_u *)n))
     {
 	char TempName[_MAX_PATH + 16] = "";
-#ifdef FEAT_MBYTE
 	WCHAR TempNameW[_MAX_PATH + 16] = L"";
-#endif
 
 	if (p & R_OK)
 	{
 	    /* Read check is performed by seeing if we can do a find file on
 	     * the directory for any file. */
-#ifdef FEAT_MBYTE
 	    if (wn != NULL)
 	    {
 		int		    i;
@@ -7062,7 +6967,6 @@
 		    (void)FindClose(hFile);
 	    }
 	    else
-#endif
 	    {
 		char		    *pch;
 		WIN32_FIND_DATA	    d;
@@ -7087,7 +6991,6 @@
 	     * directories on read-only network shares.  However, in
 	     * directories whose ACL allows writes but denies deletes will end
 	     * up keeping the temporary file :-(. */
-#ifdef FEAT_MBYTE
 	    if (wn != NULL)
 	    {
 		if (!GetTempFileNameW(wn, L"VIM", 0, TempNameW))
@@ -7096,7 +6999,6 @@
 		    DeleteFileW(TempNameW);
 	    }
 	    else
-#endif
 	    {
 		if (!GetTempFileName(n, "VIM", 0, TempName))
 		    goto getout;
@@ -7114,12 +7016,10 @@
 	DWORD access_mode = ((p & W_OK) ? GENERIC_WRITE : 0)
 					     | ((p & R_OK) ? GENERIC_READ : 0);
 
-#ifdef FEAT_MBYTE
 	if (wn != NULL)
 	    hFile = CreateFileW(wn, access_mode, share_mode,
 						 NULL, OPEN_EXISTING, 0, NULL);
 	else
-#endif
 	    hFile = CreateFile(n, access_mode, share_mode,
 						 NULL, OPEN_EXISTING, 0, NULL);
 	if (hFile == INVALID_HANDLE_VALUE)
@@ -7129,13 +7029,10 @@
 
     retval = 0;	    /* success */
 getout:
-#ifdef FEAT_MBYTE
     vim_free(wn);
-#endif
     return retval;
 }
 
-#if defined(FEAT_MBYTE) || defined(PROTO)
 /*
  * Version of open() that may use UTF-16 file name.
  */
@@ -7143,7 +7040,7 @@
 mch_open(const char *name, int flags, int mode)
 {
     /* _wopen() does not work with Borland C 5.5: creates a read-only file. */
-# ifndef __BORLANDC__
+#ifndef __BORLANDC__
     WCHAR	*wn;
     int		f;
 
@@ -7157,7 +7054,7 @@
 	    return f;
 	}
     }
-# endif
+#endif
 
     /* open() can open a file which name is longer than _MAX_PATH bytes
      * and shorter than _MAX_PATH characters successfully, but sometimes it
@@ -7180,7 +7077,7 @@
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
-# if defined(DEBUG) && _MSC_VER >= 1400
+#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];
@@ -7191,7 +7088,7 @@
 	    _set_fmode(_O_TEXT);
 	else if (newMode == 'b')
 	    _set_fmode(_O_BINARY);
-# endif
+#endif
 	wn = enc_to_utf16((char_u *)name, NULL);
 	wm = enc_to_utf16((char_u *)mode, NULL);
 	if (wn != NULL && wm != NULL)
@@ -7199,9 +7096,9 @@
 	vim_free(wn);
 	vim_free(wm);
 
-# if defined(DEBUG) && _MSC_VER >= 1400
+#if defined(DEBUG) && _MSC_VER >= 1400
 	_set_fmode(oldMode);
-# endif
+#endif
 	return f;
     }
 
@@ -7214,9 +7111,7 @@
 
     return fopen(name, mode);
 }
-#endif
 
-#ifdef FEAT_MBYTE
 /*
  * SUB STREAM (aka info stream) handling:
  *
@@ -7360,7 +7255,6 @@
     vim_free(fromw);
     vim_free(tow);
 }
-#endif
 
 /*
  * Copy file attributes from file "from" to file "to".
@@ -7370,11 +7264,9 @@
     int
 mch_copy_file_attribute(char_u *from, char_u *to)
 {
-#ifdef FEAT_MBYTE
     /* File streams only work on Windows NT and later. */
     PlatformId();
     copy_infostreams(from, to);
-#endif
     return 0;
 }
 
@@ -7464,7 +7356,6 @@
 #endif
 
 
-#if defined(FEAT_MBYTE) || defined(PROTO)
 /*
  * The command line arguments in UCS2
  */
@@ -7691,7 +7582,6 @@
 
     set_alist_count();
 }
-#endif
 
     int
 mch_setenv(char *var, char *value, int x)
@@ -7704,7 +7594,6 @@
 
     sprintf((char *)envbuf, "%s=%s", var, value);
 
-#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	WCHAR	    *p = enc_to_utf16(envbuf, NULL);
@@ -7713,14 +7602,13 @@
 	if (p == NULL)
 	    return -1;
 	_wputenv(p);
-# ifdef libintl_wputenv
+#ifdef libintl_wputenv
 	libintl_wputenv(p);
-# endif
+#endif
 	/* Unlike Un*x systems, we can free the string for _wputenv(). */
 	vim_free(p);
     }
     else
-#endif
     {
 	_putenv((char *)envbuf);
 #ifdef libintl_putenv
