diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
index 4e3b63b..5187375 100644
--- a/libempathy-gtk/empathy-account-chooser.c
+++ b/libempathy-gtk/empathy-account-chooser.c
@@ -30,8 +30,10 @@
 #include <gtk/gtk.h>
 
 #include <telepathy-glib/account-manager.h>
+#include <telepathy-glib/interfaces.h>
 
 #include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-dispatcher.h>
 
 #include "empathy-ui-utils.h"
 #include "empathy-account-chooser.h"
@@ -889,6 +891,48 @@ empathy_account_chooser_filter_is_connected (TpAccount *account,
 	    == TP_CONNECTION_STATUS_CONNECTED);
 }
 
+/**
+ * empathy_account_chooser_filter_supports_multichat:
+ * @account: a #TpAccount
+ * @user_data: user data or %NULL
+ *
+ * A #EmpathyAccountChooserFilterFunc that returns accounts that both
+ * support multiuser text chat and are connected.
+ *
+ * Return value: TRUE if @account both supports muc and is connected
+ */
+gboolean
+empathy_account_chooser_filter_supports_multichat (TpAccount *account,
+						   gpointer   user_data)
+{
+	TpConnection *connection;  /* largely copied from empathy-new-message-dialog.c */
+	EmpathyDispatcher *dispatcher;
+	GList *classes;
+
+	if (tp_account_get_connection_status (account, NULL) !=
+	    TP_CONNECTION_STATUS_CONNECTED)
+	return FALSE;
+
+	/* check if CM supports multiuser text chat */
+	connection = tp_account_get_connection (account);
+	if (connection == NULL)
+		return FALSE;
+
+	dispatcher = empathy_dispatcher_dup_singleton ();
+
+	classes = empathy_dispatcher_find_requestable_channel_classes
+		(dispatcher, connection, TP_IFACE_CHANNEL_TYPE_TEXT,
+		TP_HANDLE_TYPE_ROOM, NULL);
+
+	g_object_unref (dispatcher);
+
+	if (classes == NULL)
+		return FALSE;
+
+	g_list_free (classes);
+	return TRUE;
+}
+
 gboolean
 empathy_account_chooser_is_ready (EmpathyAccountChooser *self)
 {
diff --git a/libempathy-gtk/empathy-account-chooser.h b/libempathy-gtk/empathy-account-chooser.h
index 042321e..8a93c12 100644
--- a/libempathy-gtk/empathy-account-chooser.h
+++ b/libempathy-gtk/empathy-account-chooser.h
@@ -70,6 +70,8 @@ void           empathy_account_chooser_set_filter         (EmpathyAccountChooser
 							   gpointer               user_data);
 gboolean       empathy_account_chooser_filter_is_connected (TpAccount            *account,
 							   gpointer               user_data);
+gboolean       empathy_account_chooser_filter_supports_multichat (TpAccount            *account,
+								  gpointer              user_data);
 gboolean       empathy_account_chooser_is_ready (EmpathyAccountChooser *chooser);
 
 G_END_DECLS
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
index a2f3b4b..1e041eb 100644
--- a/src/empathy-new-chatroom-dialog.c
+++ b/src/empathy-new-chatroom-dialog.c
@@ -202,7 +202,7 @@ empathy_new_chatroom_dialog_show (GtkWindow *parent)
 	/* Account chooser for custom */
 	dialog->account_chooser = empathy_account_chooser_new ();
 	empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser),
-					    empathy_account_chooser_filter_is_connected,
+					    empathy_account_chooser_filter_supports_multichat,
 					    NULL);
 	gtk_table_attach_defaults (GTK_TABLE (dialog->table_info),
 				   dialog->account_chooser,
