15032b756bea3f908db121bef17644323fe69daa
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt
index bdf2fb4..d0d8402 100644
--- a/docs/reference/gtk/gtk3-sections.txt
+++ b/docs/reference/gtk/gtk3-sections.txt
@@ -2396,6 +2396,7 @@ GtkRadioAction
 gtk_radio_action_new
 gtk_radio_action_get_group
 gtk_radio_action_set_group
+gtk_radio_action_join_group
 gtk_radio_action_get_current_value
 gtk_radio_action_set_current_value
 <SUBSECTION Standard>
diff --git a/docs/reference/gtk/tmpl/gtkradioaction.sgml b/docs/reference/gtk/tmpl/gtkradioaction.sgml
index c3ccf4e..1d0eeab 100644
--- a/docs/reference/gtk/tmpl/gtkradioaction.sgml
+++ b/docs/reference/gtk/tmpl/gtkradioaction.sgml
@@ -83,6 +83,15 @@ only private members and should not be accessed directly.
 @group: 
 
 
+<!-- ##### FUNCTION gtk_radio_action_join_group ##### -->
+<para>
+
+</para>
+
+@action: 
+@group_source: 
+
+
 <!-- ##### FUNCTION gtk_radio_action_get_current_value ##### -->
 <para>
 
diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
index c831414..ff436ba 100644
--- a/gtk/gtk.symbols
+++ b/gtk/gtk.symbols
@@ -2702,6 +2702,7 @@ gtk_radio_action_get_type G_GNUC_CONST
 gtk_radio_action_new
 gtk_radio_action_set_current_value
 gtk_radio_action_set_group
+gtk_radio_action_join_group
 #endif
 #endif
 
diff --git a/gtk/gtkradioaction.c b/gtk/gtkradioaction.c
index e76ff76..8b8705b 100644
--- a/gtk/gtkradioaction.c
+++ b/gtk/gtkradioaction.c
@@ -457,6 +457,59 @@ gtk_radio_action_set_group (GtkRadioAction *action,
 }
 
 /**
+ * gtk_radio_action_join_group:
+ * @action: the action object
+ * @group_source: (allow-none): a radio action object whos group we are joining
+ *
+ * Joins a radio action object to the group of another radio action object.
+ *
+ * Use this in GI scripting languages instead of the get_group and set_group method
+ *
+ * A common way to set up a group of radio group is the following:
+ * |[
+ *   GtkRadioAction *action;
+ *   GtkRadioAction *last_action;
+ *  
+ *   while (/&ast; more actions to add &ast;/)
+ *     {
+ *        action = gtk_radio_action_new (...);
+ *        
+ *        gtk_radio_action_join_group (action, last_action);
+ *        last_action = action;
+ *     }
+ * ]|
+ * 
+ * Since: 3.0
+ */
+void
+gtk_radio_action_join_group (GtkRadioAction *action, 
+			     GtkRadioAction *group_source)
+{
+  g_return_if_fail (GTK_IS_RADIO_ACTION (action));
+  g_return_if_fail (group_source == NULL || GTK_IS_RADIO_ACTION (group_source));  
+
+  if (group_source)
+    {
+      GSList *group;
+      group = gtk_radio_action_get_group (group_source);
+      
+      if (!group)
+        {
+          // if we are not already part of a group we need to set up a new one and then
+          // get the newly created group  
+          gtk_radio_action_set_group (group_source, NULL);
+          group = gtk_radio_action_get_group (group_source);
+        }
+
+      gtk_radio_action_set_group (action, group);
+    }
+  else
+    {
+      gtk_radio_action_set_group (action, NULL);
+    }
+}
+
+/**
  * gtk_radio_action_get_current_value:
  * @action: a #GtkRadioAction
  * 
diff --git a/gtk/gtkradioaction.h b/gtk/gtkradioaction.h
index d4a9712..e0f5df1 100644
--- a/gtk/gtkradioaction.h
+++ b/gtk/gtkradioaction.h
@@ -81,6 +81,8 @@ GtkRadioAction *gtk_radio_action_new               (const gchar           *name,
 GSList         *gtk_radio_action_get_group         (GtkRadioAction        *action);
 void            gtk_radio_action_set_group         (GtkRadioAction        *action,
                                                     GSList                *group);
+void            gtk_radio_action_join_group        (GtkRadioAction        *action,
+                                                    GtkRadioAction        *group_source);
 gint            gtk_radio_action_get_current_value (GtkRadioAction        *action);
 void            gtk_radio_action_set_current_value (GtkRadioAction        *action,
                                                     gint                   current_value);
