diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 6923820..611f2eb 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -1850,18 +1850,20 @@ chat_reset_size_request (gpointer widget)
 }
 
 static void
-chat_update_contacts_visibility (EmpathyChat *chat)
+chat_update_contacts_visibility (EmpathyChat *chat,
+			 gboolean show)
 {
 	EmpathyChatPriv *priv = GET_PRIV (chat);
-	gboolean show;
 	GtkAllocation allocation;
 
-	show = priv->remote_contact == NULL && priv->show_contacts;
-
 	if (!priv->scrolled_window_contacts) {
 		return;
 	}
 
+	if (priv->remote_contact != NULL) {
+		show = FALSE;
+	}
+
 	if (show && priv->contact_list_view == NULL) {
 		EmpathyContactListStore *store;
 		gint                     min_width;
@@ -1912,7 +1914,7 @@ empathy_chat_set_show_contacts (EmpathyChat *chat,
 
 	priv->show_contacts = show;
 
-	chat_update_contacts_visibility (chat);
+	chat_update_contacts_visibility (chat, show);
 
 	g_object_notify (G_OBJECT (chat), "show-contacts");
 }
@@ -1942,7 +1944,7 @@ chat_remote_contact_changed_cb (EmpathyChat *chat)
 		g_object_get (channel, "handle-type", &priv->handle_type, NULL);
 	}
 
-	chat_update_contacts_visibility (chat);
+	chat_update_contacts_visibility (chat, priv->show_contacts);
 
 	g_object_notify (G_OBJECT (chat), "remote-contact");
 	g_object_notify (G_OBJECT (chat), "id");
@@ -1967,7 +1969,8 @@ chat_destroy_cb (EmpathyTpChat *tp_chat,
 
 	empathy_chat_view_append_event (chat->view, _("Disconnected"));
 	gtk_widget_set_sensitive (chat->input_text_view, FALSE);
-	empathy_chat_set_show_contacts (chat, FALSE);
+
+	chat_update_contacts_visibility (chat, FALSE);
 }
 
 static void
