diff --git a/src/evalfunc.c b/src/evalfunc.c
index 7c122e1..2c041fa 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5650,13 +5650,7 @@
 		0
 #endif
 		},
-	{"footer",
-#ifdef FEAT_FOOTER
-		1
-#else
-		0
-#endif
-		},
+	{"footer", 0},
 	{"fork",
 #if !defined(USE_SYSTEM) && defined(UNIX)
 		1
diff --git a/src/feature.h b/src/feature.h
index 6334288..26296d3 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -127,6 +127,8 @@
  *			Support was removed in 8.1.1093.
  * +farsi		Farsi (Persian language) Keymap support.
  *			Removed in patch 8.1.0932
+ * +footer		Motif only: Add a message area at the bottom of the
+ *			main window area.
  */
 
 /*
@@ -1133,14 +1135,6 @@
 # endif
 #endif
 
-#if 0
-/*
- * +footer		Motif only: Add a message area at the bottom of the
- *			main window area.
- */
-# define FEAT_FOOTER
-#endif
-
 /*
  * +autochdir		'autochdir' option.
  */
diff --git a/src/gui.c b/src/gui.c
index e1bc73f..9c78dac 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -445,9 +445,6 @@
 #if defined(FEAT_TOOLBAR) && (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_HAIKU))
     gui.toolbar_height = 0;
 #endif
-#if defined(FEAT_FOOTER) && defined(FEAT_GUI_MOTIF)
-    gui.footer_height = 0;
-#endif
 #ifdef FEAT_BEVAL_TIP
     gui.tooltip_fontset = NOFONTSET;
 #endif
@@ -1530,10 +1527,6 @@
     if (gui_has_tabline())
 	base_height += gui.tabline_height;
 # endif
-# ifdef FEAT_FOOTER
-    if (vim_strchr(p_go, GO_FOOTER) != NULL)
-	base_height += gui.footer_height;
-# endif
 # if defined(FEAT_GUI_MOTIF) && defined(FEAT_MENU)
     base_height += gui_mch_text_area_extra_height();
 # endif
@@ -3479,10 +3472,6 @@
 #ifdef FEAT_GUI_TABLINE
     int		using_tabline;
 #endif
-#ifdef FEAT_FOOTER
-    static int	prev_footer = -1;
-    int		using_footer = FALSE;
-#endif
 #if defined(FEAT_MENU)
     static int	prev_tearoff = -1;
     int		using_tearoff = FALSE;
@@ -3557,11 +3546,6 @@
 		using_toolbar = TRUE;
 		break;
 #endif
-#ifdef FEAT_FOOTER
-	    case GO_FOOTER:
-		using_footer = TRUE;
-		break;
-#endif
 	    case GO_TEAROFF:
 #if defined(FEAT_MENU)
 		using_tearoff = TRUE;
@@ -3661,16 +3645,6 @@
 		fix_size = TRUE;
 	}
 #endif
-#ifdef FEAT_FOOTER
-	if (using_footer != prev_footer)
-	{
-	    gui_mch_enable_footer(using_footer);
-	    prev_footer = using_footer;
-	    need_set_size |= RESIZE_VERT;
-	    if (using_footer)
-		fix_size = TRUE;
-	}
-#endif
 #if defined(FEAT_MENU) && !(defined(MSWIN) && !defined(FEAT_TEAROFF))
 	if (using_tearoff != prev_tearoff)
 	{
diff --git a/src/gui.h b/src/gui.h
index 0036093..aecba27 100644
--- a/src/gui.h
+++ b/src/gui.h
@@ -402,10 +402,6 @@
     int		tabline_height;
 #endif
 
-#ifdef FEAT_FOOTER
-    int		footer_height;	    // height of the message footer
-#endif
-
 #if defined(FEAT_TOOLBAR) \
 	&& (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_HAIKU) || defined(FEAT_GUI_MSWIN))
     int		toolbar_height;	    // height of the toolbar
diff --git a/src/gui_motif.c b/src/gui_motif.c
index 27c22d1..4c5ced5 100644
--- a/src/gui_motif.c
+++ b/src/gui_motif.c
@@ -75,9 +75,6 @@
 static Widget	tabLine_menu = 0;
 static int	showing_tabline = 0;
 #endif
-#ifdef FEAT_FOOTER
-static Widget footer;
-#endif
 #ifdef FEAT_MENU
 # if (XmVersion >= 1002)
 // remember the last set value for the tearoff item
@@ -87,10 +84,6 @@
 #endif
 
 #ifdef FEAT_TOOLBAR
-# ifdef FEAT_FOOTER
-static void toolbarbutton_enter_cb(Widget, XtPointer, XEvent *, Boolean *);
-static void toolbarbutton_leave_cb(Widget, XtPointer, XEvent *, Boolean *);
-# endif
 static void reset_focus(void);
 #endif
 
@@ -574,25 +567,6 @@
 	XmNshadowThickness, 0,
 	NULL);
 
-#ifdef FEAT_FOOTER
-    /*
-     * Create the Footer.
-     */
-    footer = XtVaCreateWidget("footer",
-	xmLabelGadgetClass, vimForm,
-	XmNalignment, XmALIGNMENT_BEGINNING,
-	XmNmarginHeight, 0,
-	XmNmarginWidth, 0,
-	XmNtraversalOn, False,
-	XmNrecomputeSize, False,
-	XmNleftAttachment, XmATTACH_FORM,
-	XmNleftOffset, 5,
-	XmNrightAttachment, XmATTACH_FORM,
-	XmNbottomAttachment, XmATTACH_FORM,
-	NULL);
-    gui_mch_set_footer((char_u *) "");
-#endif
-
     /*
      * Install the callbacks.
      */
@@ -1315,12 +1289,6 @@
 	    {
 		XtAddCallback(menu->id,
 			XmNactivateCallback, gui_x11_menu_cb, menu);
-# ifdef FEAT_FOOTER
-		XtAddEventHandler(menu->id, EnterWindowMask, False,
-			toolbarbutton_enter_cb, menu);
-		XtAddEventHandler(menu->id, LeaveWindowMask, False,
-			toolbarbutton_leave_cb, menu);
-# endif
 	    }
 	}
 	else
@@ -2855,58 +2823,6 @@
 }
 #endif // FEAT_GUI_DIALOG
 
-#if defined(FEAT_FOOTER) || defined(PROTO)
-
-    static int
-gui_mch_compute_footer_height(void)
-{
-    Dimension	height;		    // total Toolbar height
-    Dimension	top;		    // XmNmarginTop
-    Dimension	bottom;		    // XmNmarginBottom
-    Dimension	shadow;		    // XmNshadowThickness
-
-    XtVaGetValues(footer,
-	    XmNheight, &height,
-	    XmNmarginTop, &top,
-	    XmNmarginBottom, &bottom,
-	    XmNshadowThickness, &shadow,
-	    NULL);
-
-    return (int) height + top + bottom + (shadow << 1);
-}
-
-    void
-gui_mch_enable_footer(int showit)
-{
-    if (showit)
-    {
-	gui.footer_height = gui_mch_compute_footer_height();
-	XtManageChild(footer);
-    }
-    else
-    {
-	gui.footer_height = 0;
-	XtUnmanageChild(footer);
-    }
-    XtVaSetValues(textAreaForm, XmNbottomOffset, gui.footer_height, NULL);
-}
-
-    void
-gui_mch_set_footer(char_u *s)
-{
-    XmString	xms;
-
-    xms = XmStringCreate((char *)s, STRING_TAG);
-    if (xms != NULL)
-    {
-	XtVaSetValues(footer, XmNlabelString, xms, NULL);
-	XmStringFree(xms);
-    }
-}
-
-#endif
-
-
 #if defined(FEAT_TOOLBAR) || defined(PROTO)
     void
 gui_mch_show_toolbar(int showit)
@@ -3131,39 +3047,6 @@
 	    XmNhighlightColor, hsp,
 	    NULL);
 }
-
-# ifdef FEAT_FOOTER
-/*
- * The next toolbar enter/leave callbacks should really do balloon help.  But
- * I have to use footer help for backwards compatibility.  Hopefully both will
- * get implemented and the user will have a choice.
- */
-    static void
-toolbarbutton_enter_cb(
-    Widget	w UNUSED,
-    XtPointer	client_data,
-    XEvent	*event UNUSED,
-    Boolean	*cont UNUSED)
-{
-    vimmenu_T	*menu = (vimmenu_T *) client_data;
-
-    if (menu->strings[MENU_INDEX_TIP] != NULL)
-    {
-	if (vim_strchr(p_go, GO_FOOTER) != NULL)
-	    gui_mch_set_footer(menu->strings[MENU_INDEX_TIP]);
-    }
-}
-
-    static void
-toolbarbutton_leave_cb(
-    Widget	w UNUSED,
-    XtPointer	client_data UNUSED,
-    XEvent	*event UNUSED,
-    Boolean	*cont UNUSED)
-{
-    gui_mch_set_footer((char_u *) "");
-}
-# endif
 #endif
 
 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
diff --git a/src/version.c b/src/version.c
index e3cb074..1ceb171 100644
--- a/src/version.c
+++ b/src/version.c
@@ -254,12 +254,8 @@
 #else
 	"-folding",
 #endif
-#ifdef FEAT_FOOTER
-	"+footer",
-#else
 	"-footer",
-#endif
-	    // only interesting on Unix systems
+	// only interesting on Unix systems
 #if !defined(USE_SYSTEM) && defined(UNIX)
 	"+fork()",
 #endif
@@ -708,6 +704,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    375,
+/**/
     374,
 /**/
     373,
