diff --git a/gtk/gtkseparatortoolitem.c b/gtk/gtkseparatortoolitem.c
index 2a35efe..35ada4c 100644
--- a/gtk/gtkseparatortoolitem.c
+++ b/gtk/gtkseparatortoolitem.c
@@ -27,6 +27,11 @@
 #include "gtkprivate.h"
 #include "gtkalias.h"
 
+#define DEFAULT_SPACE_SIZE  12
+#define DEFAULT_SPACE_STYLE GTK_TOOLBAR_SPACE_LINE
+#define SPACE_LINE_DIVISION 10.0
+#define SPACE_LINE_START    2.0
+#define SPACE_LINE_END      8.0
 
 /**
  * SECTION:gtkseparatortoolitem
@@ -59,7 +64,7 @@ static void     gtk_separator_tool_item_set_property      (GObject
 							   guint                      prop_id,
 							   const GValue              *value,
 							   GParamSpec                *pspec);
-static void     gtk_separator_tool_item_get_property       (GObject                   *object,
+static void     gtk_separator_tool_item_get_property      (GObject                   *object,
 							   guint                      prop_id,
 							   GValue                    *value,
 							   GParamSpec                *pspec);
@@ -70,6 +75,10 @@ static gboolean gtk_separator_tool_item_expose            (GtkWidget
 static void     gtk_separator_tool_item_add               (GtkContainer              *container,
 							   GtkWidget                 *child);
 static gint     get_space_size                            (GtkToolItem               *tool_item);
+static void     gtk_separator_tool_item_realize           (GtkWidget                 *widget);
+static void     gtk_separator_tool_item_unrealize         (GtkWidget                 *widget);
+static void     gtk_separator_tool_item_map               (GtkWidget                 *widget);
+static void     gtk_separator_tool_item_unmap             (GtkWidget                 *widget);
 
 
 
@@ -115,6 +124,11 @@ gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class)
   object_class->get_property = gtk_separator_tool_item_get_property;
   widget_class->size_request = gtk_separator_tool_item_size_request;
   widget_class->expose_event = gtk_separator_tool_item_expose;
+  widget_class->realize = gtk_separator_tool_item_realize;
+  widget_class->unrealize = gtk_separator_tool_item_unrealize;
+  widget_class->map = gtk_separator_tool_item_map;
+  widget_class->unmap = gtk_separator_tool_item_unmap;
+
   toolitem_class->create_menu_proxy = gtk_separator_tool_item_create_menu_proxy;
   
   container_class->add = gtk_separator_tool_item_add;
@@ -127,6 +141,7 @@ gtk_separator_tool_item_class_init (GtkSeparatorToolItemClass *class)
 							 TRUE,
 							 GTK_PARAM_READWRITE));
   
+
   g_type_class_add_private (object_class, sizeof (GtkSeparatorToolItemPrivate));
 }
 
@@ -135,6 +150,9 @@ gtk_separator_tool_item_init (GtkSeparatorToolItem      *separator_item)
 {
   separator_item->priv = GTK_SEPARATOR_TOOL_ITEM_GET_PRIVATE (separator_item);
   separator_item->priv->draw = TRUE;
+
+  gtk_widget_add_events (GTK_WIDGET (separator_item),
+	GDK_EXPOSURE_MASK);
 }
 
 static void
@@ -213,21 +231,125 @@ gtk_separator_tool_item_size_request (GtkWidget      *widget,
     }
 }
 
+static void
+gtk_separator_tool_item_realize (GtkWidget *widget)
+{
+  gtk_widget_set_realized (widget, TRUE);
+
+  GdkWindowAttr attributes = {
+	.title = NULL,
+	.event_mask = GDK_EXPOSURE_MASK,
+	.x = widget->allocation.x,
+	.y = widget->allocation.y,
+	.width = widget->allocation.width,
+	.height = widget->allocation.height,
+	.wclass = GDK_INPUT_OUTPUT,
+	.visual = gtk_widget_get_visual (widget),
+	.colormap = gtk_widget_get_colormap (widget),
+	.window_type = GDK_WINDOW_CHILD,
+	.cursor = NULL,
+	.override_redirect = FALSE
+  };
+
+  gint attributes_mask = GDK_WA_X | GDK_WA_Y;
+
+  widget->window = gdk_window_new(gtk_widget_get_parent_window(widget),
+			&attributes,
+			attributes_mask);
+
+  gdk_window_set_user_data (widget->window, widget);
+
+  widget->style = gtk_style_attach (widget->style, widget->window);
+  gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
+}
+
+
+static void
+gtk_separator_tool_item_unrealize (GtkWidget *widget)
+{
+ /* This will call gdk_window_destroy() on our widget->window member. */
+ GTK_WIDGET_CLASS (gtk_separator_tool_item_parent_class)->unrealize (widget);
+}
+
+static void
+gtk_separator_tool_item_map (GtkWidget *widget)
+{
+  GTK_WIDGET_CLASS (gtk_separator_tool_item_parent_class)->map (widget);
+  gdk_window_show(widget->window);
+}
+
+static void
+gtk_separator_tool_item_unmap (GtkWidget *widget)
+{
+  gdk_window_hide(widget->window);
+  GTK_WIDGET_CLASS (gtk_separator_tool_item_parent_class)->unmap (widget);
+}
+
+
 static gboolean
 gtk_separator_tool_item_expose (GtkWidget      *widget,
 				GdkEventExpose *event)
 {
-  GtkToolbar *toolbar = NULL;
   GtkSeparatorToolItemPrivate *priv =
       GTK_SEPARATOR_TOOL_ITEM_GET_PRIVATE (widget);
 
   if (priv->draw)
     {
-      if (GTK_IS_TOOLBAR (widget->parent))
-	toolbar = GTK_TOOLBAR (widget->parent);
-
-      _gtk_toolbar_paint_space_line (widget, toolbar,
-				     &(event->area), &widget->allocation);
+	const double start_fraction = (SPACE_LINE_START / SPACE_LINE_DIVISION);
+	const double end_fraction = (SPACE_LINE_END / SPACE_LINE_DIVISION);
+
+	GtkToolbar *toolbar = GTK_TOOLBAR(widget->parent);
+
+	GtkOrientation orientation =
+		toolbar != NULL ? toolbar->orientation : GTK_ORIENTATION_HORIZONTAL;
+
+	gboolean wide_separators;
+	gint separator_height, separator_width;
+
+	gtk_widget_style_get (widget,
+		"wide-separators", &wide_separators,
+		"separator-height", &separator_height,
+		"separator-width", &separator_width,
+		NULL);
+
+	if (wide_separators)
+	  {
+		
+		if (orientation == GTK_ORIENTATION_HORIZONTAL)
+			gtk_paint_box (widget->style, widget->window,
+				gtk_widget_get_state (widget), GTK_SHADOW_ETCHED_OUT,
+				&event->area, widget, "vseparator",
+				(widget->allocation.width - separator_width) / 2,
+				widget->allocation.height * start_fraction,
+				separator_width,
+				widget->allocation.height * (end_fraction - start_fraction));
+		else
+			gtk_paint_box (widget->style, widget->window,
+				gtk_widget_get_state (widget), GTK_SHADOW_ETCHED_OUT,
+				&event->area, widget, "hseparator",
+				widget->allocation.width * start_fraction,
+				(widget->allocation.height - separator_height) / 2,
+				widget->allocation.width * (end_fraction - start_fraction),
+				separator_height);
+	  }
+	else
+	  {
+		if (orientation == GTK_ORIENTATION_HORIZONTAL)
+			gtk_paint_vline (widget->style, widget->window,
+				gtk_widget_get_state (widget), &event->area, widget,
+				"toolbar",
+				widget->allocation.height * start_fraction,
+				widget->allocation.height * end_fraction,
+				(widget->allocation.width - widget->style->xthickness) / 2);
+		else
+			gtk_paint_hline (widget->style, widget->window,
+				gtk_widget_get_state (widget), &event->area, widget,
+				"toolbar",
+				widget->allocation.x + widget->allocation.width * start_fraction,
+				widget->allocation.x + widget->allocation.width * end_fraction,
+				widget->allocation.y + (widget->allocation.height - widget->style->ythickness) / 2);
+
+	  }
     }
   
   return FALSE;
