diff --git a/mailnews/imap/src/nsImapIncomingServer.cpp b/mailnews/imap/src/nsImapIncomingServer.cpp
--- a/mailnews/imap/src/nsImapIncomingServer.cpp
+++ b/mailnews/imap/src/nsImapIncomingServer.cpp
@@ -2247,17 +2291,29 @@ nsImapIncomingServer::OnStopRunningUrl(n
       break;
     case nsIImapUrl::nsImapDiscoverAllBoxesUrl:
       if (NS_SUCCEEDED(exitCode))
         DiscoveryDone();
       break;
     case nsIImapUrl::nsImapFolderStatus:
     {
       PRInt32 folderCount = m_foldersToStat.Count();
+      nsCOMPtr<nsIMsgFolder> msgFolder(
+          do_QueryInterface(m_foldersToStat[folderCount - 1]));
+      nsresult rv;
+      nsCOMPtr<nsIMsgMailSession> session =
+               do_GetService(NS_MSGMAILSESSION_CONTRACTID, &rv);
+      NS_ENSURE_SUCCESS(rv, rv);
+      PRBool folderOpen;
+      session->IsFolderOpenInWindow(msgFolder, &folderOpen);
+      if (!folderOpen)
+        msgFolder->SetMsgDatabase(nsnull);
       m_foldersToStat.RemoveObjectAt(folderCount - 1);
+      // This should be done on a timeout, since we shouldn't start a new url
+      // from here.
       if (folderCount > 1)
         m_foldersToStat[folderCount - 2]->UpdateStatus(this, nsnull);
     }
     default:
         break;
     }
   }
   return NS_OK;
diff --git a/mailnews/imap/test/unit/test_imapStatusCloseDBs.js b/mailnews/imap/test/unit/test_imapStatusCloseDBs.js
new file mode 100644
--- /dev/null
+++ b/mailnews/imap/test/unit/test_imapStatusCloseDBs.js
@@ -0,0 +1,58 @@
+// This file tests that checking folders for new mail with STATUS
+// doesn't leave db's open.
+
+var gServer, gImapServer;
+var gIMAPInbox, gIMAPFolder1, gIMAPFolder2;
+
+function run_test() {
+  var daemon = new imapDaemon();
+  daemon.createMailbox("folder 1", {subscribed : true});
+  daemon.createMailbox("folder 2", {subscribed : true});
+  gServer = makeServer(daemon, "");
+
+  gImapServer = createLocalIMAPServer();
+  gImapServer.maximumConnectionsNumber = 1;
+
+  // Get the folder list...
+  gImapServer.performExpand(null);
+  gServer.performTest("SUBSCRIBE");
+
+  // pref tuning: one connection only, turn off notifications
+  let prefBranch = Cc["@mozilla.org/preferences-service;1"]
+                     .getService(Ci.nsIPrefBranch);
+  prefBranch.setBoolPref("mail.check_all_imap_folders_for_new", true);
+  // Make sure no biff notifications happen
+  prefBranch.setBoolPref("mail.biff.play_sound", false);
+  prefBranch.setBoolPref("mail.biff.show_alert", false);
+  prefBranch.setBoolPref("mail.biff.show_tray_icon", false);
+  prefBranch.setBoolPref("mail.biff.animate_dock_icon", false);
+
+  let rootFolder = gImapServer.rootFolder;
+  gIMAPInbox = rootFolder.getFolderWithFlags(Ci.nsMsgFolderFlags.Inbox);
+  gFolder1 = rootFolder.getChildNamed("folder 1");
+  gFolder2 = rootFolder.getChildNamed("folder 2");
+  do_test_pending();
+  gIMAPInbox.getNewMessages(null, null);
+  gServer.performTest("STATUS");
+  // don't know if this will work, but we'll try. Wait for
+  // second status response
+  gServer.performTest("STATUS");
+  do_timeout_function(1000, endTest);
+}
+
+function endTest()
+{
+  const gDbService = Cc["@mozilla.org/msgDatabase/msgDBService;1"]
+                       .getService(Ci.nsIMsgDBService);
+  do_check_neq(gDbService.cachedDBForFolder(gIMAPInbox), null);
+  do_check_eq(gDbService.cachedDBForFolder(gFolder1), null);
+  do_check_eq(gDbService.cachedDBForFolder(gFolder2), null);
+
+  // Clean up the server in preparation
+  gServer.resetTest();
+  gImapServer.closeCachedConnections();
+  gServer.performTest();
+  gServer.stop();
+
+  do_test_finished();
+}
