diff --git a/libegg/toolpalette/eggtoolitemgroup.c b/libegg/toolpalette/eggtoolitemgroup.c
index b22ba76..aa0c8c0 100644
--- a/libegg/toolpalette/eggtoolitemgroup.c
+++ b/libegg/toolpalette/eggtoolitemgroup.c
@@ -140,12 +140,48 @@ 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 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_ellipsize_mode = egg_tool_item_group_get_ellipsize_mode;
 }
 
 #endif /* GTK_TYPE_TOOL_SHELL */
@@ -487,7 +523,7 @@ egg_tool_item_group_real_size_allocate (GtkWidget      *widget,
         n_visible_items += 1;
     }
 
-  if (GTK_TOOLBAR_ICONS == style)
+  if (GTK_TOOLBAR_ICONS == style || GTK_TOOLBAR_BOTH == style)
     {
       guint n_columns, n_rows;
 
@@ -517,6 +553,19 @@ egg_tool_item_group_real_size_allocate (GtkWidget      *widget,
       item_area.width = item_size.width * n_columns;
       item_area.height = item_size.height * n_rows;
     }
+  else if (GTK_TOOLBAR_TEXT == style || GTK_TOOLBAR_BOTH_HORIZ == style)
+    {
+      if (GTK_ORIENTATION_VERTICAL == orientation)
+        {
+          item_area.width = item_size.width = allocation->width;
+          item_area.height = n_visible_items * item_size.height;
+        }
+      else
+        {
+          item_area.width = n_visible_items * item_size.width;
+          item_area.height = item_size.height = allocation->height;
+        }
+    }
   else
     {
       item_area.width = allocation->width;
@@ -572,18 +621,51 @@ egg_tool_item_group_real_size_allocate (GtkWidget      *widget,
               continue;
             }
 
-          if (child_allocation.x + item_size.width > item_area.x + item_area.width)
+          if (GTK_TOOLBAR_ICONS == style || GTK_TOOLBAR_BOTH == style)
             {
-              child_allocation.y += child_allocation.height;
-              child_allocation.x = item_area.x;
+              if (child_allocation.x + item_size.width > item_area.x + item_area.width)
+                {
+                  child_allocation.y += child_allocation.height;
+                  child_allocation.x = item_area.x;
+                }
+
+              if (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.height = item_size.height;
+            }
+          else if (GTK_TOOLBAR_TEXT == style || GTK_TOOLBAR_BOTH_HORIZ == style)
+            {
+              if (GTK_ORIENTATION_VERTICAL == orientation)
+                {
+                  child_allocation.x = item_area.x;
+                  child_allocation.y = item_area.y + i * item_size.height;
+                }
+              else
+                {
+                  child_allocation.x = item_area.x + i * item_size.width;
+                  child_allocation.y = item_area.y;
+                }
+              child_allocation.width = item_size.width;
+              child_allocation.height = item_size.height;
             }
-
-          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.height = item_size.height;
+            {
+              if (child_allocation.x + item_size.width > item_area.x + item_area.width)
+                {
+                  child_allocation.y += child_allocation.height;
+                  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.height = item_size.height;
+          }
 
           if (!inquery)
             {
@@ -1043,6 +1125,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);
     }
 }
 
