diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
index ea63f29..7d24016 100644
--- a/src/empathy-chat-window.c
+++ b/src/empathy-chat-window.c
@@ -1848,10 +1848,11 @@ empathy_chat_window_new (void)
  * be added.
  */
 EmpathyChatWindow *
-empathy_chat_window_get_default (void)
+empathy_chat_window_get_default (gboolean room_filter)
 {
 	GList    *l;
 	gboolean  separate_windows = TRUE;
+	guint nb_rooms;
 
 	empathy_conf_get_bool (empathy_conf_get (),
 			      EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS,
@@ -1863,13 +1864,25 @@ empathy_chat_window_get_default (void)
 	}
 
 	for (l = chat_windows; l; l = l->next) {
+		EmpathyChatWindowPriv *priv;
 		EmpathyChatWindow *chat_window;
 		GtkWidget         *dialog;
 
 		chat_window = l->data;
+		priv = GET_PRIV (chat_window);
 
 		dialog = empathy_chat_window_get_dialog (chat_window);
 		if (empathy_window_get_is_visible (GTK_WINDOW (dialog))) {
+			nb_rooms = empathy_chat_window_get_nb_rooms (chat_window);
+
+			/* We add a new room only if the window has at least one room */
+			if (room_filter && nb_rooms == 0)
+				continue;
+
+			/* We add a new 1-1 chat only if the window has at least one 1-1 chat */
+			if (!room_filter && nb_rooms > 0)
+				continue;
+
 			/* Found a visible window on this desktop */
 			return chat_window;
 		}
@@ -2086,7 +2099,7 @@ empathy_chat_window_present_chat (EmpathyChat *chat)
 
 	/* If the chat has no window, create one */
 	if (window == NULL) {
-		window = empathy_chat_window_get_default ();
+		window = empathy_chat_window_get_default (empathy_chat_is_room (chat));
 		if (!window) {
 			window = empathy_chat_window_new ();
 		}
@@ -2101,3 +2114,17 @@ empathy_chat_window_present_chat (EmpathyChat *chat)
  	gtk_widget_grab_focus (chat->input_text_view);
 }
 
+guint
+empathy_chat_window_get_nb_rooms (EmpathyChatWindow *self)
+{
+	EmpathyChatWindowPriv *priv = GET_PRIV (self);
+	GList *l;
+	guint nb = 0;
+
+	for (l = priv->chats; l != NULL; l = g_list_next (l)) {
+		if (empathy_chat_is_room (EMPATHY_CHAT (l->data)))
+			nb++;
+	}
+
+	return nb;
+}
diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h
index 1e4a001..9981fad 100644
--- a/src/empathy-chat-window.h
+++ b/src/empathy-chat-window.h
@@ -57,7 +57,7 @@ struct _EmpathyChatWindowClass {
 };
 
 GType              empathy_chat_window_get_type       (void);
-EmpathyChatWindow *empathy_chat_window_get_default    (void);
+EmpathyChatWindow *empathy_chat_window_get_default    (gboolean room_filter);
 EmpathyChatWindow *empathy_chat_window_new            (void);
 GtkWidget *        empathy_chat_window_get_dialog     (EmpathyChatWindow *window);
 void               empathy_chat_window_add_chat       (EmpathyChatWindow *window,
@@ -74,6 +74,7 @@ EmpathyChat *      empathy_chat_window_find_chat      (TpAccount        *account
 						       const gchar      *id);
 void               empathy_chat_window_present_chat   (EmpathyChat      *chat);
 
+guint              empathy_chat_window_get_nb_rooms (EmpathyChatWindow *window);
 
 G_END_DECLS
 
