diff --git a/src/gui.c b/src/gui.c
index 9278df9..cbbe2af 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -13,7 +13,7 @@
 /* Structure containing all the GUI information */
 gui_T gui;
 
-#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
+#if !defined(FEAT_GUI_GTK)
 static void set_guifontwide(char_u *font_name);
 #endif
 static void gui_check_pos(void);
@@ -397,13 +397,11 @@
     gui.fontset = NOFONTSET;
 # endif
 #endif
-#ifdef FEAT_MBYTE
     gui.wide_font = NOFONT;
-# ifndef FEAT_GUI_GTK
+#ifndef FEAT_GUI_GTK
     gui.wide_bold_font = NOFONT;
     gui.wide_ital_font = NOFONT;
     gui.wide_boldital_font = NOFONT;
-# endif
 #endif
 
 #ifdef FEAT_MENU
@@ -652,10 +650,8 @@
 	emsg(_("E665: Cannot start GUI, no valid font found"));
 	goto error2;
     }
-#ifdef FEAT_MBYTE
     if (gui_get_wide_font() == FAIL)
 	emsg(_("E231: 'guifontwide' invalid"));
-#endif
 
     gui.num_cols = Columns;
     gui.num_rows = Rows;
@@ -874,7 +870,7 @@
 		 * longer be used! */
 		if (gui_mch_init_font(font_name, FALSE) == OK)
 		{
-#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
+#if !defined(FEAT_GUI_GTK)
 		    /* If it's a Unicode font, try setting 'guifontwide' to a
 		     * similar double-width font. */
 		    if ((p_guifontwide == NULL || *p_guifontwide == NUL)
@@ -916,8 +912,7 @@
     return ret;
 }
 
-#if defined(FEAT_MBYTE) || defined(PROTO)
-# ifndef FEAT_GUI_GTK
+#ifndef FEAT_GUI_GTK
 /*
  * Try setting 'guifontwide' to a font twice as wide as "name".
  */
@@ -964,7 +959,7 @@
 	}
     }
 }
-# endif /* !FEAT_GUI_GTK */
+#endif /* !FEAT_GUI_GTK */
 
 /*
  * Get the font for 'guifontwide'.
@@ -995,7 +990,7 @@
     }
 
     gui_mch_free_font(gui.wide_font);
-# ifdef FEAT_GUI_GTK
+#ifdef FEAT_GUI_GTK
     /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
     if (font != NOFONT && gui.norm_font != NOFONT
 			 && pango_font_description_equal(font, gui.norm_font))
@@ -1004,19 +999,18 @@
 	gui_mch_free_font(font);
     }
     else
-# endif
+#endif
 	gui.wide_font = font;
-# ifdef FEAT_GUI_MSWIN
+#ifdef FEAT_GUI_MSWIN
     gui_mch_wide_font_changed();
-# else
+#else
     /*
      * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to
      * support those fonts for 'guifontwide'.
      */
-# endif
+#endif
     return OK;
 }
-#endif
 
     void
 gui_set_cursor(int row, int col)
@@ -1258,7 +1252,7 @@
 	}
 	else
 	{
-#if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
+#if defined(FEAT_RIGHTLEFT)
 	    int	    col_off = FALSE;
 #endif
 	    /*
@@ -1275,14 +1269,13 @@
 		cur_height = (gui.char_height * shape->percentage + 99) / 100;
 		cur_width = gui.char_width;
 	    }
-#ifdef FEAT_MBYTE
 	    if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col,
 				    LineOffset[gui.row] + screen_Columns) > 1)
 	    {
 		/* Double wide character. */
 		if (shape->shape != SHAPE_VER)
 		    cur_width += gui.char_width;
-# ifdef FEAT_RIGHTLEFT
+#ifdef FEAT_RIGHTLEFT
 		if (CURSOR_BAR_RIGHT)
 		{
 		    /* gui.col points to the left halve of the character but
@@ -1292,11 +1285,10 @@
 		    col_off = TRUE;
 		    ++gui.col;
 		}
-# endif
-	    }
 #endif
+	    }
 	    gui_mch_draw_part_cursor(cur_width, cur_height, cbg);
-#if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT)
+#if defined(FEAT_RIGHTLEFT)
 	    if (col_off)
 		--gui.col;
 #endif
@@ -2023,9 +2015,7 @@
 gui_outstr(char_u *s, int len)
 {
     int	    this_len;
-#ifdef FEAT_MBYTE
     int	    cells;
-#endif
 
     if (len == 0)
 	return;
@@ -2035,7 +2025,6 @@
 
     while (len > 0)
     {
-#ifdef FEAT_MBYTE
 	if (has_mbyte)
 	{
 	    /* Find out how many chars fit in the current line. */
@@ -2051,7 +2040,6 @@
 		this_len = len;	    /* don't include following composing char */
 	}
 	else
-#endif
 	    if (gui.col + len > Columns)
 	    this_len = Columns - gui.col;
 	else
@@ -2061,12 +2049,10 @@
 					  0, (guicolor_T)0, (guicolor_T)0, 0);
 	s += this_len;
 	len -= this_len;
-#ifdef FEAT_MBYTE
 	/* fill up for a double-width char that doesn't fit. */
 	if (len > 0 && gui.col < Columns)
 	    (void)gui_outstr_nowrap((char_u *)" ", 1,
 					  0, (guicolor_T)0, (guicolor_T)0, 0);
-#endif
 	/* The cursor may wrap to the next line. */
 	if (gui.col >= Columns)
 	{
@@ -2089,7 +2075,6 @@
     guicolor_T	bg,	    /* colors for cursor */
     int		back)	    /* backup this many chars when using bold trick */
 {
-#ifdef FEAT_MBYTE
     char_u	buf[MB_MAXBYTES + 1];
 
     /* Don't draw right halve of a double-width UTF-8 char. "cannot happen" */
@@ -2112,9 +2097,6 @@
     return gui_outstr_nowrap(ScreenLines + off,
 	    enc_dbcs ? (*mb_ptr2len)(ScreenLines + off) : 1,
 							 flags, fg, bg, back);
-#else
-    return gui_outstr_nowrap(ScreenLines + off, 1, flags, fg, bg, back);
-#endif
 }
 
 #ifdef FEAT_GUI_GTK
@@ -2223,9 +2205,7 @@
     guicolor_T	sp_color;
 #if !defined(FEAT_GUI_GTK)
     GuiFont	font = NOFONT;
-# ifdef FEAT_MBYTE
     GuiFont	wide_font = NOFONT;
-# endif
 # ifdef FEAT_XFONTSET
     GuiFontset	fontset = NOFONTSET;
 # endif
@@ -2316,7 +2296,6 @@
 	else
 	    font = gui.norm_font;
 
-# ifdef FEAT_MBYTE
 	/*
 	 * Choose correct wide_font by font.  wide_font should be set with font
 	 * at same time in above block.  But it will make many "ifdef" nasty
@@ -2330,8 +2309,6 @@
 	    wide_font = gui.wide_ital_font;
 	else if (font == gui.norm_font && gui.wide_font)
 	    wide_font = gui.wide_font;
-# endif
-
     }
 # ifdef FEAT_XFONTSET
     if (fontset != NOFONTSET)
@@ -2441,7 +2418,6 @@
     /* The value returned is the length in display cells */
     len = gui_gtk2_draw_string(gui.row, col, s, len, draw_flags);
 #else
-# ifdef FEAT_MBYTE
     if (enc_utf8)
     {
 	int	start;		/* index of bytes to be drawn */
@@ -2456,11 +2432,11 @@
 	int	curr_wide = FALSE;  /* use 'guifontwide' */
 	int	prev_wide = FALSE;
 	int	wide_changed;
-#  ifdef WIN3264
+# ifdef WIN3264
 	int	sep_comp = FALSE;   /* Don't separate composing chars. */
-#  else
+# else
 	int	sep_comp = TRUE;    /* Separate composing chars. */
-#  endif
+# endif
 
 	/* Break the string at a composing character, it has to be drawn on
 	 * top of the previous character. */
@@ -2476,9 +2452,9 @@
 	    if (!comping || sep_comp)
 	    {
 		if (cn > 1
-#  ifdef FEAT_XFONTSET
+# ifdef FEAT_XFONTSET
 			&& fontset == NOFONTSET
-#  endif
+# endif
 			&& wide_font != NOFONT)
 		    curr_wide = TRUE;
 		else
@@ -2494,15 +2470,15 @@
 	     * a composing character. */
 	    if (i + cl >= len || (comping && sep_comp && i > start)
 		    || wide_changed
-#  if defined(FEAT_GUI_X11)
+# if defined(FEAT_GUI_X11)
 		    || (cn > 1
-#   ifdef FEAT_XFONTSET
+#  ifdef FEAT_XFONTSET
 			/* No fontset: At least draw char after wide char at
 			 * right position. */
 			&& fontset == NOFONTSET
-#   endif
-		       )
 #  endif
+		       )
+# endif
 	       )
 	    {
 		if ((comping && sep_comp) || wide_changed)
@@ -2529,29 +2505,29 @@
 		    cl = 0;
 		}
 
-#  if defined(FEAT_GUI_X11)
+# if defined(FEAT_GUI_X11)
 		/* No fontset: draw a space to fill the gap after a wide char
 		 * */
 		if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0
-#   ifdef FEAT_XFONTSET
+#  ifdef FEAT_XFONTSET
 			&& fontset == NOFONTSET
-#   endif
+#  endif
 			&& !wide_changed)
 		    gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
 							       1, draw_flags);
-#  endif
+# endif
 	    }
 	    /* Draw a composing char on top of the previous char. */
 	    if (comping && sep_comp)
 	    {
-#  if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON
+# if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON
 		/* Carbon ATSUI autodraws composing char over previous char */
 		gui_mch_draw_string(gui.row, scol, s + i, cl,
 						    draw_flags | DRAW_TRANSP);
-#  else
+# else
 		gui_mch_draw_string(gui.row, scol - cn, s + i, cl,
 						    draw_flags | DRAW_TRANSP);
-#  endif
+# endif
 		start = i + cl;
 	    }
 	    prev_wide = curr_wide;
@@ -2560,17 +2536,14 @@
 	len = scol - col;
     }
     else
-# endif
     {
 	gui_mch_draw_string(gui.row, col, s, len, draw_flags);
-# ifdef FEAT_MBYTE
 	if (enc_dbcs == DBCS_JPNU)
 	{
 	    /* Get the length in display cells, this can be different from the
 	     * number of bytes for "euc-jp". */
 	    len = mb_string2cells(s, len);
 	}
-# endif
     }
 #endif /* !FEAT_GUI_GTK */
 
@@ -2697,9 +2670,7 @@
     int		idx, len;
     int		back, nback;
     int		retval = FALSE;
-#ifdef FEAT_MBYTE
     int		orig_col1, orig_col2;
-#endif
 
     /* Don't try to update when ScreenLines is not valid */
     if (!screen_cleared || ScreenLines == NULL)
@@ -2716,14 +2687,11 @@
     old_row = gui.row;
     old_col = gui.col;
     old_hl_mask = gui.highlight_mask;
-#ifdef FEAT_MBYTE
     orig_col1 = col1;
     orig_col2 = col2;
-#endif
 
     for (gui.row = row1; gui.row <= row2; gui.row++)
     {
-#ifdef FEAT_MBYTE
 	/* When only half of a double-wide character is in the block, include
 	 * the other half. */
 	col1 = orig_col1;
@@ -2753,12 +2721,11 @@
 		    msg((char *)IObuff);
 		}
 	    }
-# ifdef FEAT_GUI_GTK
+#ifdef FEAT_GUI_GTK
 	    if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0)
 		++col2;
-# endif
-	}
 #endif
+	}
 	gui.col = col1;
 	off = LineOffset[gui.row] + gui.col;
 	len = col2 - col1 + 1;
@@ -2778,7 +2745,7 @@
 	{
 	    first_attr = ScreenAttrs[off];
 	    gui.highlight_mask = first_attr;
-#if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK)
+#if !defined(FEAT_GUI_GTK)
 	    if (enc_utf8 && ScreenLinesUC[off] != 0)
 	    {
 		/* output multi-byte character separately */
@@ -2814,7 +2781,6 @@
 		for (idx = 0; idx < len && ScreenAttrs[off + idx] == first_attr;
 									idx++)
 		{
-# ifdef FEAT_MBYTE
 		    /* Stop at a multi-byte Unicode character. */
 		    if (enc_utf8 && ScreenLinesUC[off + idx] != 0)
 			break;
@@ -2827,7 +2793,6 @@
 							    + off + idx) == 2)
 			    ++idx;  /* skip second byte of double-byte char */
 		    }
-# endif
 		}
 		nback = gui_outstr_nowrap(ScreenLines + off, idx, flags,
 					  (guicolor_T)0, (guicolor_T)0, back);
@@ -3390,11 +3355,7 @@
     int		col = check_col(X_2_COL(x));
     int		row = check_row(Y_2_ROW(y));
 
-#ifdef FEAT_MBYTE
     *colp = mb_fix_col(col, row);
-#else
-    *colp = col;
-#endif
     return row;
 }
 
