diff --git a/gtk/gtkaccellabel.c b/gtk/gtkaccellabel.c
index 452f43c..457d183 100644
--- a/gtk/gtkaccellabel.c
+++ b/gtk/gtkaccellabel.c
@@ -34,6 +34,7 @@
 #include "gtksizerequest.h"
 #include "gtkprivate.h"
 #include "gtkintl.h"
+#include "gtkaction.h"
 
 /**
  * SECTION:gtkaccellabel
@@ -554,7 +555,7 @@ check_accel_changed (GtkAccelGroup  *accel_group,
   if (accel_closure == accel_label->priv->accel_closure)
     gtk_accel_label_reset (accel_label);
 }
-
+#include "gtkactivatable.h"
 /**
  * gtk_accel_label_set_accel_closure:
  * @accel_label: a #GtkAccelLabel
@@ -567,9 +568,14 @@ void
 gtk_accel_label_set_accel_closure (GtkAccelLabel *accel_label,
 				   GClosure      *accel_closure)
 {
+  GtkAccelGroup *group = NULL;
+  
   g_return_if_fail (GTK_IS_ACCEL_LABEL (accel_label));
   if (accel_closure)
-    g_return_if_fail (gtk_accel_group_from_accel_closure (accel_closure) != NULL);
+	{
+	  if (!(group = g_object_get_data (G_OBJECT (accel_label), "accel_group")))
+		g_return_if_fail ((group = gtk_accel_group_from_accel_closure (accel_closure)) != NULL);
+	}
 
   if (accel_closure != accel_label->priv->accel_closure)
     {
@@ -585,7 +591,7 @@ gtk_accel_label_set_accel_closure (GtkAccelLabel *accel_label,
       if (accel_label->priv->accel_closure)
 	{
 	  g_closure_ref (accel_label->priv->accel_closure);
-	  accel_label->priv->accel_group = gtk_accel_group_from_accel_closure (accel_closure);
+	  accel_label->priv->accel_group = group;
 	  g_signal_connect_object (accel_label->priv->accel_group, "accel-changed",
 				   G_CALLBACK (check_accel_changed),
 				   accel_label, 0);
diff --git a/gtk/gtkaction.c b/gtk/gtkaction.c
index fe53362..a1f219e 100644
--- a/gtk/gtkaction.c
+++ b/gtk/gtkaction.c
@@ -1746,6 +1746,22 @@ gtk_action_set_accel_group (GtkAction     *action,
 }
 
 /**
+ * gtk_action_get_accel_group:
+ * @action: the action object
+ *
+ * Returns: the #GtkAccelGroup in which the accelerator for this action is installed.
+ *
+ * Since: 3.6
+ **/
+GtkAccelGroup *
+gtk_action_get_accel_group (GtkAction *action)
+{
+  g_return_if_fail (GTK_IS_ACTION (action));
+
+  return action->private_data->accel_group;
+}
+
+/**
  * gtk_action_connect_accelerator:
  * @action: a #GtkAction
  * 
diff --git a/gtk/gtkaction.h b/gtk/gtkaction.h
index 944fb29..c2feb4f 100644
--- a/gtk/gtkaction.h
+++ b/gtk/gtkaction.h
@@ -125,6 +125,7 @@ void         gtk_action_set_accel_path         (GtkAction     *action,
 						const gchar   *accel_path);
 void         gtk_action_set_accel_group        (GtkAction     *action,
 						GtkAccelGroup *accel_group);
+GtkAccelGroup *gtk_action_get_accel_group      (GtkAction     *action);
 void         _gtk_action_sync_menu_visible     (GtkAction     *action,
 						GtkWidget     *proxy,
 						gboolean       empty);
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index 5a916da..f5fa4ea 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -1150,6 +1150,8 @@ gtk_menu_item_sync_action_properties (GtkActivatable *activatable,
 
       if (GTK_IS_ACCEL_LABEL (label) && gtk_action_get_accel_path (action))
         {
+		  g_object_set_data (G_OBJECT (label), "accel_group", gtk_action_get_accel_group (action));
+		  
           gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), NULL);
           gtk_accel_label_set_accel_closure (GTK_ACCEL_LABEL (label),
                                              gtk_action_get_accel_closure (action));
