diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 63e81b3..48ea0c9 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -58,6 +58,7 @@ enum {
   CANCEL,
   CYCLE_FOCUS,
   MOVE_SELECTED,
+  INSERT,
   LAST_SIGNAL
 };
 
@@ -242,6 +243,14 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass)
   klass->insert = gtk_menu_shell_real_insert;
   klass->move_selected = gtk_menu_shell_real_move_selected;
 
+  menu_shell_signals[INSERT] =
+    g_signal_new (I_("insert"),
+		  G_OBJECT_CLASS_TYPE (object_class),
+		  G_SIGNAL_RUN_FIRST,
+		  G_STRUCT_OFFSET (GtkMenuShellClass, insert),
+		  NULL, NULL,
+		  _gtk_marshal_VOID__POINTER_INT,
+		  G_TYPE_NONE, 2, GTK_TYPE_WIDGET, G_TYPE_INT);
   menu_shell_signals[DEACTIVATE] =
     g_signal_new (I_("deactivate"),
 		  G_OBJECT_CLASS_TYPE (object_class),
@@ -478,8 +487,9 @@ gtk_menu_shell_insert (GtkMenuShell *menu_shell,
 
   class = GTK_MENU_SHELL_GET_CLASS (menu_shell);
 
-  if (class->insert)
-    class->insert (menu_shell, child, position);
+/*  if (class->insert)
+    class->insert (menu_shell, child, position);*/
+  g_signal_emit(menu_shell, menu_shell_signals[INSERT], 0, child, position);
 }
 
 static void
