diff --git a/demos/gtk-demo/modelbutton.ui b/demos/gtk-demo/modelbutton.ui
index 455b2d9feb..818de71309 100644
--- a/demos/gtk-demo/modelbutton.ui
+++ b/demos/gtk-demo/modelbutton.ui
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <object class="GtkWindow" id="window1">
+    <property name="resizable">0</property>
     <child type="titlebar">
       <object class="GtkHeaderBar">
         <property name="show-title-buttons">1</property>
@@ -17,31 +18,33 @@
         <child>
           <object class="GtkMenuButton">
             <property name="popover">thing_a</property>
-            <property name="label">Color</property>
+            <property name="label">_Color</property>
+            <property name="use-underline">1</property>
           </object>
         </child>
         <child>
           <object class="GtkMenuButton">
             <property name="popover">thing_b</property>
-            <property name="label">Flavors</property>
+            <property name="label">_Flavors</property>
+            <property name="use-underline">1</property>
           </object>
         </child>
         <child>
           <object class="GtkMenuButton">
             <property name="popover">thing_c</property>
-            <property name="label">Tools</property>
+            <property name="label">_Tools</property>
+            <property name="use-underline">1</property>
           </object>
         </child>
       </object>
     </child>
   </object>
   <object class="GtkPopover" id="thing_a">
+    <style>
+      <class name="menu"/>
+    </style>
     <child>
       <object class="GtkBox">
-        <property name="margin-start">10</property>
-        <property name="margin-end">10</property>
-        <property name="margin-top">10</property>
-        <property name="margin-bottom">10</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkModelButton">
@@ -68,14 +71,12 @@
     </child>
   </object>
   <object class="GtkPopover" id="thing_b">
+    <style>
+      <class name="menu"/>
+    </style>
     <child>
       <object class="GtkBox">
-        <property name="margin-start">10</property>
-        <property name="margin-end">10</property>
-        <property name="margin-top">10</property>
-        <property name="margin-bottom">10</property>
         <property name="orientation">vertical</property>
-        <property name="spacing">10</property>
         <child>
           <object class="GtkModelButton">
             <property name="action-name">win.chocolate</property>
@@ -101,14 +102,12 @@
     </child>
   </object>
   <object class="GtkPopover" id="thing_c">
+    <style>
+      <class name="menu"/>
+    </style>
     <child>
       <object class="GtkBox">
-        <property name="margin-start">10</property>
-        <property name="margin-end">10</property>
-        <property name="margin-top">10</property>
-        <property name="margin-bottom">10</property>
         <property name="orientation">vertical</property>
-        <property name="spacing">10</property>
         <child>
           <object class="GtkModelButton">
             <property name="text">Hammer</property>
diff --git a/demos/gtk-demo/overlay.c b/demos/gtk-demo/overlay.c
index a663580b3b..afc7c534df 100644
--- a/demos/gtk-demo/overlay.c
+++ b/demos/gtk-demo/overlay.c
@@ -56,23 +56,25 @@ do_overlay (GtkWidget *do_widget)
         }
 
       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
-      gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox);
       gtk_widget_set_can_target (vbox, FALSE);
+      gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox);
       gtk_widget_set_halign (vbox, GTK_ALIGN_CENTER);
-      gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER);
+      gtk_widget_set_valign (vbox, GTK_ALIGN_START);
 
       label = gtk_label_new ("<span foreground='blue' weight='ultrabold' font='40'>Numbers</span>");
       gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+      gtk_widget_set_can_target (label, FALSE);
       gtk_widget_set_margin_top (label, 8);
-      gtk_widget_set_margin_bottom (label, 50);
+      gtk_widget_set_margin_bottom (label, 8);
       gtk_container_add (GTK_CONTAINER (vbox), label);
 
       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
       gtk_overlay_add_overlay (GTK_OVERLAY (overlay), vbox);
       gtk_widget_set_halign (vbox, GTK_ALIGN_CENTER);
       gtk_widget_set_valign (vbox, GTK_ALIGN_CENTER);
+
       gtk_entry_set_placeholder_text (GTK_ENTRY (entry), "Your Lucky Number");
-      gtk_widget_set_margin_top (entry, 50);
+      gtk_widget_set_margin_top (entry, 8);
       gtk_widget_set_margin_bottom (entry, 8);
       gtk_container_add (GTK_CONTAINER (vbox), entry);
 
diff --git a/demos/gtk-demo/rotated_text.c b/demos/gtk-demo/rotated_text.c
index 5a88008471..b7967880da 100644
--- a/demos/gtk-demo/rotated_text.c
+++ b/demos/gtk-demo/rotated_text.c
@@ -28,7 +28,7 @@ fancy_shape_renderer (cairo_t        *cr,
                (double) attr->ink_rect.width  / PANGO_SCALE,
                (double) attr->ink_rect.height / PANGO_SCALE);
 
-  if (GPOINTER_TO_UINT (attr->data) == 0x2664) /* U+2665 BLACK HEART SUIT */
+  if (GPOINTER_TO_UINT (attr->data) == 0x2665) /* U+2665 BLACK HEART SUIT */
     {
       cairo_move_to (cr, .5, .0);
       cairo_line_to (cr, .9, -.4);
diff --git a/demos/gtk-demo/shortcut_triggers.c b/demos/gtk-demo/shortcut_triggers.c
index d5b59c3de8..c57edea5fc 100644
--- a/demos/gtk-demo/shortcut_triggers.c
+++ b/demos/gtk-demo/shortcut_triggers.c
@@ -61,7 +61,10 @@ do_shortcut_triggers (GtkWidget *do_widget)
                         G_CALLBACK (gtk_widget_destroyed), &window);
 
       list = gtk_list_box_new ();
-      g_object_set (list, "margin", 6, NULL);
+      gtk_widget_set_margin_top (list, 6);
+      gtk_widget_set_margin_bottom (list, 6);
+      gtk_widget_set_margin_start (list, 6);
+      gtk_widget_set_margin_end (list, 6);
       gtk_container_add (GTK_CONTAINER (window), list);
 
       for (i = 0; i < G_N_ELEMENTS (shortcuts); i++)
diff --git a/demos/gtk-demo/sliding_puzzle.c b/demos/gtk-demo/sliding_puzzle.c
index 5dcc0351bc..2a606fc2fc 100644
--- a/demos/gtk-demo/sliding_puzzle.c
+++ b/demos/gtk-demo/sliding_puzzle.c
@@ -257,7 +257,6 @@ add_move_binding (GtkShortcutController *controller,
                  gtk_callback_action_new (puzzle_key_pressed, NULL, NULL),
                  "(ii)", dx, dy);
   gtk_shortcut_controller_add_shortcut (controller, shortcut);
-  g_object_unref (shortcut);
 }
 
 static void
diff --git a/demos/gtk-demo/stack.ui b/demos/gtk-demo/stack.ui
index adaccfd019..adffefa10d 100644
--- a/demos/gtk-demo/stack.ui
+++ b/demos/gtk-demo/stack.ui
@@ -53,7 +53,7 @@
                   <object class="GtkSpinner">
                     <property name="halign">center</property>
                     <property name="valign">center</property>
-                    <property name="active">1</property>
+                    <property name="spinning">1</property>
                   </object>
                 </property>
               </object>
diff --git a/gtk/gtkmenubutton.c b/gtk/gtkmenubutton.c
index 77f0f5198e..14a5ff0afd 100644
--- a/gtk/gtkmenubutton.c
+++ b/gtk/gtkmenubutton.c
@@ -153,6 +153,7 @@ struct _GtkMenuButtonPrivate
   gpointer create_popup_user_data;
   GDestroyNotify create_popup_destroy_notify;
 
+  GtkWidget *label_widget;
   GtkWidget *align_widget;
   GtkWidget *arrow_widget;
   GtkArrowType arrow_type;
@@ -167,6 +168,7 @@ enum
   PROP_POPOVER,
   PROP_ICON_NAME,
   PROP_LABEL,
+  PROP_USE_UNDERLINE,
   PROP_RELIEF,
   LAST_PROP
 };
@@ -205,6 +207,9 @@ gtk_menu_button_set_property (GObject      *object,
       case PROP_LABEL:
         gtk_menu_button_set_label (self, g_value_get_string (value));
         break;
+      case PROP_USE_UNDERLINE:
+        gtk_menu_button_set_use_underline (self, g_value_get_boolean (value));
+        break;
       case PROP_RELIEF:
         gtk_menu_button_set_relief (self, g_value_get_enum (value));
         break;
@@ -241,6 +246,9 @@ gtk_menu_button_get_property (GObject    *object,
       case PROP_LABEL:
         g_value_set_string (value, gtk_menu_button_get_label (GTK_MENU_BUTTON (object)));
         break;
+      case PROP_USE_UNDERLINE:
+        g_value_set_boolean (value, gtk_menu_button_get_use_underline (GTK_MENU_BUTTON (object)));
+        break;
       case PROP_RELIEF:
         g_value_set_enum (value, gtk_menu_button_get_relief (GTK_MENU_BUTTON (object)));
         break;
@@ -415,6 +423,13 @@ gtk_menu_button_class_init (GtkMenuButtonClass *klass)
                            NULL,
                            GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
 
+  menu_button_props[PROP_USE_UNDERLINE] =
+      g_param_spec_boolean ("use-underline",
+                            P_("Use underline"),
+                            P_("If set, an underline in the text indicates the next character should be used for the mnemonic accelerator key"),
+                           FALSE,
+                           GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
   menu_button_props[PROP_RELIEF] =
     g_param_spec_enum ("relief",
                        P_("Border relief"),
@@ -896,6 +911,8 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button,
   GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
   GtkWidget *child;
   GtkWidget *box;
+  GtkWidget *label_widget;
+  GtkWidget *image;
 
   g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
 
@@ -904,9 +921,17 @@ gtk_menu_button_set_label (GtkMenuButton *menu_button,
     gtk_container_remove (GTK_CONTAINER (priv->button), child);
 
   box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-  gtk_container_add (GTK_CONTAINER (box), gtk_label_new (label));
-  gtk_container_add (GTK_CONTAINER (box), gtk_image_new_from_icon_name ("pan-down-symbolic"));
+  label_widget = gtk_label_new (label);
+  g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
+  gtk_label_set_xalign (GTK_LABEL (label_widget), 0);
+  gtk_label_set_use_underline (GTK_LABEL (label_widget),
+                               gtk_button_get_use_underline (GTK_BUTTON (priv->button)));
+  gtk_widget_set_hexpand (label_widget, TRUE);
+  image = gtk_image_new_from_icon_name ("pan-down-symbolic");
+  gtk_container_add (GTK_CONTAINER (box), label_widget);
+  gtk_container_add (GTK_CONTAINER (box), image);
   gtk_container_add (GTK_CONTAINER (priv->button), box);
+  priv->label_widget = label_widget;
 
   g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_LABEL]);
 }
@@ -1067,3 +1092,31 @@ gtk_menu_button_set_create_popup_func (GtkMenuButton                *menu_button
 
   update_sensitivity (menu_button);
 }
+
+void
+gtk_menu_button_set_use_underline (GtkMenuButton *menu_button,
+                                   gboolean       use_underline)
+{
+  GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
+
+  g_return_if_fail (GTK_IS_MENU_BUTTON (menu_button));
+
+  if (gtk_button_get_use_underline (GTK_BUTTON (priv->button)) == use_underline)
+    return;
+
+  gtk_button_set_use_underline (GTK_BUTTON (priv->button), use_underline);
+  if (priv->label_widget)
+    gtk_label_set_use_underline (GTK_LABEL (priv->label_widget), use_underline);
+
+  g_object_notify_by_pspec (G_OBJECT (menu_button), menu_button_props[PROP_USE_UNDERLINE]);
+}
+
+gboolean
+gtk_menu_button_get_use_underline (GtkMenuButton *menu_button)
+{
+  GtkMenuButtonPrivate *priv = gtk_menu_button_get_instance_private (menu_button);
+
+  g_return_val_if_fail (GTK_IS_MENU_BUTTON (menu_button), FALSE);
+
+  return gtk_button_get_use_underline (GTK_BUTTON (priv->button));
+}
diff --git a/gtk/gtkmenubutton.h b/gtk/gtkmenubutton.h
index a7ff74d4a4..874a703520 100644
--- a/gtk/gtkmenubutton.h
+++ b/gtk/gtkmenubutton.h
@@ -89,6 +89,12 @@ void         gtk_menu_button_set_label (GtkMenuButton *menu_button,
 GDK_AVAILABLE_IN_ALL
 const char * gtk_menu_button_get_label (GtkMenuButton *menu_button);
 
+GDK_AVAILABLE_IN_ALL
+void         gtk_menu_button_set_use_underline (GtkMenuButton *menu_button,
+                                                gboolean       use_underline);
+GDK_AVAILABLE_IN_ALL
+gboolean     gtk_menu_button_get_use_underline (GtkMenuButton *menu_button);
+
 GDK_AVAILABLE_IN_ALL
 void           gtk_menu_button_set_relief   (GtkMenuButton  *menu_button,
                                              GtkReliefStyle  relief);