diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 780d04e..07b4943 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -1458,6 +1458,8 @@ gtk_expander_set_use_markup
 gtk_expander_get_use_markup
 gtk_expander_set_label_widget
 gtk_expander_get_label_widget
+gtk_expander_set_label_fill
+gtk_expander_get_label_fill
 <SUBSECTION Standard>
 GTK_TYPE_EXPANDER
 GTK_EXPANDER_CLASS
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index 167936d..ffaec67 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -1487,6 +1487,7 @@ gtk_event_box_set_visible_window
 #if IN_FILE(__GTK_EXPANDER_C__)
 gtk_expander_get_expanded
 gtk_expander_get_label
+gtk_expander_get_label_fill
 gtk_expander_get_label_widget
 gtk_expander_get_spacing
 gtk_expander_get_type G_GNUC_CONST
@@ -1496,6 +1497,7 @@ gtk_expander_new
 gtk_expander_new_with_mnemonic
 gtk_expander_set_expanded
 gtk_expander_set_label
+gtk_expander_set_label_fill
 gtk_expander_set_label_widget
 gtk_expander_set_spacing
 gtk_expander_set_use_markup
diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c
index b7a61f7..8aa5d9c 100644
--- a/gtk/gtkexpander.c
+++ b/gtk/gtkexpander.c
@@ -49,7 +49,8 @@ enum
   PROP_USE_UNDERLINE,
   PROP_USE_MARKUP,
   PROP_SPACING,
-  PROP_LABEL_WIDGET
+  PROP_LABEL_WIDGET,
+  PROP_LABEL_FILL
 };
 
 struct _GtkExpanderPrivate
@@ -67,6 +68,7 @@ struct _GtkExpanderPrivate
   guint             use_markup : 1; 
   guint             button_down : 1;
   guint             prelight : 1;
+  guint             label_fill : 1;
 };
 
 static void gtk_expander_set_property (GObject          *object,
@@ -231,6 +233,14 @@ gtk_expander_class_init (GtkExpanderClass *klass)
 							GTK_TYPE_WIDGET,
 							GTK_PARAM_READWRITE));
 
+  g_object_class_install_property (gobject_class,
+				   PROP_LABEL_FILL,
+				   g_param_spec_boolean ("label-fill",
+							 P_("Label fill"),
+							 P_("Whether the label widget should fill all available horizontal space"),
+							 FALSE,
+							 GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
   gtk_widget_class_install_style_property (widget_class,
 					   g_param_spec_int ("expander-size",
 							     P_("Expander Size"),
@@ -281,6 +291,7 @@ gtk_expander_init (GtkExpander *expander)
   priv->use_markup = FALSE;
   priv->button_down = FALSE;
   priv->prelight = FALSE;
+  priv->label_fill = FALSE;
   priv->expand_timer = 0;
 
   gtk_drag_dest_set (GTK_WIDGET (expander), 0, NULL, 0, 0);
@@ -335,6 +346,9 @@ gtk_expander_set_property (GObject      *object,
     case PROP_LABEL_WIDGET:
       gtk_expander_set_label_widget (expander, g_value_get_object (value));
       break;
+    case PROP_LABEL_FILL:
+      gtk_expander_set_label_fill (expander, g_value_get_boolean (value));
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -372,6 +386,9 @@ gtk_expander_get_property (GObject    *object,
 			  priv->label_widget ?
 			  G_OBJECT (priv->label_widget) : NULL);
       break;
+    case PROP_LABEL_FILL:
+      g_value_set_boolean (value, priv->label_fill);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -640,6 +657,9 @@ gtk_expander_size_allocate (GtkWidget     *widget,
 	label_allocation.x = (widget->allocation.x +
                               border_width + focus_width + focus_pad +
                               expander_size + 2 * expander_spacing);
+      else if (priv->label_fill)
+        label_allocation.x = (widget->allocation.x +
+                              border_width + focus_width + focus_pad);
       else
         label_allocation.x = (widget->allocation.x + widget->allocation.width -
                               (label_requisition.width +
@@ -648,10 +668,11 @@ gtk_expander_size_allocate (GtkWidget     *widget,
 
       label_allocation.y = widget->allocation.y + border_width + focus_width + focus_pad;
 
-      label_allocation.width = MIN (label_requisition.width,
-				    allocation->width - 2 * border_width -
-				    expander_size - 2 * expander_spacing -
-				    2 * focus_width - 2 * focus_pad);
+      label_allocation.width = allocation->width - 2 * border_width -
+			       expander_size - 2 * expander_spacing -
+			       2 * focus_width - 2 * focus_pad;
+      if (!priv->label_fill)
+	label_allocation.width = MIN (label_allocation.width, label_requisition.height);
       label_allocation.width = MAX (label_allocation.width, 1);
 
       label_allocation.height = MIN (label_requisition.height,
@@ -1744,5 +1765,59 @@ gtk_expander_get_label_widget (GtkExpander *expander)
   return expander->priv->label_widget;
 }
 
+/**
+ * gtk_expander_set_label_fill:
+ * @expander: a #GtkExpander
+ * @label_fill: %TRUE if the label should should fill all available horizontal
+ *              space
+ *
+ * Sets whether the label widget should fill all available horizontal space
+ * allocated to @expander.
+ *
+ * Since: 2.22
+ **/
+void
+gtk_expander_set_label_fill (GtkExpander *expander,
+			     gboolean label_fill)
+{
+  GtkExpanderPrivate *priv;
+
+  g_return_if_fail (GTK_IS_EXPANDER (expander));
+
+  priv = expander->priv;
+
+  label_fill = label_fill != FALSE;
+
+  if (priv->label_fill != label_fill)
+    {
+      priv->label_fill = label_fill;
+
+      if (priv->label_widget != NULL)
+	gtk_widget_queue_resize (GTK_WIDGET (expander));
+
+      g_object_notify (G_OBJECT (expander), "label-fill");
+    }
+}
+
+/**
+ * gtk_expander_get_label_fill:
+ * @expander: a #GtkExpander
+ *
+ * Returns whether the label widget will fill all available horizontal
+ * space allocated to @expander.
+ *
+ * Return value: %TRUE if the label widget will fill all available horizontal
+ *               space
+ *
+ * Since: 2.22
+ **/
+gboolean
+gtk_expander_get_label_fill (GtkExpander *expander)
+{
+  g_return_val_if_fail (GTK_IS_EXPANDER (expander), FALSE);
+
+  return expander->priv->label_fill;
+}
+
 #define __GTK_EXPANDER_C__
 #include "gtkaliasdef.c"
diff --git a/gtk/gtkexpander.h b/gtk/gtkexpander.h
index dc07a6c..6ed1e1a 100644
--- a/gtk/gtkexpander.h
+++ b/gtk/gtkexpander.h
@@ -89,6 +89,9 @@ gboolean              gtk_expander_get_use_markup    (GtkExpander *expander);
 void                  gtk_expander_set_label_widget  (GtkExpander *expander,
 						      GtkWidget   *label_widget);
 GtkWidget            *gtk_expander_get_label_widget  (GtkExpander *expander);
+void                  gtk_expander_set_label_fill    (GtkExpander *expander,
+						      gboolean     label_fill);
+gboolean              gtk_expander_get_label_fill    (GtkExpander *expander);
 
 G_END_DECLS
 
