diff --git a/libegg/toolpalette/eggtoolitemgroup.c b/libegg/toolpalette/eggtoolitemgroup.c
index b22ba76..c1d8e72 100644
--- a/libegg/toolpalette/eggtoolitemgroup.c
+++ b/libegg/toolpalette/eggtoolitemgroup.c
@@ -140,12 +140,60 @@ egg_tool_item_group_get_icon_size (GtkToolShell *shell)
   return GTK_ICON_SIZE_SMALL_TOOLBAR;
 }
 
+static PangoEllipsizeMode
+egg_tool_item_group_get_ellipsize_mode (GtkToolShell *shell)
+{
+  return EGG_TOOL_ITEM_GROUP (shell)->priv->ellipsize;
+}
+
+static gfloat
+egg_tool_item_group_get_text_alignment (GtkToolShell *shell)
+{
+  if (GTK_TOOLBAR_TEXT == egg_tool_item_group_get_style (shell) ||
+      GTK_TOOLBAR_BOTH_HORIZ == egg_tool_item_group_get_style (shell))
+    return 0.0;
+
+  return 0.5;
+}
+
+static GtkOrientation
+egg_tool_item_group_get_text_orientation (GtkToolShell *shell)
+{
+  GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (shell));
+
+  if (EGG_IS_TOOL_PALETTE (parent))
+    {
+      GtkOrientation orientation = egg_tool_palette_get_orientation (EGG_TOOL_PALETTE (parent));
+      if (GTK_ORIENTATION_HORIZONTAL == orientation &&
+          (GTK_TOOLBAR_TEXT == egg_tool_item_group_get_style (shell)/* ||
+           GTK_TOOLBAR_BOTH_HORIZ == egg_tool_item_group_get_style (shell)*/))
+        return GTK_ORIENTATION_VERTICAL;
+    }
+
+  return GTK_ORIENTATION_HORIZONTAL;
+}
+
+static GtkSizeGroup *
+egg_tool_item_group_get_text_size_group (GtkToolShell *shell)
+{
+  GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (shell));
+
+  if (EGG_IS_TOOL_PALETTE (parent))
+    return _egg_tool_palette_get_size_group (EGG_TOOL_PALETTE (parent));
+
+  return NULL;
+}
+
 static void
 egg_tool_item_group_tool_shell_init (GtkToolShellIface *iface)
 {
   iface->get_icon_size = egg_tool_item_group_get_icon_size;
   iface->get_orientation = egg_tool_item_group_get_orientation;
   iface->get_style = egg_tool_item_group_get_style;
+  iface->get_text_alignment = egg_tool_item_group_get_text_alignment;
+  iface->get_text_orientation = egg_tool_item_group_get_text_orientation;
+  iface->get_text_size_group = egg_tool_item_group_get_text_size_group;
+  iface->get_ellipsize_mode = egg_tool_item_group_get_ellipsize_mode;
 }
 
 #endif /* GTK_TYPE_TOOL_SHELL */
@@ -487,42 +535,34 @@ egg_tool_item_group_real_size_allocate (GtkWidget      *widget,
         n_visible_items += 1;
     }
 
-  if (GTK_TOOLBAR_ICONS == style)
-    {
-      guint n_columns, n_rows;
-
-      if (GTK_ORIENTATION_VERTICAL == orientation)
-        {
-          item_area.width = allocation->width - 2 * border_width;
-          n_columns = MAX (item_area.width / item_size.width, 1);
-          n_rows = (n_visible_items + n_columns - 1) / n_columns;
-        }
-      else if (inquery)
-        {
-          item_area.height = allocation->height - 2 * border_width;
-          n_rows = MAX (item_area.height / item_size.height, 1);
-          n_columns = (n_visible_items + n_rows - 1) / n_rows;
-        }
-      else
-        {
-          item_area.width = allocation->width - 2 * border_width;
-
-          if (child_requistion.width > 0)
-            item_area.width -= child_requistion.width;
+  guint n_columns, n_rows;
 
-          n_columns = MAX (item_area.width / item_size.width, 1);
-          n_rows = (n_visible_items + n_columns - 1) / n_columns;
-        }
-
-      item_area.width = item_size.width * n_columns;
-      item_area.height = item_size.height * n_rows;
+  if (GTK_ORIENTATION_VERTICAL == orientation)
+    {
+      item_area.width = allocation->width - 2 * border_width;
+      n_columns = MAX (item_area.width / item_size.width, 1);
+      n_rows = (n_visible_items + n_columns - 1) / n_columns;
+    }
+  else if (inquery)
+    {
+      item_area.height = allocation->height - 2 * border_width;
+      n_rows = MAX (item_area.height / item_size.height, 1);
+      n_columns = (n_visible_items + n_rows - 1) / n_rows;
     }
   else
     {
-      item_area.width = allocation->width;
-      item_area.height = allocation->height;
+      item_area.width = allocation->width - 2 * border_width;
+
+      if (child_requistion.width > 0)
+        item_area.width -= child_requistion.width;
+
+      n_columns = MAX (item_area.width / item_size.width, 1);
+      n_rows = (n_visible_items + n_columns - 1) / n_columns;
     }
 
+  item_area.width = item_size.width * n_columns;
+  item_area.height = item_size.height * n_rows;
+
   /* place the header widget */
 
   child_allocation.x = border_width;
@@ -578,11 +618,7 @@ egg_tool_item_group_real_size_allocate (GtkWidget      *widget,
               child_allocation.x = item_area.x;
             }
 
-          if (style != GTK_TOOLBAR_ICONS || gtk_tool_item_get_expand (item))
-            child_allocation.width = item_area.x + item_area.width - child_allocation.x;
-          else
-            child_allocation.width = item_size.width;
-
+          child_allocation.width = item_size.width;
           child_allocation.height = item_size.height;
 
           if (!inquery)
@@ -1043,6 +1079,7 @@ egg_tool_item_group_set_ellipsize (EggToolItemGroup   *group,
       group->priv->ellipsize = ellipsize;
       egg_tool_item_group_header_adjust_style (group);
       g_object_notify (G_OBJECT (group), "ellipsize");
+      _egg_tool_item_group_palette_reconfigured (group);
     }
 }
 
@@ -1416,4 +1453,3 @@ _egg_tool_item_group_palette_reconfigured (EggToolItemGroup *group)
 
   egg_tool_item_group_header_adjust_style (group);
 }
-
diff --git a/libegg/toolpalette/eggtoolpalette.c b/libegg/toolpalette/eggtoolpalette.c
index 234ce0c..2d22755 100644
--- a/libegg/toolpalette/eggtoolpalette.c
+++ b/libegg/toolpalette/eggtoolpalette.c
@@ -77,6 +77,8 @@ struct _EggToolPalettePrivate
   GtkOrientation        orientation;
   GtkToolbarStyle       style;
 
+  GtkSizeGroup         *text_size_group;
+
   GtkWidget            *expanding_child;
 
   guint                 sparse_groups : 1;
@@ -116,6 +118,8 @@ egg_tool_palette_init (EggToolPalette *palette)
   palette->priv->icon_size = DEFAULT_ICON_SIZE;
   palette->priv->orientation = DEFAULT_ORIENTATION;
   palette->priv->style = DEFAULT_TOOLBAR_STYLE;
+
+  palette->priv->text_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
 }
 
 static void
@@ -229,6 +233,12 @@ egg_tool_palette_dispose (GObject *object)
         }
     }
 
+  if (palette->priv->text_size_group)
+    {
+      g_object_unref (palette->priv->text_size_group);
+      palette->priv->text_size_group = NULL;
+    }
+
   G_OBJECT_CLASS (egg_tool_palette_parent_class)->dispose (object);
 }
 
@@ -1295,3 +1305,11 @@ _egg_tool_palette_set_expanding_child (EggToolPalette   *palette,
 
   palette->priv->expanding_child = widget;
 }
+
+GtkSizeGroup *
+_egg_tool_palette_get_size_group (EggToolPalette *palette)
+{
+  g_return_val_if_fail (EGG_IS_TOOL_PALETTE (palette), NULL);
+
+  return palette->priv->text_size_group;
+}
diff --git a/libegg/toolpalette/eggtoolpaletteprivate.h b/libegg/toolpalette/eggtoolpaletteprivate.h
index 109a169..f620319 100644
--- a/libegg/toolpalette/eggtoolpaletteprivate.h
+++ b/libegg/toolpalette/eggtoolpaletteprivate.h
@@ -24,6 +24,7 @@
 
 #include "eggtoolpalette.h"
 #include "eggtoolitemgroup.h"
+#include <gtk/gtk.h>
 
 void _egg_tool_palette_get_item_size           (EggToolPalette   *palette,
                                                 GtkRequisition   *item_size);
@@ -31,6 +32,7 @@ void _egg_tool_palette_child_set_drag_source   (GtkWidget        *widget,
                                                 gpointer          data);
 void _egg_tool_palette_set_expanding_child     (EggToolPalette   *palette,
                                                 GtkWidget        *widget);
+GtkSizeGroup *_egg_tool_palette_get_size_group (EggToolPalette   *palette);
 
 void _egg_tool_item_group_palette_reconfigured (EggToolItemGroup *group);
 void _egg_tool_item_group_item_size_request    (EggToolItemGroup *group,
diff --git a/libegg/toolpalette/testtoolpalette.c b/libegg/toolpalette/testtoolpalette.c
index 32eef21..188c535 100644
--- a/libegg/toolpalette/testtoolpalette.c
+++ b/libegg/toolpalette/testtoolpalette.c
@@ -406,6 +406,7 @@ load_stock_items (EggToolPalette *palette)
 
       item = gtk_tool_button_new_from_stock (id);
       gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (item), id);
+      gtk_tool_item_set_is_important (GTK_TOOL_ITEM (item), TRUE);
       egg_tool_item_group_insert (EGG_TOOL_ITEM_GROUP (group), item, -1);
 
       if (!gtk_stock_lookup (id, &stock_item) || !stock_item.label)
@@ -478,13 +479,13 @@ palette_notify_orientation (GObject    *object,
     {
       case GTK_ORIENTATION_VERTICAL:
         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroller),
-                                        GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
+                                        GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
         gtk_paned_pack1 (GTK_PANED (hpaned), scroller, FALSE, FALSE);
         break;
 
       case GTK_ORIENTATION_HORIZONTAL:
         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroller),
-                                        GTK_POLICY_ALWAYS, GTK_POLICY_NEVER);
+                                        GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER);
         gtk_paned_pack1 (GTK_PANED (vpaned), scroller, FALSE, FALSE);
         break;
     }
