diff --git a/src/mongo/dbtests/replica_set_monitor_test.cpp b/src/mongo/dbtests/replica_set_monitor_test.cpp
index 59d8014..a26d7a6 100644
--- a/src/mongo/dbtests/replica_set_monitor_test.cpp
+++ b/src/mongo/dbtests/replica_set_monitor_test.cpp
@@ -25,7 +25,10 @@
 #include "mongo/dbtests/mock/mock_conn_registry.h"
 #include "mongo/dbtests/mock/mock_replica_set.h"
 #include "mongo/unittest/unittest.h"
+#include "mongo/util/concurrency/ticketholder.h"
+#include "mongo/util/timer.h"
 
+#include <boost/thread/thread.hpp>
 #include <vector>
 
 using std::map;
@@ -41,6 +44,7 @@ using mongo::BSONElement;
 using mongo::ConnectionString;
 using mongo::HostAndPort;
 using mongo::MockReplicaSet;
+using mongo::DBClientReplicaSet;
 using mongo::ReadPreference;
 using mongo::ReplicaSetMonitor;
 using mongo::ReplicaSetMonitorPtr;
@@ -1535,10 +1539,15 @@ namespace mongo_test {
      * Warning: Tests running this fixture cannot be run in parallel with other tests
      * that uses ConnectionString::setConnectionHook
      */
+    template<size_t nodeCount>
     class ReplicaSetMonitorTest: public mongo::unittest::Test {
     protected:
         void setUp() {
-            _replSet.reset(new MockReplicaSet("test", 3));
+            for (size_t x = 0; x < nodeCount; x++) {
+                _replSet.push_back(
+                        new MockReplicaSet(mongo::str::stream() << "test" << x << "_", 3));
+            }
+
             _originalConnectionHook = ConnectionString::getConnectionHook();
             ConnectionString::setConnectionHook(
                     mongo::MockConnRegistry::get()->getConnStrHook());
@@ -1546,24 +1555,33 @@ namespace mongo_test {
 
         void tearDown() {
             ConnectionString::setConnectionHook(_originalConnectionHook);
-            ReplicaSetMonitor::remove(_replSet->getSetName(), true);
-            _replSet.reset();
+
+            for (vector<MockReplicaSet*>::iterator iter = _replSet.begin();
+                    iter != _replSet.end(); ++iter) {
+                ReplicaSetMonitor::remove((*iter)->getSetName(), true);
+                delete *iter;
+            }
+
             mongo::ScopedDbConnection::clearPool();
         }
 
-        MockReplicaSet* getReplSet() {
-            return _replSet.get();
+        MockReplicaSet* getReplSet(size_t index) {
+            verify(index < _replSet.size());
+            return _replSet[index];
         }
 
     private:
         ConnectionString::ConnectionHook* _originalConnectionHook;
-        boost::scoped_ptr<MockReplicaSet> _replSet;
+        vector<MockReplicaSet*> _replSet;
     };
 
-    TEST_F(ReplicaSetMonitorTest, SeedWithPriOnlySecDown) {
+    typedef ReplicaSetMonitorTest<1> OneSetTest;
+    typedef ReplicaSetMonitorTest<2> TwoSetTest;
+
+    TEST_F(OneSetTest, SeedWithPriOnlySecDown) {
         // Test to make sure that the monitor doesn't crash when
         // ConnectionString::connect returns NULL
-        MockReplicaSet* replSet = getReplSet();
+        MockReplicaSet* replSet = getReplSet(0);
         replSet->kill(replSet->getSecondaries());
 
         // Create a monitor with primary as the only seed list and the two secondaries
@@ -1631,6 +1649,40 @@ namespace mongo_test {
         mongo::ScopedDbConnection::clearPool();
     }
 
+    void replConnect(DBClientReplicaSet* replConn, bool* done) {
+        mongo::setThreadName("otherReplConn");
+        replConn->connect();
+        *done = true;
+    }
+
+    TEST_F(TwoSetTest, SeedWithPriOnlySecDown) {
+        MockReplicaSet* replSet = getReplSet(1);
+        replSet->getNode(replSet->getPrimary())->setDelay(5*1000);
+        DBClientReplicaSet replConn(replSet->getSetName(), replSet->getHosts());
+
+        MockReplicaSet* replSet2 = getReplSet(0);
+        DBClientReplicaSet replConn2(replSet2->getSetName(), replSet2->getHosts());
+
+        bool done = false;
+        // remove monitor but save seed list.
+        ReplicaSetMonitor::remove(replSet->getSetName(), false);
+        boost::thread connThread = boost::thread(replConnect, &replConn, &done);
+
+        // Give a little bit of time for the other thread to grab _sets lock
+        mongo::sleepmillis(200);
+
+        mongo::Timer timer;
+        replConn2.connect();
+        const int elapsedMillis = timer.millis();
+
+        // Join thread first before trying to assert.
+        connThread.join();
+
+        ASSERT_LESS_THAN(elapsedMillis, 3000);
+
+        ASSERT_TRUE(done);
+    }
+
     /**
      * Warning: Tests running this fixture cannot be run in parallel with other tests
      * that use ConnectionString::setConnectionHook.
