diff --git a/libpurple/protocols/jabber/buddy.h b/libpurple/protocols/jabber/buddy.h
--- a/libpurple/protocols/jabber/buddy.h
+++ b/libpurple/protocols/jabber/buddy.h
@@ -99,8 +99,6 @@
 void jabber_setup_set_info(GSimpleAction *action, GVariant *parameter, gpointer data);
 void jabber_set_buddy_icon(PurpleProtocolServer *protocol_server, PurpleConnection *gc, PurpleImage *img);
 
-void jabber_user_search_begin(GSimpleAction *action, GVariant *parameter, gpointer data);
-
 void jabber_buddy_remove_all_pending_buddy_info_requests(JabberStream *js);
 
 void jabber_vcard_fetch_mine(JabberStream *js);
# HG changeset patch
# Node ID 149e96ae5221
# Parent  08b6b45431c9
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
@@ -1918,367 +1918,6 @@
 	}
 }
 
-
-static void
-user_search_result_add_buddy_cb(PurpleConnection *gc, GList *row,
-                                G_GNUC_UNUSED gpointer user_data)
-{
-	/* XXX find out the jid */
-	purple_blist_request_add_buddy(purple_connection_get_account(gc),
-			g_list_nth_data(row, 0), NULL, NULL);
-}
-
-static void
-user_search_result_cb(JabberStream *js, G_GNUC_UNUSED const char *from,
-                      G_GNUC_UNUSED JabberIqType type,
-                      G_GNUC_UNUSED const char *id, PurpleXmlNode *packet,
-                      G_GNUC_UNUSED gpointer data)
-{
-	PurpleNotifySearchResults *results;
-	PurpleNotifySearchColumn *column;
-	PurpleXmlNode *x, *query, *item, *field;
-
-	/* XXX error checking? */
-	if(!(query = purple_xmlnode_get_child(packet, "query")))
-		return;
-
-	results = purple_notify_searchresults_new();
-	if((x = purple_xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
-		PurpleXmlNode *reported;
-		GSList *column_vars = NULL;
-
-		purple_debug_info("jabber", "new-skool\n");
-
-		if((reported = purple_xmlnode_get_child(x, "reported"))) {
-			PurpleXmlNode *field = purple_xmlnode_get_child(reported, "field");
-			while(field) {
-				const char *var = purple_xmlnode_get_attrib(field, "var");
-				const char *label = purple_xmlnode_get_attrib(field, "label");
-				if(var) {
-					column = purple_notify_searchresults_column_new(label ? label : var);
-					purple_notify_searchresults_column_add(results, column);
-					column_vars = g_slist_append(column_vars, (char *)var);
-				}
-				field = purple_xmlnode_get_next_twin(field);
-			}
-		}
-
-		item = purple_xmlnode_get_child(x, "item");
-		while(item) {
-			GList *row = NULL;
-			GSList *l;
-			PurpleXmlNode *valuenode;
-			const char *var;
-
-			for (l = column_vars; l != NULL; l = l->next) {
-				/*
-				 * Build a row containing the strings that correspond
-				 * to each column of the search results.
-				 */
-				for (field = purple_xmlnode_get_child(item, "field");
-						field != NULL;
-						field = purple_xmlnode_get_next_twin(field))
-				{
-					if ((var = purple_xmlnode_get_attrib(field, "var")) &&
-							purple_strequal(var, l->data) &&
-							(valuenode = purple_xmlnode_get_child(field, "value")))
-					{
-						char *value = purple_xmlnode_get_data(valuenode);
-						row = g_list_append(row, value);
-						break;
-					}
-				}
-				if (field == NULL)
-					/* No data for this column */
-					row = g_list_append(row, NULL);
-			}
-			purple_notify_searchresults_row_add(results, row);
-			item = purple_xmlnode_get_next_twin(item);
-		}
-
-		g_slist_free(column_vars);
-	} else {
-		/* old skool */
-		purple_debug_info("jabber", "old-skool\n");
-
-		column = purple_notify_searchresults_column_new(_("JID"));
-		purple_notify_searchresults_column_add(results, column);
-		column = purple_notify_searchresults_column_new(_("First Name"));
-		purple_notify_searchresults_column_add(results, column);
-		column = purple_notify_searchresults_column_new(_("Last Name"));
-		purple_notify_searchresults_column_add(results, column);
-		column = purple_notify_searchresults_column_new(_("Nickname"));
-		purple_notify_searchresults_column_add(results, column);
-		column = purple_notify_searchresults_column_new(_("Email"));
-		purple_notify_searchresults_column_add(results, column);
-
-		for(item = purple_xmlnode_get_child(query, "item"); item; item = purple_xmlnode_get_next_twin(item)) {
-			const char *jid;
-			PurpleXmlNode *node;
-			GList *row = NULL;
-
-			if(!(jid = purple_xmlnode_get_attrib(item, "jid")))
-				continue;
-
-			row = g_list_append(row, g_strdup(jid));
-			node = purple_xmlnode_get_child(item, "first");
-			row = g_list_append(row, node ? purple_xmlnode_get_data(node) : NULL);
-			node = purple_xmlnode_get_child(item, "last");
-			row = g_list_append(row, node ? purple_xmlnode_get_data(node) : NULL);
-			node = purple_xmlnode_get_child(item, "nick");
-			row = g_list_append(row, node ? purple_xmlnode_get_data(node) : NULL);
-			node = purple_xmlnode_get_child(item, "email");
-			row = g_list_append(row, node ? purple_xmlnode_get_data(node) : NULL);
-			purple_debug_info("jabber", "row=%p\n", row);
-			purple_notify_searchresults_row_add(results, row);
-		}
-	}
-
-	purple_notify_searchresults_button_add(results, PURPLE_NOTIFY_BUTTON_ADD,
-			user_search_result_add_buddy_cb);
-
-	purple_notify_searchresults(js->gc, NULL, NULL, _("The following are the results of your search"), results, NULL, NULL);
-}
-
-static void user_search_x_data_cb(JabberStream *js, PurpleXmlNode *result, gpointer data)
-{
-	PurpleXmlNode *query;
-	JabberIq *iq;
-	char *dir_server = data;
-	const char *type;
-
-	/* if they've cancelled the search, we're
-	 * just going to get an error if we send
-	 * a cancel, so skip it */
-	type = purple_xmlnode_get_attrib(result, "type");
-	if(purple_strequal(type, "cancel")) {
-		g_free(dir_server);
-		return;
-	}
-
-	iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
-	query = purple_xmlnode_get_child(iq->node, "query");
-
-	purple_xmlnode_insert_child(query, result);
-
-	jabber_iq_set_callback(iq, user_search_result_cb, NULL);
-	purple_xmlnode_set_attrib(iq->node, "to", dir_server);
-	jabber_iq_send(iq);
-	g_free(dir_server);
-}
-
-struct user_search_info {
-	JabberStream *js;
-	char *directory_server;
-};
-
-static void
-user_search_cancel_cb(struct user_search_info *usi,
-                      G_GNUC_UNUSED PurpleRequestFields *fields)
-{
-	g_free(usi->directory_server);
-	g_free(usi);
-}
-
-static void user_search_cb(struct user_search_info *usi, PurpleRequestFields *fields)
-{
-	JabberStream *js = usi->js;
-	JabberIq *iq;
-	PurpleXmlNode *query;
-	GList *groups, *flds;
-
-	iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search");
-	query = purple_xmlnode_get_child(iq->node, "query");
-
-	for(groups = purple_request_fields_get_groups(fields); groups; groups = groups->next) {
-		for(flds = purple_request_field_group_get_fields(groups->data);
-				flds; flds = flds->next) {
-			PurpleRequestField *field = flds->data;
-			const char *id = purple_request_field_get_id(field);
-			const char *value = purple_request_field_string_get_value(field);
-
-			if(value && (purple_strequal(id, "first") || purple_strequal(id, "last") || purple_strequal(id, "nick") || purple_strequal(id, "email"))) {
-				PurpleXmlNode *y = purple_xmlnode_new_child(query, id);
-				purple_xmlnode_insert_data(y, value, -1);
-			}
-		}
-	}
-
-	jabber_iq_set_callback(iq, user_search_result_cb, NULL);
-	purple_xmlnode_set_attrib(iq->node, "to", usi->directory_server);
-	jabber_iq_send(iq);
-
-	g_free(usi->directory_server);
-	g_free(usi);
-}
-
-static void
-user_search_fields_result_cb(JabberStream *js, const char *from,
-                             JabberIqType type, G_GNUC_UNUSED const char *id,
-                             PurpleXmlNode *packet,
-                             G_GNUC_UNUSED gpointer data)
-{
-	PurpleXmlNode *query, *x;
-
-	if (!from)
-		return;
-
-	if (type == JABBER_IQ_ERROR) {
-		char *msg = jabber_parse_error(js, packet, NULL);
-
-		if(!msg)
-			msg = g_strdup(_("Unknown error"));
-
-		purple_notify_error(js->gc, _("Directory Query Failed"),
-			_("Could not query the directory server."), msg,
-			purple_request_cpar_from_connection(js->gc));
-		g_free(msg);
-
-		return;
-	}
-
-
-	if(!(query = purple_xmlnode_get_child(packet, "query")))
-		return;
-
-	if((x = purple_xmlnode_get_child_with_namespace(query, "x", "jabber:x:data"))) {
-		jabber_x_data_request(js, x, user_search_x_data_cb, g_strdup(from));
-		return;
-	} else {
-		struct user_search_info *usi;
-		PurpleXmlNode *instnode;
-		char *instructions = NULL;
-		PurpleRequestFields *fields;
-		PurpleRequestFieldGroup *group;
-		PurpleRequestField *field;
-
-		/* old skool */
-		fields = purple_request_fields_new();
-		group = purple_request_field_group_new(NULL);
-		purple_request_fields_add_group(fields, group);
-
-		if((instnode = purple_xmlnode_get_child(query, "instructions")))
-		{
-			char *tmp = purple_xmlnode_get_data(instnode);
-
-			if(tmp)
-			{
-				/* Try to translate the message (see static message
-				   list in jabber_user_dir_comments[]) */
-				instructions = g_strdup_printf(_("Server Instructions: %s"), _(tmp));
-				g_free(tmp);
-			}
-		}
-
-		if(!instructions)
-		{
-			instructions = g_strdup(_("Fill in one or more fields to search "
-						  "for any matching XMPP users."));
-		}
-
-		if(purple_xmlnode_get_child(query, "first")) {
-			field = purple_request_field_string_new("first", _("First Name"),
-					NULL, FALSE);
-			purple_request_field_group_add_field(group, field);
-		}
-		if(purple_xmlnode_get_child(query, "last")) {
-			field = purple_request_field_string_new("last", _("Last Name"),
-					NULL, FALSE);
-			purple_request_field_group_add_field(group, field);
-		}
-		if(purple_xmlnode_get_child(query, "nick")) {
-			field = purple_request_field_string_new("nick", _("Nickname"),
-					NULL, FALSE);
-			purple_request_field_group_add_field(group, field);
-		}
-		if(purple_xmlnode_get_child(query, "email")) {
-			field = purple_request_field_string_new("email", _("Email Address"),
-					NULL, FALSE);
-			purple_request_field_group_add_field(group, field);
-		}
-
-		usi = g_new0(struct user_search_info, 1);
-		usi->js = js;
-		usi->directory_server = g_strdup(from);
-
-		purple_request_fields(js->gc, _("Search for XMPP users"),
-				_("Search for XMPP users"), instructions, fields,
-				_("Search"), G_CALLBACK(user_search_cb),
-				_("Cancel"), G_CALLBACK(user_search_cancel_cb),
-				purple_request_cpar_from_connection(js->gc),
-				usi);
-
-		g_free(instructions);
-	}
-}
-
-static void
-jabber_user_search(JabberStream *js, const char *directory)
-{
-	JabberIq *iq;
-
-	/* XXX: should probably better validate the directory we're given */
-	if(!directory || !*directory) {
-		purple_notify_error(js->gc, _("Invalid Directory"),
-			_("Invalid Directory"), NULL,
-			purple_request_cpar_from_connection(js->gc));
-		return;
-	}
-
-	/* If the value provided isn't the disco#info default, persist it.  Otherwise,
-	   make sure we aren't persisting an old value */
-	if(js->user_directories && js->user_directories->data &&
-	   purple_strequal(directory, js->user_directories->data)) {
-		purple_account_set_string(purple_connection_get_account(js->gc), "user_directory", "");
-	}
-	else {
-		purple_account_set_string(purple_connection_get_account(js->gc), "user_directory", directory);
-	}
-
-	iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:search");
-	purple_xmlnode_set_attrib(iq->node, "to", directory);
-
-	jabber_iq_set_callback(iq, user_search_fields_result_cb, NULL);
-
-	jabber_iq_send(iq);
-}
-
-void
-jabber_user_search_begin(G_GNUC_UNUSED GSimpleAction *action,
-                         GVariant *parameter, G_GNUC_UNUSED gpointer data)
-{
-	const char *account_id = NULL;
-	PurpleAccountManager *manager = NULL;
-	PurpleAccount *account = NULL;
-	PurpleConnection *connection = NULL;
-	JabberStream *js = NULL;
-	const char *def_val = NULL;
-
-	if(!g_variant_is_of_type(parameter, G_VARIANT_TYPE_STRING)) {
-		g_critical("XMPP User Search action parameter is of incorrect type %s",
-		           g_variant_get_type_string(parameter));
-	}
-
-	account_id = g_variant_get_string(parameter, NULL);
-	manager = purple_account_manager_get_default();
-	account = purple_account_manager_find_by_id(manager, account_id);
-	connection = purple_account_get_connection(account);
-
-	js = purple_connection_get_protocol_data(connection);
-	def_val = purple_account_get_string(account, "user_directory", "");
-	if(*def_val == '\0' && js->user_directories) {
-		def_val = js->user_directories->data;
-	}
-
-	purple_request_input(connection, _("Enter a User Directory"),
-	                     _("Enter a User Directory"),
-	                     _("Select a user directory to search"),
-	                     def_val, FALSE, FALSE, NULL,
-	                     _("Search Directory"), G_CALLBACK(jabber_user_search),
-	                     _("Cancel"), NULL,
-	                     NULL, js);
-}
-
 gboolean
 jabber_resource_know_capabilities(const JabberBuddyResource *jbr)
 {
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
@@ -2038,11 +2038,6 @@
 			.activate = jabber_password_change,
 			.parameter_type = "s",
 		},
-		{
-			.name = "search-users",
-			.activate = jabber_user_search_begin,
-			.parameter_type = "s",
-		},
 	};
 	gsize nentries = G_N_ELEMENTS(entries);
 
@@ -2083,12 +2078,6 @@
 	g_menu_append_item(menu, item);
 	g_object_unref(item);
 
-	item = g_menu_item_new(_("Search for Users..."), "prpl-xmpp.search-users");
-	g_menu_item_set_attribute(item, PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET, "s",
-	                          "account");
-	g_menu_append_item(menu, item);
-	g_object_unref(item);
-
 	jabber_pep_append_menu(menu);
 
 #if 0
