# HG changeset patch
# Node ID b20e79e7d6f5
# Parent  6dbe216fad28
diff --git a/ChangeLog.API b/ChangeLog.API
--- a/ChangeLog.API
+++ b/ChangeLog.API
@@ -235,6 +235,9 @@ version 3.0.0 (??/??/????):
 		  details.
 		* PurpleRequestField is now a GObject. Please see the documentation
 		  for details.
+		* PurpleRequestFieldGroup is now a GObject, and renamed to
+		  PurpleRequestGroup. Please see the documentation for
+		  details.
 		* purple_request_field_get_field_type_hint renamed to
 		  purple_request_field_get_type_hint
 		* purple_request_field_group_get_tab
@@ -708,12 +711,15 @@ version 3.0.0 (??/??/????):
 		* purple_request_certificate
 		* purple_request_field_choice_set_data_destructor. Use
 		  purple_request_field_choice_add_full instead
+		* purple_request_field_destroy. Use g_object_unref instead.
 		* purple_request_field_list_add
 		* purple_request_field_list_get_icons
 		* PurpleRequestFieldSensitivityCb
 		* purple_request_field_set_sensitivity_cb
 		* purple_request_field_get_ui_data
 		* purple_request_field_set_ui_data
+		* purple_request_field_group_destroy. Use g_object_unref
+		  instead.
 		* purple_request_fields_get_autosensitive
 		* PurpleRoomlistRoomType
 		* purple_roomlist_expand_category
diff --git a/finch/gntblist.c b/finch/gntblist.c
--- a/finch/gntblist.c
+++ b/finch/gntblist.c
@@ -583,29 +583,29 @@ finch_request_add_buddy(G_GNUC_UNUSED Pu
                         const char *grp, const char *alias)
 {
 	PurpleRequestFields *fields = purple_request_fields_new();
-	PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL);
+	PurpleRequestGroup *group = purple_request_group_new(NULL);
 	PurpleRequestField *field;
 
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("screenname", _("Username"), username, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("alias", _("Alias (optional)"), alias, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("invite", _("Invite message (optional)"), NULL, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("group", _("Add in group"), grp, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	purple_request_field_set_type_hint(field, "group");
 
 	field = purple_request_field_account_new("account", _("Account"), NULL);
 	purple_request_field_account_set_show_all(field, FALSE);
 	if (account)
 		purple_request_field_account_set_value(field, account);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."),
 			fields,
@@ -685,7 +685,7 @@ finch_request_add_chat(G_GNUC_UNUSED Pur
                        const char *alias, const char *name)
 {
 	PurpleRequestFields *fields = purple_request_fields_new();
-	PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL);
+	PurpleRequestGroup *group = purple_request_group_new(NULL);
 	PurpleRequestField *field;
 
 	purple_request_fields_add_group(fields, group);
@@ -694,20 +694,20 @@ finch_request_add_chat(G_GNUC_UNUSED Pur
 	purple_request_field_account_set_show_all(field, FALSE);
 	if (account)
 		purple_request_field_account_set_value(field, account);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("name", _("Name"), name, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("alias", _("Alias"), alias, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("group", _("Group"), grp ? purple_group_get_name(grp) : NULL, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	purple_request_field_set_type_hint(field, "group");
 
 	field = purple_request_field_bool_new("autojoin", _("Auto-join"), FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(NULL, _("Add Chat"), NULL,
 			_("You can edit more information from the context menu later."),
@@ -985,7 +985,7 @@ chat_components_edit_ok(PurpleChat *chat
 	GList *groups, *fields;
 
 	for (groups = purple_request_fields_get_groups(allfields); groups; groups = groups->next) {
-		fields = purple_request_field_group_get_fields(groups->data);
+		fields = purple_request_group_get_fields(groups->data);
 		for (; fields; fields = fields->next) {
 			PurpleRequestField *field = fields->data;
 			const char *id;
@@ -1010,7 +1010,7 @@ static void
 chat_components_edit(G_GNUC_UNUSED PurpleBlistNode *selected, PurpleChat *chat)
 {
 	PurpleRequestFields *fields = purple_request_fields_new();
-	PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL);
+	PurpleRequestGroup *group = purple_request_group_new(NULL);
 	PurpleRequestField *field;
 	GList *parts, *iter;
 	PurpleProtocol *protocol;
@@ -1041,7 +1041,7 @@ chat_components_edit(G_GNUC_UNUSED Purpl
 		if (pce->required)
 			purple_request_field_set_required(field, TRUE);
 
-		purple_request_field_group_add_field(group, field);
+		purple_request_group_add_field(group, field);
 		g_free(pce);
 	}
 
@@ -2535,18 +2535,18 @@ static void
 send_im_select(G_GNUC_UNUSED GntMenuItem *item, G_GNUC_UNUSED gpointer n)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	fields = purple_request_fields_new();
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("screenname", _("Name"), NULL, FALSE);
 	purple_request_field_set_type_hint(field, "screenname");
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_account_new("account", _("Account"), NULL);
 	purple_request_field_set_type_hint(field, "account");
@@ -2554,7 +2554,7 @@ send_im_select(G_GNUC_UNUSED GntMenuItem
 		(purple_connections_get_all() != NULL &&
 		 purple_connections_get_all()->next != NULL));
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(
 	        purple_blist_get_default(), _("New Instant Message"), NULL,
@@ -2611,17 +2611,17 @@ static void
 join_chat_select(G_GNUC_UNUSED GntMenuItem *item, G_GNUC_UNUSED gpointer n)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	fields = purple_request_fields_new();
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("chat", _("Channel"), NULL, FALSE);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_account_new("account", _("Account"), NULL);
 	purple_request_field_set_type_hint(field, "account");
@@ -2629,7 +2629,7 @@ join_chat_select(G_GNUC_UNUSED GntMenuIt
 		(purple_connections_get_all() != NULL &&
 		 purple_connections_get_all()->next != NULL));
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(
 	        purple_blist_get_default(), _("Join a Chat"), NULL,
diff --git a/finch/gntplugin.c b/finch/gntplugin.c
--- a/finch/gntplugin.c
+++ b/finch/gntplugin.c
@@ -535,7 +535,7 @@ process_pref_frame(PurplePluginPrefFrame
 {
 	PurpleRequestField *field;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group = NULL;
+	PurpleRequestGroup *group = NULL;
 	GList *prefs;
 	GList *stringlist = NULL;
 	GntWidget *ret = NULL;
@@ -553,9 +553,9 @@ process_pref_frame(PurplePluginPrefFrame
 
 			if(purple_plugin_pref_get_pref_type(pref) == PURPLE_PLUGIN_PREF_INFO) {
 				field = purple_request_field_label_new("*", purple_plugin_pref_get_label(pref));
-				purple_request_field_group_add_field(group, field);
+				purple_request_group_add_field(group, field);
 			} else {
-				group = purple_request_field_group_new(label);
+				group = purple_request_group_new(label);
 				purple_request_fields_add_group(fields, group);
 			}
 			continue;
@@ -623,10 +623,10 @@ process_pref_frame(PurplePluginPrefFrame
 
 		if (field) {
 			if (group == NULL) {
-				group = purple_request_field_group_new(_("Preferences"));
+				group = purple_request_group_new(_("Preferences"));
 				purple_request_fields_add_group(fields, group);
 			}
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 		}
 	}
 
diff --git a/finch/gntprefs.c b/finch/gntprefs.c
--- a/finch/gntprefs.c
+++ b/finch/gntprefs.c
@@ -240,16 +240,16 @@ static void
 add_pref_group(PurpleRequestFields *fields, const char *title, Prefs *prefs)
 {
 	PurpleRequestField *field;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	int i;
 
-	group = purple_request_field_group_new(title);
+	group = purple_request_group_new(title);
 	purple_request_fields_add_group(fields, group);
 	for (i = 0; prefs[i].pref; i++)
 	{
 		field = get_pref_field(prefs + i);
 		if (field)
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 	}
 }
 
diff --git a/finch/gntrequest.c b/finch/gntrequest.c
--- a/finch/gntrequest.c
+++ b/finch/gntrequest.c
@@ -292,8 +292,8 @@ request_fields_cb(GntWidget *button, Pur
 	 * here, although it can be done. */
 	for (list = purple_request_fields_get_groups(fields); list; list = list->next)
 	{
-		PurpleRequestFieldGroup *group = list->data;
-		GList *fields = purple_request_field_group_get_fields(group);
+		PurpleRequestGroup *group = list->data;
+		GList *fields = purple_request_group_get_fields(group);
 
 		for (; fields ; fields = fields->next)
 		{
@@ -625,10 +625,10 @@ finch_request_fields(const char *title, 
 	gnt_box_set_fill(GNT_BOX(box), TRUE);
 	for (grlist = purple_request_fields_get_groups(allfields); grlist; grlist = grlist->next)
 	{
-		PurpleRequestFieldGroup *group = grlist->data;
-		GList *fields = purple_request_field_group_get_fields(group);
+		PurpleRequestGroup *group = grlist->data;
+		GList *fields = purple_request_group_get_fields(group);
 		GntWidget *hbox;
-		const char *title = purple_request_field_group_get_title(group);
+		const char *title = purple_request_group_get_title(group);
 
 		if (title)
 			gnt_box_add_widget(GNT_BOX(box),
@@ -861,8 +861,8 @@ finch_request_save_in_prefs(G_GNUC_UNUSE
 {
 	GList *list;
 	for (list = purple_request_fields_get_groups(allfields); list; list = list->next) {
-		PurpleRequestFieldGroup *group = list->data;
-		GList *fields = purple_request_field_group_get_fields(group);
+		PurpleRequestGroup *group = list->data;
+		GList *fields = purple_request_group_get_fields(group);
 
 		for (; fields ; fields = fields->next) {
 			PurpleRequestField *field = fields->data;
diff --git a/libpurple/account.c b/libpurple/account.c
--- a/libpurple/account.c
+++ b/libpurple/account.c
@@ -1063,7 +1063,7 @@ purple_account_request_password(PurpleAc
 {
 	gchar *primary;
 	const gchar *username;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 	PurpleRequestFields *fields;
 
@@ -1075,16 +1075,16 @@ purple_account_request_password(PurpleAc
 								  purple_account_get_protocol_name(account));
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("password", _("Enter Password"), NULL, FALSE);
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_bool_new("remember", _("Save password"), FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(account, NULL, primary, NULL, fields, _("OK"),
 		ok_cb, _("Cancel"), cancel_cb,
@@ -1096,7 +1096,7 @@ void
 purple_account_request_change_password(PurpleAccount *account)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 	PurpleConnection *gc;
 	PurpleProtocol *protocol = NULL;
@@ -1111,7 +1111,7 @@ purple_account_request_change_password(P
 
 	fields = purple_request_fields_new();
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("password", _("Original password"),
@@ -1119,7 +1119,7 @@ purple_account_request_change_password(P
 	purple_request_field_string_set_masked(field, TRUE);
 	if (!protocol || !(purple_protocol_get_options(protocol) & OPT_PROTO_PASSWORD_OPTIONAL))
 		purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("new_password_1",
 										  _("New password"),
@@ -1127,7 +1127,7 @@ purple_account_request_change_password(P
 	purple_request_field_string_set_masked(field, TRUE);
 	if (!protocol || !(purple_protocol_get_options(protocol) & OPT_PROTO_PASSWORD_OPTIONAL))
 		purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("new_password_2",
 										  _("New password (again)"),
@@ -1135,7 +1135,7 @@ purple_account_request_change_password(P
 	purple_request_field_string_set_masked(field, TRUE);
 	if (!protocol || !(purple_protocol_get_options(protocol) & OPT_PROTO_PASSWORD_OPTIONAL))
 		purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	g_snprintf(primary, sizeof(primary), _("Change password for %s"),
 			   purple_contact_info_get_username(PURPLE_CONTACT_INFO(account)));
diff --git a/libpurple/plugins/idle/idle.c b/libpurple/plugins/idle/idle.c
--- a/libpurple/plugins/idle/idle.c
+++ b/libpurple/plugins/idle/idle.c
@@ -159,18 +159,18 @@ purple_idle_set_account_idle_time(G_GNUC
 	/* Use the super fancy request API */
 
 	PurpleRequestFields *request;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 
 	field = purple_request_field_account_new("acct", _("Account"), NULL);
 	purple_request_field_account_set_filter(field, idleable_filter);
 	purple_request_field_account_set_show_all(field, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_int_new("mins", _("Minutes"), 10, 0, 9999);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
@@ -191,7 +191,7 @@ purple_idle_unset_account_idle_time(G_GN
                                     gpointer data)
 {
 	PurpleRequestFields *request;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	if (idled_accts == NULL)
@@ -200,12 +200,12 @@ purple_idle_unset_account_idle_time(G_GN
 		return;
 	}
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 
 	field = purple_request_field_account_new("acct", _("Account"), NULL);
 	purple_request_field_account_set_filter(field, unidle_filter);
 	purple_request_field_account_set_show_all(field, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
@@ -226,13 +226,13 @@ purple_idle_set_all_accounts_idle_time(G
                                        gpointer data)
 {
 	PurpleRequestFields *request;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 
 	field = purple_request_field_int_new("mins", _("Minutes"), 10, 0, 9999);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	request = purple_request_fields_new();
 	purple_request_fields_add_group(request, group);
diff --git a/libpurple/protocols/demo/purpledemoprotocolactions.c b/libpurple/protocols/demo/purpledemoprotocolactions.c
--- a/libpurple/protocols/demo/purpledemoprotocolactions.c
+++ b/libpurple/protocols/demo/purpledemoprotocolactions.c
@@ -453,7 +453,7 @@ purple_demo_protocol_request_fields_acti
 	PurpleAccountManager *manager = NULL;
 	PurpleAccount *account = NULL;
 	PurpleRequestFields *fields = NULL;
-	PurpleRequestFieldGroup *group = NULL;
+	PurpleRequestGroup *group = NULL;
 	PurpleRequestField *field = NULL;
 	GBytes *icon = NULL;
 	gconstpointer icon_data = NULL;
@@ -473,64 +473,64 @@ purple_demo_protocol_request_fields_acti
 	fields = purple_request_fields_new();
 
 	/* This group will contain basic fields. */
-	group = purple_request_field_group_new(_("Basic"));
+	group = purple_request_group_new(_("Basic"));
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_label_new("basic-label",
 	                                       _("This group contains basic fields"));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("string", _("A string"),
 	                                        _("default"), FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_string_new("multiline-string",
 	                                        _("A multiline string"),
 	                                        _("default"), TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_string_new("masked-string",
 	                                        _("A masked string"), _("default"),
 	                                        FALSE);
 	purple_request_field_string_set_masked(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_string_new("alphanumeric",
 	                                        _("An alphanumeric string"),
 	                                        _("default"), FALSE);
 	purple_request_field_set_validator(field,
 	                                   purple_request_field_alphanumeric_validator,
 	                                   NULL);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_string_new("email", _("An email"),
 	                                        _("me@example.com"), FALSE);
 	purple_request_field_set_validator(field,
 	                                   purple_request_field_email_validator,
 	                                   NULL);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_int_new("int", _("An integer"), 123, -42, 1337);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	field = purple_request_field_bool_new("bool", _("A boolean"), FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	/* This group will contain fields with multiple options. */
-	group = purple_request_field_group_new(_("Multiple"));
+	group = purple_request_group_new(_("Multiple"));
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_label_new("multiple-label",
 	                                       _("This group contains fields with multiple options"));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_choice_new("choice", _("A choice"), "foo");
 	purple_request_field_choice_add(field, _("foo"), "foo");
 	purple_request_field_choice_add(field, _("bar"), "bar");
 	purple_request_field_choice_add(field, _("baz"), "baz");
 	purple_request_field_choice_add(field, _("quux"), "quux");
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_list_new("list", _("A list"));
 	purple_request_field_list_add_icon(field, _("foo"), NULL, "foo");
 	purple_request_field_list_add_icon(field, _("bar"), NULL, "bar");
 	purple_request_field_list_add_icon(field, _("baz"), NULL, "baz");
 	purple_request_field_list_add_icon(field, _("quux"), NULL, "quux");
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_list_new("multilist", _("A multi-select list"));
 	purple_request_field_list_set_multi_select(field, TRUE);
@@ -538,15 +538,15 @@ purple_demo_protocol_request_fields_acti
 	purple_request_field_list_add_icon(field, _("bar"), NULL, "bar");
 	purple_request_field_list_add_icon(field, _("baz"), NULL, "baz");
 	purple_request_field_list_add_icon(field, _("quux"), NULL, "quux");
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	/* This group will contain specialized fields. */
-	group = purple_request_field_group_new(_("Special"));
+	group = purple_request_group_new(_("Special"));
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_label_new("special-label",
 	                                       _("This group contains specialized fields"));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	icon = g_resource_lookup_data(purple_demo_get_resource(),
 	                              "/im/pidgin/purple/demo/icons/scalable/apps/im-purple-demo.svg",
@@ -554,12 +554,12 @@ purple_demo_protocol_request_fields_acti
 	icon_data = g_bytes_get_data(icon, &icon_len);
 	field = purple_request_field_image_new("image", _("An image"),
 	                                       icon_data, icon_len);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	g_bytes_unref(icon);
 
 	field = purple_request_field_account_new("account", _("An account"),
 	                                         account);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(connection, _("Request Fields Demo"),
 	                      _("Please fill out these fields…"), NULL, fields,
diff --git a/libpurple/protocols/facebook/util.c b/libpurple/protocols/facebook/util.c
--- a/libpurple/protocols/facebook/util.c
+++ b/libpurple/protocols/facebook/util.c
@@ -381,7 +381,7 @@ fb_util_request_buddy(PurpleConnection *
 	PurpleAccount *acct;
 	PurpleRequestCommonParameters *cpar;
 	PurpleRequestField *field;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestFields *fields;
 
 	request_data = g_new0(gpointer, 3);
@@ -394,13 +394,13 @@ fb_util_request_buddy(PurpleConnection *
 	buddies = g_slist_sort(buddies, fb_buddy_cmp);
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_list_new("buddy", NULL);
 	purple_request_field_list_set_multi_select(field, multi);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	for (l = buddies; l != NULL; l = l->next) {
 		name = purple_buddy_get_name(l->data);
diff --git a/libpurple/protocols/gg/account.c b/libpurple/protocols/gg/account.c
--- a/libpurple/protocols/gg/account.c
+++ b/libpurple/protocols/gg/account.c
@@ -178,7 +178,7 @@ static void ggp_account_register_dialog(
 	ggp_account_token *token, gpointer _register_data)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *main_group, *password_group, *token_group;
+	PurpleRequestGroup *main_group, *password_group, *token_group;
 	PurpleRequestField *field, *field_password;
 	ggp_account_register_data *register_data = _register_data;
 
@@ -190,7 +190,7 @@ static void ggp_account_register_dialog(
 	}
 
 	fields = purple_request_fields_new();
-	main_group = purple_request_field_group_new(NULL);
+	main_group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, main_group);
 
 	field = purple_request_field_string_new("email", _("Email"),
@@ -198,9 +198,9 @@ static void ggp_account_register_dialog(
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_validator(field,
 		purple_request_field_email_validator, NULL);
-	purple_request_field_group_add_field(main_group, field);
+	purple_request_group_add_field(main_group, field);
 
-	password_group = purple_request_field_group_new(_("Password"));
+	password_group = purple_request_group_new(_("Password"));
 	purple_request_fields_add_group(fields, password_group);
 
 	field = purple_request_field_string_new("password1", _("Password"),
@@ -208,7 +208,7 @@ static void ggp_account_register_dialog(
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_password, NULL);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 	field_password = field;
 
 	field = purple_request_field_string_new("password2",
@@ -217,13 +217,13 @@ static void ggp_account_register_dialog(
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_password_equal,
 		field_password);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 
 	field = purple_request_field_bool_new("password_remember",
 		_("Remember password"), register_data->password_remember);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 
-	token_group = purple_request_field_group_new(_("CAPTCHA"));
+	token_group = purple_request_group_new(_("CAPTCHA"));
 	purple_request_fields_add_group(fields, token_group);
 
 	field = purple_request_field_string_new("token_value",
@@ -231,12 +231,12 @@ static void ggp_account_register_dialog(
 		FALSE);
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_token, token);
-	purple_request_field_group_add_field(token_group, field);
+	purple_request_group_add_field(token_group, field);
 	purple_debug_info("gg", "token set %p\n", register_data->token);
 
 	field = purple_request_field_image_new("token_image", _("CAPTCHA"),
 		token->data, token->size);
-	purple_request_field_group_add_field(token_group, field);
+	purple_request_group_add_field(token_group, field);
 
 	register_data->token = token;
 
@@ -419,7 +419,7 @@ static void ggp_account_chpass_dialog(Pu
 	PurpleAccount *account = purple_connection_get_account(chpass_data->gc);
 	PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *main_group, *password_group, *token_group;
+	PurpleRequestGroup *main_group, *password_group, *token_group;
 	PurpleRequestField *field, *field_password;
 	gchar *primary;
 
@@ -431,7 +431,7 @@ static void ggp_account_chpass_dialog(Pu
 	}
 
 	fields = purple_request_fields_new();
-	main_group = purple_request_field_group_new(NULL);
+	main_group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, main_group);
 
 	field = purple_request_field_string_new("email",
@@ -439,23 +439,23 @@ static void ggp_account_chpass_dialog(Pu
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_validator(field,
 		purple_request_field_email_validator, NULL);
-	purple_request_field_group_add_field(main_group, field);
+	purple_request_group_add_field(main_group, field);
 
-	password_group = purple_request_field_group_new(_("Password"));
+	password_group = purple_request_group_new(_("Password"));
 	purple_request_fields_add_group(fields, password_group);
 
 	field = purple_request_field_string_new("password_current",
 		_("Current password"), chpass_data->password_current, FALSE);
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_string_set_masked(field, TRUE);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 
 	field = purple_request_field_string_new("password_new1",
 		_("Password"), chpass_data->password_new, FALSE);
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_password, NULL);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 	field_password = field;
 
 	field = purple_request_field_string_new("password_new2",
@@ -464,9 +464,9 @@ static void ggp_account_chpass_dialog(Pu
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_password_equal,
 		field_password);
-	purple_request_field_group_add_field(password_group, field);
+	purple_request_group_add_field(password_group, field);
 
-	token_group = purple_request_field_group_new(_("CAPTCHA"));
+	token_group = purple_request_group_new(_("CAPTCHA"));
 	purple_request_fields_add_group(fields, token_group);
 
 	field = purple_request_field_string_new("token_value",
@@ -474,11 +474,11 @@ static void ggp_account_chpass_dialog(Pu
 		FALSE);
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_validator(field, ggp_validator_token, token);
-	purple_request_field_group_add_field(token_group, field);
+	purple_request_group_add_field(token_group, field);
 
 	field = purple_request_field_image_new("token_image", _("CAPTCHA"),
 		token->data, token->size);
-	purple_request_field_group_add_field(token_group, field);
+	purple_request_group_add_field(token_group, field);
 
 	chpass_data->token = token;
 
diff --git a/libpurple/protocols/gg/multilogon.c b/libpurple/protocols/gg/multilogon.c
--- a/libpurple/protocols/gg/multilogon.c
+++ b/libpurple/protocols/gg/multilogon.c
@@ -218,7 +218,7 @@ ggp_multilogon_dialog(PurpleConnection *
 	ggp_multilogon_session_data *mldata = ggp_multilogon_get_mldata(gc);
 	PurpleRequestField *field;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestCommonParameters *cpar;
 	PurpleRequestDatasheet *sheet;
 	PurpleRequestDatasheetAction *action;
@@ -228,7 +228,7 @@ ggp_multilogon_dialog(PurpleConnection *
 		return;
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	sheet = purple_request_datasheet_new();
@@ -247,7 +247,7 @@ ggp_multilogon_dialog(PurpleConnection *
 	ggp_multilogon_fill_sessions(sheet, gc);
 
 	field = purple_request_field_datasheet_new("sessions", NULL, sheet);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	cpar = purple_request_cpar_new();
 	purple_request_cpar_set_icon(cpar, PURPLE_REQUEST_ICON_DIALOG);
diff --git a/libpurple/protocols/gg/pubdir-prpl.c b/libpurple/protocols/gg/pubdir-prpl.c
--- a/libpurple/protocols/gg/pubdir-prpl.c
+++ b/libpurple/protocols/gg/pubdir-prpl.c
@@ -748,22 +748,22 @@ void
 ggp_pubdir_search(PurpleConnection *gc, const ggp_pubdir_search_form *form)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	purple_debug_info("gg", "ggp_pubdir_search");
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("name", _("Name"),
 	                                        form ? form->nick : NULL, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("city", _("City"),
 	                                        form ? form->city : NULL, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_choice_new(
 	        "gender", _("Gender"), form ? GINT_TO_POINTER(form->gender) : NULL);
@@ -772,7 +772,7 @@ ggp_pubdir_search(PurpleConnection *gc, 
 		GINT_TO_POINTER(GGP_PUBDIR_GENDER_MALE));
 	purple_request_field_choice_add(field, _("Female"),
 		GINT_TO_POINTER(GGP_PUBDIR_GENDER_FEMALE));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(gc, _("Find buddies"), _("Find buddies"),
 	                      _("Please, enter your search criteria below"), fields,
@@ -935,7 +935,7 @@ ggp_pubdir_set_info_dialog(PurpleConnect
                            G_GNUC_UNUSED gpointer data)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 	gchar *bday = NULL;
 	gsize i;
@@ -947,18 +947,18 @@ ggp_pubdir_set_info_dialog(PurpleConnect
 	record = (records_count == 1 ? &records[0] : NULL);
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("first_name", _("First name"),
 	                                        record ? record->first_name : NULL,
 	                                        FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("last_name", _("Last name"),
 	                                        record ? record->last_name : NULL,
 	                                        FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_choice_new(
 	        "gender", _("Gender"),
@@ -969,7 +969,7 @@ ggp_pubdir_set_info_dialog(PurpleConnect
 	                                GINT_TO_POINTER(GGP_PUBDIR_GENDER_MALE));
 	purple_request_field_choice_add(field, _("Female"),
 	                                GINT_TO_POINTER(GGP_PUBDIR_GENDER_FEMALE));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	if(record != NULL && record->birth != NULL) {
 		bday = g_date_time_format(record->birth, "%Y-%m-%d");
@@ -980,11 +980,11 @@ ggp_pubdir_set_info_dialog(PurpleConnect
 	        FALSE);
 	g_free(bday);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new(
 	        "city", _("City"), record ? record->city : NULL, FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	/* Translators: This word is basically used to describe a Polish
 	   province. Gadu-Gadu users outside of Poland might choose to enter some
@@ -993,7 +993,7 @@ ggp_pubdir_set_info_dialog(PurpleConnect
 	   your language, feel free to use it. Otherwise it's probably acceptable
 	   to leave it changed or transliterate it into your alphabet. */
 	field = purple_request_field_choice_new("province", _("Voivodeship"), 0);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	for (i = 0; i < ggp_pubdir_provinces_count; i++) {
 		purple_request_field_choice_add(field, ggp_pubdir_provinces[i],
 		                                GINT_TO_POINTER(i));
diff --git a/libpurple/protocols/gg/status.c b/libpurple/protocols/gg/status.c
--- a/libpurple/protocols/gg/status.c
+++ b/libpurple/protocols/gg/status.c
@@ -342,17 +342,17 @@ void ggp_status_set_status_broadcasting(
 void ggp_status_broadcasting_dialog(PurpleConnection *gc)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_bool_new("buddies_only",
 		_("Show status only for buddies"),
 		!ggp_status_get_status_broadcasting(gc));
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(gc,
 		_("Change status broadcasting"),
diff --git a/libpurple/protocols/jabber/buddy.c b/libpurple/protocols/jabber/buddy.c
--- a/libpurple/protocols/jabber/buddy.c
+++ b/libpurple/protocols/jabber/buddy.c
@@ -620,7 +620,7 @@ jabber_setup_set_info(G_GNUC_UNUSED GSim
 	PurpleAccount *account = NULL;
 	PurpleConnection *connection = NULL;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 	const struct vcard_template *vc_tp;
 	const char *user_info;
@@ -638,7 +638,7 @@ jabber_setup_set_info(G_GNUC_UNUSED GSim
 	connection = purple_account_get_connection(account);
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	/*
@@ -681,7 +681,7 @@ jabber_setup_set_info(G_GNUC_UNUSED GSim
 		g_free(cdata);
 		cdata = NULL;
 
-		purple_request_field_group_add_field(group, field);
+		purple_request_group_add_field(group, field);
 	}
 
 	if(x_vc_data != NULL)
diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c
--- a/libpurple/protocols/jabber/jabber.c
+++ b/libpurple/protocols/jabber/jabber.c
@@ -1904,7 +1904,7 @@ jabber_password_change(G_GNUC_UNUSED GSi
 	PurpleConnection *connection = NULL;
 	JabberStream *js = NULL;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	if(!g_variant_is_of_type(parameter, G_VARIANT_TYPE_STRING)) {
@@ -1919,20 +1919,20 @@ jabber_password_change(G_GNUC_UNUSED GSi
 	js = purple_connection_get_protocol_data(connection);
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("password1", _("Password"),
 			"", FALSE);
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_string_new("password2", _("Password (again)"),
 			"", FALSE);
 	purple_request_field_string_set_masked(field, TRUE);
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(connection, _("Change XMPP Password"),
 	                      _("Change XMPP Password"),
@@ -2700,7 +2700,7 @@ jabber_initiate_media(PurpleProtocolMedi
 		PurpleRequestFields *fields;
 		PurpleRequestField *field = purple_request_field_choice_new(
 				"resource", _("Resource"), 0);
-		PurpleRequestFieldGroup *group;
+		PurpleRequestGroup *group;
 		JabberMediaRequest *request;
 
 		for(l = jb->resources; l; l = l->next)
@@ -2751,14 +2751,14 @@ jabber_initiate_media(PurpleProtocolMedi
 
 		msg = g_strdup_printf(_("Please select the resource of %s with which you would like to start a media session."), who);
 		fields = purple_request_fields_new();
-		group =	purple_request_field_group_new(NULL);
+		group =	purple_request_group_new(NULL);
 		request = g_new0(JabberMediaRequest, 1);
 		request->media = media;
 		request->account = account;
 		request->who = g_strdup(who);
 		request->type = type;
 
-		purple_request_field_group_add_field(group, field);
+		purple_request_group_add_field(group, field);
 		purple_request_fields_add_group(fields, group);
 		purple_request_fields(account, _("Select a Resource"), msg,
 				NULL, fields, _("Initiate Media"),
diff --git a/libpurple/protocols/jabber/si.c b/libpurple/protocols/jabber/si.c
--- a/libpurple/protocols/jabber/si.c
+++ b/libpurple/protocols/jabber/si.c
@@ -1589,14 +1589,14 @@ static void jabber_si_xfer_xfer_init(Pur
 			char *msg = g_strdup_printf(_("Please select the resource of %s to which you would like to send a file"), purple_xfer_get_remote_user(xfer));
 			PurpleRequestFields *fields = purple_request_fields_new();
 			PurpleRequestField *field = purple_request_field_choice_new("resource", _("Resource"), 0);
-			PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL);
+			PurpleRequestGroup *group = purple_request_group_new(NULL);
 
 			for(l = resources; l; l = l->next) {
 				jbr = l->data;
 				purple_request_field_choice_add_full(field, jbr->name, g_strdup(jbr->name), g_free);
 			}
 
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			purple_request_fields_add_group(fields, group);
 
diff --git a/libpurple/protocols/jabber/xdata.c b/libpurple/protocols/jabber/xdata.c
--- a/libpurple/protocols/jabber/xdata.c
+++ b/libpurple/protocols/jabber/xdata.c
@@ -44,7 +44,7 @@ struct jabber_x_data_data {
 	gpointer user_data;
 	JabberStream *js;
 	GList *actions;
-	PurpleRequestFieldGroup *actiongroup;
+	PurpleRequestGroup *actiongroup;
 };
 
 static void jabber_x_data_ok_cb(struct jabber_x_data_data *data, PurpleRequestFields *fields) {
@@ -61,7 +61,7 @@ static void jabber_x_data_ok_cb(struct j
 
 	for(groups = purple_request_fields_get_groups(fields); groups; groups = groups->next) {
 		if(groups->data == data->actiongroup) {
-			for(flds = purple_request_field_group_get_fields(groups->data); flds; flds = flds->next) {
+			for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
 				PurpleRequestField *field = flds->data;
 				const char *id = purple_request_field_get_id(field);
 				int handleindex;
@@ -73,7 +73,7 @@ static void jabber_x_data_ok_cb(struct j
 			}
 			continue;
 		}
-		for(flds = purple_request_field_group_get_fields(groups->data); flds; flds = flds->next) {
+		for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
 			PurpleXmlNode *fieldnode, *valuenode;
 			PurpleRequestField *field = flds->data;
 			const char *id = purple_request_field_get_id(field);
@@ -191,7 +191,7 @@ void *jabber_x_data_request_with_actions
 	void *handle;
 	PurpleXmlNode *fn, *x;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field = NULL;
 
 	char *title = NULL;
@@ -205,7 +205,7 @@ void *jabber_x_data_request_with_actions
 	data->js = js;
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	for(fn = purple_xmlnode_get_child(packet, "field"); fn; fn = purple_xmlnode_get_next_twin(fn)) {
@@ -230,7 +230,7 @@ void *jabber_x_data_request_with_actions
 			field = purple_request_field_string_new(var, label,
 					value ? value : "", FALSE);
 			purple_request_field_string_set_masked(field, TRUE);
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			g_hash_table_replace(data->fields, g_strdup(var), GINT_TO_POINTER(JABBER_X_DATA_TEXT_SINGLE));
 
@@ -250,7 +250,7 @@ void *jabber_x_data_request_with_actions
 
 			field = purple_request_field_string_new(var, label,
 					str->str, TRUE);
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			g_hash_table_replace(data->fields, g_strdup(var), GINT_TO_POINTER(JABBER_X_DATA_TEXT_MULTI));
 
@@ -297,7 +297,7 @@ void *jabber_x_data_request_with_actions
 				if(g_list_find_custom(selected, value, (GCompareFunc)strcmp))
 					purple_request_field_list_add_selected(field, lbl);
 			}
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			g_list_free_full(selected, g_free);
 		} else if(purple_strequal(type, "boolean")) {
@@ -311,7 +311,7 @@ void *jabber_x_data_request_with_actions
 				def = TRUE;
 
 			field = purple_request_field_bool_new(var, label, def);
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			g_hash_table_replace(data->fields, g_strdup(var), GINT_TO_POINTER(JABBER_X_DATA_BOOLEAN));
 
@@ -322,7 +322,7 @@ void *jabber_x_data_request_with_actions
 
 			if(value != NULL) {
 				field = purple_request_field_label_new("", value);
-				purple_request_field_group_add_field(group, field);
+				purple_request_group_add_field(group, field);
 
 				g_free(value);
 			}
@@ -333,7 +333,7 @@ void *jabber_x_data_request_with_actions
 			field = purple_request_field_string_new(var, "", value ? value : "",
 					FALSE);
 			purple_request_field_set_visible(field, FALSE);
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			g_hash_table_replace(data->fields, g_strdup(var), GINT_TO_POINTER(JABBER_X_DATA_TEXT_SINGLE));
 
@@ -344,7 +344,7 @@ void *jabber_x_data_request_with_actions
 
 			field = purple_request_field_string_new(var, label,
 					value ? value : "", FALSE);
-			purple_request_field_group_add_field(group, field);
+			purple_request_group_add_field(group, field);
 
 			if(purple_strequal(type, "jid-single")) {
 				purple_request_field_set_type_hint(field, "screenname");
@@ -365,7 +365,7 @@ void *jabber_x_data_request_with_actions
 		GList *action;
 		int i;
 
-		data->actiongroup = group = purple_request_field_group_new(_("Actions"));
+		data->actiongroup = group = purple_request_group_new(_("Actions"));
 		purple_request_fields_add_group(fields, group);
 		actionfield = purple_request_field_choice_new("libpurple:jabber:xdata:actions", _("Select an action"), GINT_TO_POINTER(defaultaction));
 
@@ -376,7 +376,7 @@ void *jabber_x_data_request_with_actions
 			data->actions = g_list_append(data->actions, g_strdup(a->handle));
 		}
 		purple_request_field_set_required(actionfield,TRUE);
-		purple_request_field_group_add_field(group, actionfield);
+		purple_request_group_add_field(group, actionfield);
 	}
 
 	if((x = purple_xmlnode_get_child(packet, "title")))
diff --git a/libpurple/purplechatconversation.c b/libpurple/purplechatconversation.c
--- a/libpurple/purplechatconversation.c
+++ b/libpurple/purplechatconversation.c
@@ -1058,7 +1058,7 @@ purple_chat_conversation_invite_user(Pur
 {
 	PurpleAccount *account;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	g_return_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat));
@@ -1077,18 +1077,18 @@ purple_chat_conversation_invite_user(Pur
 	}
 
 	fields = purple_request_fields_new();
-	group = purple_request_field_group_new(_("Invite to chat"));
+	group = purple_request_group_new(_("Invite to chat"));
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("screenname", _("Buddy"), user,
 	                                        FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_type_hint(field, "screenname");
 
 	field = purple_request_field_string_new("message", _("Message"), message,
 	                                        FALSE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(chat, _("Invite to chat"), NULL,
 	                      _("Please enter the name of the user you wish to "
diff --git a/libpurple/purpleprivate.h b/libpurple/purpleprivate.h
--- a/libpurple/purpleprivate.h
+++ b/libpurple/purpleprivate.h
@@ -341,10 +341,10 @@ G_GNUC_INTERNAL void purple_account_set_
 G_GNUC_INTERNAL void _purple_request_field_list_add_field(PurpleRequestFields *fields, PurpleRequestField *field);
 G_GNUC_INTERNAL void _purple_request_field_list_set_field_required(PurpleRequestFields *fields, PurpleRequestField *field, gboolean required);
 G_GNUC_INTERNAL void _purple_request_field_list_set_field_validator(PurpleRequestFields *fields, PurpleRequestField *field, gboolean validator);
-G_GNUC_INTERNAL void _purple_request_field_group_set_field_list(PurpleRequestFieldGroup *group, PurpleRequestFields *fields);
-G_GNUC_INTERNAL void _purple_request_field_set_group(PurpleRequestField *field, PurpleRequestFieldGroup *group);
-G_GNUC_INTERNAL void _purple_request_field_group_set_field_required(PurpleRequestFieldGroup *group, PurpleRequestField *field, gboolean required);
-G_GNUC_INTERNAL void _purple_request_field_group_set_field_validator(PurpleRequestFieldGroup *group, PurpleRequestField *field, gboolean validator);
+G_GNUC_INTERNAL void _purple_request_group_set_field_list(PurpleRequestGroup *group, PurpleRequestFields *fields);
+G_GNUC_INTERNAL void _purple_request_group_set_field_required(PurpleRequestGroup *group, PurpleRequestField *field, gboolean required);
+G_GNUC_INTERNAL void _purple_request_group_set_field_validator(PurpleRequestGroup *group, PurpleRequestField *field, gboolean validator);
+G_GNUC_INTERNAL void _purple_request_field_set_group(PurpleRequestField *field, PurpleRequestGroup *group);
 
 G_END_DECLS
 
diff --git a/libpurple/purplerequestfield.h b/libpurple/purplerequestfield.h
--- a/libpurple/purplerequestfield.h
+++ b/libpurple/purplerequestfield.h
@@ -189,7 +189,7 @@ PurpleRequestFieldType purple_request_fi
  *
  * Returns: (transfer none): The UI data.
  */
-PurpleRequestFieldGroup *purple_request_field_get_group(PurpleRequestField *field);
+PurpleRequestGroup *purple_request_field_get_group(PurpleRequestField *field);
 
 /**
  * purple_request_field_get_id:
diff --git a/libpurple/purplerequestfield.c b/libpurple/purplerequestfield.c
--- a/libpurple/purplerequestfield.c
+++ b/libpurple/purplerequestfield.c
@@ -30,7 +30,7 @@
 
 typedef struct {
 	PurpleRequestFieldType type;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 
 	char *id;
 	char *label;
@@ -409,7 +409,7 @@ purple_request_field_new(const char *id,
 
 void
 _purple_request_field_set_group(PurpleRequestField *field,
-                                PurpleRequestFieldGroup *group)
+                                PurpleRequestGroup *group)
 {
 	PurpleRequestFieldPrivate *priv = NULL;
 
@@ -495,9 +495,9 @@ purple_request_field_set_required(Purple
 
 	priv->required = required;
 
-	if(priv->group != NULL) {
-		_purple_request_field_group_set_field_required(priv->group, field,
-		                                               required);
+	if(PURPLE_IS_REQUEST_GROUP(priv->group)) {
+		_purple_request_group_set_field_required(priv->group, field,
+		                                         required);
 	}
 
 	g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_REQUIRED]);
@@ -515,7 +515,7 @@ purple_request_field_get_field_type(Purp
 	return priv->type;
 }
 
-PurpleRequestFieldGroup *
+PurpleRequestGroup *
 purple_request_field_get_group(PurpleRequestField *field) {
 	PurpleRequestFieldPrivate *priv = NULL;
 
@@ -619,9 +619,9 @@ purple_request_field_set_validator(Purpl
 	priv->validator = validator;
 	priv->validator_data = validator ? user_data : NULL;
 
-	if(priv->group != NULL) {
-		_purple_request_field_group_set_field_validator(priv->group, field,
-		                                                validator != NULL);
+	if(PURPLE_IS_REQUEST_GROUP(priv->group)) {
+		_purple_request_group_set_field_validator(priv->group, field,
+		                                          validator != NULL);
 	}
 
 	g_object_notify_by_pspec(G_OBJECT(field), properties[PROP_IS_VALIDATABLE]);
diff --git a/libpurple/purplerequestgroup.h b/libpurple/purplerequestgroup.h
--- a/libpurple/purplerequestgroup.h
+++ b/libpurple/purplerequestgroup.h
@@ -33,76 +33,68 @@
 #include <glib-object.h>
 
 /**
- * PurpleRequestFieldGroup:
+ * PurpleRequestGroup:
  *
  * A group of fields with a title.
  */
-typedef struct _PurpleRequestFieldGroup PurpleRequestFieldGroup;
+typedef struct _PurpleRequestGroup PurpleRequestGroup;
 
 #include "purplerequestfield.h"
 
+#define PURPLE_TYPE_REQUEST_GROUP (purple_request_group_get_type())
+G_DECLARE_FINAL_TYPE(PurpleRequestGroup, purple_request_group,
+                     PURPLE, REQUEST_GROUP, GObject)
+
 G_BEGIN_DECLS
 
 /**
- * purple_request_field_group_new:
- * @title: The optional title to give the group.
+ * purple_request_group_new:
+ * @title: (nullable): The title to give the group.
  *
  * Creates a fields group with an optional title.
  *
  * Returns: (transfer full): A new fields group
  */
-PurpleRequestFieldGroup *purple_request_field_group_new(const char *title);
+PurpleRequestGroup *purple_request_group_new(const char *title);
 
 /**
- * purple_request_field_group_destroy:
- * @group: The group to destroy.
- *
- * Destroys a fields group.
- */
-void purple_request_field_group_destroy(PurpleRequestFieldGroup *group);
-
-/**
- * purple_request_field_group_add_field:
+ * purple_request_group_add_field:
  * @group: The group to add the field to.
  * @field: (transfer full): The field to add to the group.
  *
  * Adds a field to the group.
  */
-void purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
-										PurpleRequestField *field);
+void purple_request_group_add_field(PurpleRequestGroup *group, PurpleRequestField *field);
 
 /**
- * purple_request_field_group_get_title:
+ * purple_request_group_get_title:
  * @group: The group.
  *
  * Returns the title of a fields group.
  *
- * Returns: The title, if set.
+ * Returns: (nullable): The title, if set.
  */
-const char *purple_request_field_group_get_title(
-		const PurpleRequestFieldGroup *group);
+const char *purple_request_group_get_title(PurpleRequestGroup *group);
 
 /**
- * purple_request_field_group_get_fields:
+ * purple_request_group_get_fields:
  * @group: The group.
  *
  * Returns a list of all fields in a group.
  *
  * Returns: (element-type PurpleRequestField) (transfer none): The list of fields in the group.
  */
-GList *purple_request_field_group_get_fields(
-		const PurpleRequestFieldGroup *group);
+GList *purple_request_group_get_fields(PurpleRequestGroup *group);
 
 /**
- * purple_request_field_group_get_fields_list:
+ * purple_request_group_get_fields_list:
  * @group: The group.
  *
  * Returns a list of all fields in a group.
  *
  * Returns: (transfer none): The list of fields in the group.
  */
-PurpleRequestFields *purple_request_field_group_get_fields_list(
-		const PurpleRequestFieldGroup *group);
+PurpleRequestFields *purple_request_group_get_fields_list(PurpleRequestGroup *group);
 
 G_END_DECLS
 
diff --git a/libpurple/purplerequestgroup.c b/libpurple/purplerequestgroup.c
--- a/libpurple/purplerequestgroup.c
+++ b/libpurple/purplerequestgroup.c
@@ -25,8 +25,9 @@
 #include "purplerequestgroup.h"
 #include "purpleprivate.h"
 
-struct _PurpleRequestFieldGroup
-{
+struct _PurpleRequestGroup {
+	GObject parent;
+
 	PurpleRequestFields *fields_list;
 
 	char *title;
@@ -34,68 +35,182 @@ struct _PurpleRequestFieldGroup
 	GList *fields;
 };
 
-PurpleRequestFieldGroup *
-purple_request_field_group_new(const char *title)
-{
-	PurpleRequestFieldGroup *group;
+enum {
+	PROP_0,
+	PROP_TITLE,
+	N_PROPERTIES,
+};
+static GParamSpec *properties[N_PROPERTIES] = {NULL, };
 
-	group = g_new0(PurpleRequestFieldGroup, 1);
-
+/******************************************************************************
+ * Helpers
+ *****************************************************************************/
+static void
+purple_request_group_set_title(PurpleRequestGroup *group, const char *title) {
+	g_free(group->title);
 	group->title = g_strdup(title);
 
-	return group;
+	g_object_notify_by_pspec(G_OBJECT(group), properties[PROP_TITLE]);
+}
+
+/******************************************************************************
+ * GListModel Implementation
+ *****************************************************************************/
+static GType
+purple_request_group_get_item_type(G_GNUC_UNUSED GListModel *model) {
+	return PURPLE_TYPE_REQUEST_FIELD;
+}
+
+static guint
+purple_request_group_get_n_items(GListModel *model) {
+	PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(model);
+
+	return g_list_length(group->fields);
+}
+
+static gpointer
+purple_request_group_get_item(G_GNUC_UNUSED GListModel *model, guint index) {
+	PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(model);
+
+	return g_list_nth_data(group->fields, index);
+}
+
+static void
+purple_request_group_list_model_init(GListModelInterface *iface) {
+	iface->get_item_type = purple_request_group_get_item_type;
+	iface->get_item = purple_request_group_get_item;
+	iface->get_n_items = purple_request_group_get_n_items;
 }
 
-void
-purple_request_field_group_destroy(PurpleRequestFieldGroup *group)
+/******************************************************************************
+ * GObject Implementation
+ *****************************************************************************/
+G_DEFINE_TYPE_WITH_CODE(PurpleRequestGroup, purple_request_group, G_TYPE_OBJECT,
+                        G_IMPLEMENT_INTERFACE(G_TYPE_LIST_MODEL,
+                                              purple_request_group_list_model_init))
+
+static void
+purple_request_group_get_property(GObject *obj, guint param_id, GValue *value,
+                                  GParamSpec *pspec)
 {
-	g_return_if_fail(group != NULL);
+	PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(obj);
+
+	switch(param_id) {
+		case PROP_TITLE:
+			g_value_set_string(value, purple_request_group_get_title(group));
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_request_group_set_property(GObject *obj, guint param_id,
+                                  const GValue *value, GParamSpec *pspec)
+{
+	PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(obj);
+
+	switch(param_id) {
+		case PROP_TITLE:
+			purple_request_group_set_title(group, g_value_get_string(value));
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_request_group_finalize(GObject *obj) {
+	PurpleRequestGroup *group = PURPLE_REQUEST_GROUP(obj);
 
 	g_free(group->title);
 
 	g_list_free_full(group->fields, g_object_unref);
 
-	g_free(group);
+	G_OBJECT_CLASS(purple_request_group_parent_class)->finalize(obj);
+}
+
+static void
+purple_request_group_init(G_GNUC_UNUSED PurpleRequestGroup *group) {
+}
+
+static void
+purple_request_group_class_init(PurpleRequestGroupClass *klass) {
+	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+
+	obj_class->finalize = purple_request_group_finalize;
+	obj_class->get_property = purple_request_group_get_property;
+	obj_class->set_property = purple_request_group_set_property;
+
+	/**
+	 * PurpleRequestGroup:title:
+	 *
+	 * The title of the field group.
+	 *
+	 * Since: 3.0.0
+	 */
+	properties[PROP_TITLE] = g_param_spec_string(
+		"title", "title",
+		"The title of the field group.",
+		NULL,
+		G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
+}
+
+/******************************************************************************
+ * Public API
+ *****************************************************************************/
+PurpleRequestGroup *
+purple_request_group_new(const char *title) {
+	return g_object_new(PURPLE_TYPE_REQUEST_GROUP,
+	                    "title", title,
+	                    NULL);
 }
 
 void
-_purple_request_field_group_set_field_list(PurpleRequestFieldGroup *group,
-                                           PurpleRequestFields *fields)
+_purple_request_group_set_field_list(PurpleRequestGroup *group,
+                                     PurpleRequestFields *fields)
 {
-	g_return_if_fail(group != NULL);
+	g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
 
 	group->fields_list = fields;
 }
 
 void
-_purple_request_field_group_set_field_required(PurpleRequestFieldGroup *group,
-                                               PurpleRequestField *field,
-                                               gboolean required)
+_purple_request_group_set_field_required(PurpleRequestGroup *group,
+                                         PurpleRequestField *field,
+                                         gboolean required)
 {
-	g_return_if_fail(group != NULL);
+	g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
 
 	_purple_request_field_list_set_field_required(group->fields_list, field,
 	                                              required);
 }
 
 void
-_purple_request_field_group_set_field_validator(PurpleRequestFieldGroup *group,
-                                                PurpleRequestField *field,
-                                                gboolean validator)
+_purple_request_group_set_field_validator(PurpleRequestGroup *group,
+                                          PurpleRequestField *field,
+                                          gboolean validator)
 {
-	g_return_if_fail(group != NULL);
+	g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
 
 	_purple_request_field_list_set_field_validator(group->fields_list, field,
 	                                               validator);
 }
 
 void
-purple_request_field_group_add_field(PurpleRequestFieldGroup *group,
-								   PurpleRequestField *field)
+purple_request_group_add_field(PurpleRequestGroup *group,
+                               PurpleRequestField *field)
 {
-	g_return_if_fail(group != NULL);
+	guint position;
+
+	g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
 	g_return_if_fail(PURPLE_IS_REQUEST_FIELD(field));
 
+	position = g_list_length(group->fields);
 	group->fields = g_list_append(group->fields, field);
 
 	if(group->fields_list != NULL) {
@@ -103,28 +218,30 @@ purple_request_field_group_add_field(Pur
 	}
 
 	_purple_request_field_set_group(field, group);
+
+	g_list_model_items_changed(G_LIST_MODEL(group), position, 0, 1);
 }
 
 const char *
-purple_request_field_group_get_title(const PurpleRequestFieldGroup *group)
+purple_request_group_get_title(PurpleRequestGroup *group)
 {
-	g_return_val_if_fail(group != NULL, NULL);
+	g_return_val_if_fail(PURPLE_IS_REQUEST_GROUP(group), NULL);
 
 	return group->title;
 }
 
 GList *
-purple_request_field_group_get_fields(const PurpleRequestFieldGroup *group)
+purple_request_group_get_fields(PurpleRequestGroup *group)
 {
-	g_return_val_if_fail(group != NULL, NULL);
+	g_return_val_if_fail(PURPLE_IS_REQUEST_GROUP(group), NULL);
 
 	return group->fields;
 }
 
 PurpleRequestFields *
-purple_request_field_group_get_fields_list(const PurpleRequestFieldGroup *group)
+purple_request_group_get_fields_list(PurpleRequestGroup *group)
 {
-	g_return_val_if_fail(group != NULL, NULL);
+	g_return_val_if_fail(PURPLE_IS_REQUEST_GROUP(group), NULL);
 
 	return group->fields_list;
 }
diff --git a/libpurple/purplerequestpage.h b/libpurple/purplerequestpage.h
--- a/libpurple/purplerequestpage.h
+++ b/libpurple/purplerequestpage.h
@@ -69,8 +69,7 @@ void purple_request_fields_destroy(Purpl
  *
  * Adds a group of fields to the list.
  */
-void purple_request_fields_add_group(PurpleRequestFields *fields,
-								   PurpleRequestFieldGroup *group);
+void purple_request_fields_add_group(PurpleRequestFields *fields, PurpleRequestGroup *group);
 
 /**
  * purple_request_fields_get_groups:
@@ -78,7 +77,7 @@ void purple_request_fields_add_group(Pur
  *
  * Returns a list of all groups in a field list.
  *
- * Returns: (element-type PurpleRequestFieldGroup) (transfer none): A list of groups.
+ * Returns: (element-type PurpleRequestGroup) (transfer none): A list of groups.
  */
 GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
 
diff --git a/libpurple/purplerequestpage.c b/libpurple/purplerequestpage.c
--- a/libpurple/purplerequestpage.c
+++ b/libpurple/purplerequestpage.c
@@ -56,8 +56,7 @@ purple_request_fields_destroy(PurpleRequ
 {
 	g_return_if_fail(fields != NULL);
 
-	g_list_free_full(fields->groups,
-	                 (GDestroyNotify)purple_request_field_group_destroy);
+	g_list_free_full(fields->groups, g_object_unref);
 	g_list_free(fields->required_fields);
 	g_list_free(fields->validated_fields);
 	g_hash_table_destroy(fields->fields);
@@ -114,19 +113,19 @@ void
 
 void
 purple_request_fields_add_group(PurpleRequestFields *fields,
-							  PurpleRequestFieldGroup *group)
+                                PurpleRequestGroup *group)
 {
 	GList *l;
 	PurpleRequestField *field;
 
 	g_return_if_fail(fields != NULL);
-	g_return_if_fail(group  != NULL);
+	g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
 
 	fields->groups = g_list_append(fields->groups, group);
 
-	_purple_request_field_group_set_field_list(group, fields);
+	_purple_request_group_set_field_list(group, fields);
 
-	for (l = purple_request_field_group_get_fields(group);
+	for (l = purple_request_group_get_fields(group);
 		 l != NULL;
 		 l = l->next) {
 
diff --git a/libpurple/request.c b/libpurple/request.c
--- a/libpurple/request.c
+++ b/libpurple/request.c
@@ -629,10 +629,10 @@ purple_request_fields_strip_html(PurpleR
 	     itg != NULL;
 	     itg = g_list_next(itg))
 	{
-		PurpleRequestFieldGroup *group = itg->data;
+		PurpleRequestGroup *group = itg->data;
 		GList *itf;
 
-		for (itf = purple_request_field_group_get_fields(group);
+		for (itf = purple_request_group_get_fields(group);
 		     itf != NULL;
 		     itf = g_list_next(itf))
 		{
diff --git a/pidgin/gtkdialogs.c b/pidgin/gtkdialogs.c
--- a/pidgin/gtkdialogs.c
+++ b/pidgin/gtkdialogs.c
@@ -86,19 +86,19 @@ void
 pidgin_dialogs_im(void)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	fields = purple_request_fields_new();
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("screenname", _("_Name"), NULL, FALSE);
 	purple_request_field_set_type_hint(field, "screenname");
 	purple_request_field_set_required(field, TRUE);
 	purple_request_field_set_validator(field, pidgin_dialogs_im_name_validator, fields);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_account_new("account", _("_Account"), NULL);
 	purple_request_field_set_type_hint(field, "account");
@@ -106,7 +106,7 @@ pidgin_dialogs_im(void)
 		(purple_connections_get_all() != NULL &&
 		 purple_connections_get_all()->next != NULL));
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(
 	        purple_blist_get_default(), _("New Instant Message"), NULL,
@@ -161,18 +161,18 @@ void
 pidgin_dialogs_info(void)
 {
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestField *field;
 
 	fields = purple_request_fields_new();
 
-	group = purple_request_field_group_new(NULL);
+	group = purple_request_group_new(NULL);
 	purple_request_fields_add_group(fields, group);
 
 	field = purple_request_field_string_new("screenname", _("_Name"), NULL, FALSE);
 	purple_request_field_set_type_hint(field, "screenname");
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	field = purple_request_field_account_new("account", _("_Account"), NULL);
 	purple_request_field_set_type_hint(field, "account");
@@ -180,7 +180,7 @@ pidgin_dialogs_info(void)
 		(purple_connections_get_all() != NULL &&
 		 purple_connections_get_all()->next != NULL));
 	purple_request_field_set_required(field, TRUE);
-	purple_request_field_group_add_field(group, field);
+	purple_request_group_add_field(group, field);
 
 	purple_request_fields(
 	        purple_blist_get_default(), _("Get User Info"), NULL,
diff --git a/pidgin/gtkrequest.c b/pidgin/gtkrequest.c
--- a/pidgin/gtkrequest.c
+++ b/pidgin/gtkrequest.c
@@ -225,12 +225,12 @@ static void
 req_field_changed_common(G_GNUC_UNUSED GtkWidget *widget,
                          PurpleRequestField *field)
 {
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	PurpleRequestFields *fields;
 	PidginRequestData *req_data;
 
 	group = purple_request_field_get_group(field);
-	fields = purple_request_field_group_get_fields_list(group);
+	fields = purple_request_group_get_fields_list(group);
 	req_data = purple_request_fields_get_ui_data(fields);
 
 	gtk_widget_set_sensitive(req_data->ok_button,
@@ -1073,8 +1073,8 @@ setup_entry_field(GtkWidget *entry, Purp
 	{
 		if (g_str_has_prefix(type_hint, "screenname")) {
 			GtkWidget *optmenu = NULL;
-			PurpleRequestFieldGroup *group = purple_request_field_get_group(field);
-			GList *fields = purple_request_field_group_get_fields(group);
+			PurpleRequestGroup *group = purple_request_field_get_group(field);
+			GList *fields = purple_request_group_get_fields(group);
 
 			/* Ensure the account option menu is created (if the widget hasn't
 			 * been initialized already) for username auto-completion. */
@@ -1894,7 +1894,7 @@ pidgin_request_fields(const char *title,
 	GtkWidget *content;
 	GtkSizeGroup *sg, *datasheet_buttons_sg;
 	GList *gl, *fl;
-	PurpleRequestFieldGroup *group;
+	PurpleRequestGroup *group;
 	char *label_text;
 	char *primary_esc, *secondary_esc;
 	const gboolean compact = purple_request_cpar_is_compact(cpar);
@@ -2017,11 +2017,11 @@ pidgin_request_fields(const char *title,
 		gboolean contains_resizable = FALSE;
 
 		group      = gl->data;
-		field_list = purple_request_field_group_get_fields(group);
-
-		if(purple_request_field_group_get_title(group) != NULL) {
+		field_list = purple_request_group_get_fields(group);
+
+		if(purple_request_group_get_title(group) != NULL) {
 			frame = pidgin_make_frame(vbox,
-				purple_request_field_group_get_title(group));
+				purple_request_group_get_title(group));
 		} else {
 			frame = vbox;
 		}
diff --git a/pidgin/pidginmooddialog.c b/pidgin/pidginmooddialog.c
--- a/pidgin/pidginmooddialog.c
+++ b/pidgin/pidginmooddialog.c
@@ -246,7 +246,7 @@ void
 pidgin_mood_dialog_show(PurpleAccount *account) {
 	const gchar *current_mood;
 	PurpleRequestFields *fields;
-	PurpleRequestFieldGroup *g;
+	PurpleRequestGroup *g;
 	PurpleRequestField *f;
 	PurpleConnection *gc = NULL;
 	PurpleProtocol *protocol = NULL;
@@ -265,7 +265,7 @@ pidgin_mood_dialog_show(PurpleAccount *a
 	}
 
 	fields = purple_request_fields_new();
-	g = purple_request_field_group_new(NULL);
+	g = purple_request_group_new(NULL);
 	f = purple_request_field_list_new("mood", _("Please select your mood from the list"));
 
 	purple_request_field_list_add_icon(f, _("None"), NULL, "");
@@ -297,16 +297,16 @@ pidgin_mood_dialog_show(PurpleAccount *a
 		if (current_mood && purple_strequal(current_mood, mood->mood))
 			purple_request_field_list_add_selected(f, _(mood->description));
 	}
-	purple_request_field_group_add_field(g, f);
+	purple_request_group_add_field(g, f);
 
 	purple_request_fields_add_group(fields, g);
 
 	/* if the connection allows setting a mood message */
 	if (gc && (purple_connection_get_flags(gc) & PURPLE_CONNECTION_FLAG_SUPPORT_MOOD_MESSAGES)) {
-		g = purple_request_field_group_new(NULL);
+		g = purple_request_group_new(NULL);
 		f = purple_request_field_string_new("text",
 		    _("Message (optional)"), NULL, FALSE);
-		purple_request_field_group_add_field(g, f);
+		purple_request_group_add_field(g, f);
 		purple_request_fields_add_group(fields, g);
 	}
 
