diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index ba2d23d..cda8667 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -613,6 +613,18 @@ gui_mch_menu_set_tip(vimmenu_T *menu)
     void
 gui_mch_destroy_menu(vimmenu_T *menu)
 {
+    /* Don't let gtk_container_remove automatically destroy menu->id. */
+    if (menu->id != NULL)
+	g_object_ref(menu->id);
+
+    /* Workaround for a spurious gtk warning in Ubuntu: "Trying to remove
+     * a child that doesn't believe we're it's parent."
+     * Remove widget from gui.menubar before destroying it. */
+    if (menu->id != NULL && gui.menubar != NULL &&
+	gtk_widget_get_parent(menu->id) == gui.menubar) {
+	gtk_container_remove(GTK_CONTAINER(gui.menubar), menu->id);
+    }
+
 # ifdef FEAT_TOOLBAR
     if (menu->parent != NULL && menu_is_toolbar(menu->parent->name))
     {
@@ -632,6 +644,8 @@ gui_mch_destroy_menu(vimmenu_T *menu)
 	    gtk_widget_destroy(menu->id);
     }
 
+    if (menu->id != NULL)
+	g_object_unref(menu->id);
     menu->submenu_id = NULL;
     menu->id = NULL;
 }
