}
 
     if (*database_path == NULL) {
-       *message = strdup ("Error: Cannot open a database for a NULL path.\n");
-       return NOTMUCH_STATUS_NULL_POINTER;
+       *message = strdup ("Error: could not locate database.\n");
+       return NOTMUCH_STATUS_NO_DATABASE;
     }
 
     if (*database_path[0] != '/') {
     char *message; /* ignored */
 
     if (_db_dir_exists (database_path, &message))
-       return NOTMUCH_STATUS_SUCCESS;
+       return NOTMUCH_STATUS_NO_DATABASE;
 
     _set_database_path (notmuch, database_path);
 
     if (_notmuch_choose_xapian_path (notmuch, database_path, ¬much->xapian_path, &message))
-       return NOTMUCH_STATUS_SUCCESS;
+       return NOTMUCH_STATUS_NO_DATABASE;
 
     (void) _finish_open (notmuch, profile, NOTMUCH_DATABASE_MODE_READ_ONLY, key_file, &message);
 
     status = _choose_database_path (local, profile, key_file,
                                    &database_path, &split, &message);
     switch (status) {
-    /* weirdly NULL_POINTER is what is returned if we fail to find
-     * a database */
-    case NOTMUCH_STATUS_NULL_POINTER:
+    case NOTMUCH_STATUS_NO_DATABASE:
     case NOTMUCH_STATUS_SUCCESS:
+       if (! warning)
+           warning = status;
        break;
     default:
        goto DONE;
     }
 
+
     if (database_path) {
        status = _maybe_load_config_from_database (notmuch, key_file, database_path, profile);
-       if (status)
+       switch (status) {
+       case NOTMUCH_STATUS_NO_DATABASE:
+       case NOTMUCH_STATUS_SUCCESS:
+           if (! warning)
+               warning = status;
+           break;
+       default:
            goto DONE;
+       }
     }
 
     if (key_file) {
 
                 notmuch_database_t *notmuch,
                 unused(int argc), unused(char **argv))
 {
-    char *db_path;
-    struct stat st;
-
     /* If the user has never configured notmuch, then run
      * notmuch_setup_command which will give a nice welcome message,
      * and interactively guide the user through the configuration. */
     if (notmuch_config_is_new (config))
        return notmuch_setup_command (config, notmuch, 0, NULL);
 
-    /* Notmuch is already configured, but is there a database? */
-    db_path = talloc_asprintf (config, "%s/%s",
-                              notmuch_config_get (notmuch, NOTMUCH_CONFIG_DATABASE_PATH),
-                              ".notmuch");
-    if (stat (db_path, &st)) {
-       if (errno != ENOENT) {
-           fprintf (stderr, "Error looking for notmuch database at %s: %s\n",
-                    db_path, strerror (errno));
-           return EXIT_FAILURE;
-       }
-       printf ("Notmuch is configured, but there's not yet a database at\n\n\t%s\n\n",
-               db_path);
-       printf ("You probably want to run \"notmuch new\" now to create that database.\n\n"
-               "Note that the first run of \"notmuch new\" can take a very long time\n"
-               "and that the resulting database will use roughly the same amount of\n"
-               "storage space as the email being indexed.\n\n");
-       return EXIT_SUCCESS;
-    }
-
     printf ("Notmuch is configured and appears to have a database. Excellent!\n\n"
            "At this point you can start exploring the functionality of notmuch by\n"
            "using commands such as:\n\n"
            fputs ("Try running 'notmuch setup' to create a configuration.", stderr);
            goto DONE;
        }
-
-       if (status && (status != NOTMUCH_STATUS_NO_CONFIG)) {
-           if (status_string) {
-               fputs (status_string, stderr);
-               free (status_string);
+       switch (status) {
+       case NOTMUCH_STATUS_NO_CONFIG:
+           if (! (command->mode & NOTMUCH_COMMAND_CONFIG_CREATE)) {
+               fputs ("Try running 'notmuch setup' to create a configuration.", stderr);
+               goto DONE;
+           }
+           break;
+       case NOTMUCH_STATUS_NO_DATABASE:
+           if (! command_name) {
+               printf ("Notmuch is configured, but no database was found.\n");
+               printf ("You probably want to run \"notmuch new\" now to create a database.\n\n"
+                       "Note that the first run of \"notmuch new\" can take a very long time\n"
+                       "and that the resulting database will use roughly the same amount of\n"
+                       "storage space as the email being indexed.\n\n");
+               status = NOTMUCH_STATUS_SUCCESS;
+               goto DONE;
            }
+           break;
+       case NOTMUCH_STATUS_SUCCESS:
+           break;
+       default:
            goto DONE;
        }
 
 
 test_begin_subtest "notmuch with a config but without a database suggests notmuch new"
 notmuch 2>&1 | notmuch_dir_sanitize > OUTPUT
 cat <<EOF > EXPECTED
-Notmuch is configured, but there's not yet a database at
-
-       MAIL_DIR/.notmuch
-
-You probably want to run "notmuch new" now to create that database.
+Notmuch is configured, but no database was found.
+You probably want to run "notmuch new" now to create a database.
 
 Note that the first run of "notmuch new" can take a very long time
 and that the resulting database will use roughly the same amount of
 
        "$output" \
        "Welcome to a new version of notmuch! Your database will now be upgraded."
 
+    test_begin_subtest "notmuch +config -database suggests notmuch new ($config)"
+    mv "$XAPIAN_PATH" "${XAPIAN_PATH}.bak"
+    notmuch > OUTPUT
+cat <<EOF > EXPECTED
+Notmuch is configured, but no database was found.
+You probably want to run "notmuch new" now to create a database.
+
+Note that the first run of "notmuch new" can take a very long time
+and that the resulting database will use roughly the same amount of
+storage space as the email being indexed.
+
+EOF
+    mv "${XAPIAN_PATH}.bak" "$XAPIAN_PATH"
+
+   test_expect_equal_file EXPECTED OUTPUT
+
     restore_config
 done