diff --git a/src/main-window.c b/src/main-window.c
index a935b752..672d7d9b 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -123,6 +123,8 @@ static void bw_idle_remove(BalsaWindow * window);
 static gboolean bw_idle_cb(BalsaWindow * window);
 
 
+static void bw_check_new_messages(gpointer data);
+static void bw_check_mailbox(LibBalsaMailbox * mailbox);
 static void bw_check_mailbox_list(BalsaWindow * window, GList * list);
 static gboolean bw_add_mbox_to_checklist(GtkTreeModel * model,
                                          GtkTreePath * path,
@@ -1033,19 +1035,124 @@ continue_activated(GSimpleAction * action,
         balsa_mblist_open_mailbox(balsa_app.draftbox);
 }
 
+/*
+ * get_new_mail_activated and supporting cast
+ */
+
+enum {
+    STORE_SERVER_COLUMN,
+    STORE_MAILBOX_COLUMN,
+    N_COLUMNS
+};
+
+static void
+server_row_activated(GtkTreeView       *tree_view,
+                     GtkTreePath       *path,
+                     GtkTreeViewColumn *column,
+                     gpointer           user_data)
+{
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+    GtkWidget *dialog;
+
+    model = gtk_tree_view_get_model(tree_view);
+    if (gtk_tree_model_get_iter(model, &iter, path)) {
+        LibBalsaMailbox *mailbox;
+
+        gtk_tree_model_get(model, &iter,
+                           STORE_MAILBOX_COLUMN, &mailbox,
+                           -1);
+        if (mailbox != NULL) {
+            bw_check_mailbox(mailbox);
+            g_object_unref(mailbox);
+        } else {
+            BalsaWindow *window = BALSA_WINDOW(user_data);
+
+            bw_check_new_messages(window);
+        }
+    }
+
+    dialog = gtk_widget_get_toplevel(GTK_WIDGET(tree_view));
+    gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+}
+
 static void
 get_new_mail_activated(GSimpleAction * action,
                        GVariant      * parameter,
                        gpointer        user_data)
 {
     BalsaWindow *window = BALSA_WINDOW(user_data);
+    GList *list;
+    GtkWidget *dialog_widget;
+    GtkDialog *dialog;
+    GtkWidget *content_area;
+    GtkListStore *store;
+    GtkTreeIter iter;
+    GtkWidget *tree;
+    GtkTreeView *tree_view;
+    GtkCellRenderer *renderer;
+    GtkTreeViewColumn *column;
+
+    list = balsa_app.inbox_input;
+    if (list == NULL || list->next == NULL) {
+        /* At most one POP3 server is configured; just check it. */
+        bw_check_new_messages(window);
+        return;
+    }
+
+    /* Multiple POP3 servers are configured; pop up a dialog to allow
+     * the user to check all of them, or to select just one. */
+    dialog_widget =
+	gtk_dialog_new_with_buttons(_("Check POP3 Servers…"),
+                                    GTK_WINDOW(window),
+                                    GTK_DIALOG_DESTROY_WITH_PARENT |
+                                    libbalsa_dialog_flags(),
+                                    _("_Cancel"), GTK_RESPONSE_CANCEL,
+                                    NULL);
+    dialog = GTK_DIALOG(dialog_widget);
+    content_area = gtk_dialog_get_content_area(dialog);
+
+    store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, LIBBALSA_TYPE_MAILBOX);
+    gtk_list_store_append(store, &iter);
+    gtk_list_store_set(store, &iter,
+                       STORE_SERVER_COLUMN, _("All servers"),
+                       -1);
+    do {
+        BalsaMailboxNode *mbnode;
+        LibBalsaMailbox *mailbox;
 
-    check_new_messages_real(window, TYPE_CALLBACK);
+        if ((mbnode = list->data) != NULL &&
+            (mailbox = mbnode->mailbox) != NULL) {
 
-    if (balsa_app.check_mail_auto) {
-        /* restart the timer */
-        update_timer(TRUE, balsa_app.check_mail_timer);
-    }
+            gtk_list_store_append(store, &iter);
+            gtk_list_store_set(store, &iter,
+                               STORE_MAILBOX_COLUMN, mailbox,
+                               STORE_SERVER_COLUMN, mailbox->name,
+                               -1);
+        }
+        list = list->next;
+    } while (list != NULL);
+
+    tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+    g_object_unref(store);
+
+    renderer = gtk_cell_renderer_text_new();
+    column = gtk_tree_view_column_new_with_attributes("Server", renderer,
+                                                      "text", STORE_SERVER_COLUMN,
+                                                      NULL);
+    tree_view = GTK_TREE_VIEW(tree);
+    gtk_tree_view_append_column(tree_view, column);
+    gtk_tree_view_set_headers_visible(tree_view, FALSE);
+
+    gtk_tree_view_set_activate_on_single_click(tree_view, TRUE);
+    g_signal_connect(tree, "row-activated",
+                     G_CALLBACK(server_row_activated), window);
+
+    gtk_container_add(GTK_CONTAINER(content_area), tree);
+    gtk_widget_show(tree);
+
+    gtk_dialog_run(dialog);
+    gtk_widget_destroy(dialog_widget);
 }
 
 static void
@@ -3182,6 +3289,15 @@ bw_is_open_mailbox(LibBalsaMailbox *m)
 /* Check all mailboxes in a list
  *
  */
+static void
+bw_check_mailbox(LibBalsaMailbox *mailbox)
+{
+    libbalsa_mailbox_pop3_set_inbox(mailbox, balsa_app.inbox);
+    libbalsa_mailbox_pop3_set_msg_size_limit
+        (LIBBALSA_MAILBOX_POP3(mailbox), balsa_app.msg_size_limit*1024);
+    libbalsa_mailbox_check(mailbox);
+}
+
 static void
 bw_check_mailbox_list(BalsaWindow * window, GList * mailbox_list)
 {
@@ -3192,10 +3308,8 @@ bw_check_mailbox_list(BalsaWindow * window, GList * mailbox_list)
     for ( ; mailbox_list; mailbox_list = mailbox_list->next) {
         LibBalsaMailbox *mailbox =
             BALSA_MAILBOX_NODE(mailbox_list->data)->mailbox;
-        libbalsa_mailbox_pop3_set_inbox(mailbox, balsa_app.inbox);
-        libbalsa_mailbox_pop3_set_msg_size_limit
-            (LIBBALSA_MAILBOX_POP3(mailbox), balsa_app.msg_size_limit*1024);
-        libbalsa_mailbox_check(mailbox);
+
+        bw_check_mailbox(mailbox);
     }
 }
 
