diff --git a/src/jamidht/conversation.cpp b/src/jamidht/conversation.cpp
index 18adc6747627bd02df6c8899b35e3d83e72064e3..9146ed0ea77c61cc773d331b8b28ee883b209d86 100644
--- a/src/jamidht/conversation.cpp
+++ b/src/jamidht/conversation.cpp
@@ -2339,6 +2339,7 @@ Conversation::bootstrap(std::function<void()> onBootstraped,
     pimpl_->checkedMembers_.clear();
     // If is shutdown, the conversation was re-added, causing no new nodes to be connected, but just a classic connectivity change
     if (pimpl_->swarmManager_->isShutdown()) {
+        pimpl_->swarmManager_->restart();
         pimpl_->swarmManager_->maintainBuckets();
     } else if (!pimpl_->swarmManager_->setKnownNodes(devices)) {
         fallback(this, true);
diff --git a/src/jamidht/swarm/swarm_manager.cpp b/src/jamidht/swarm/swarm_manager.cpp
index c680a3df7280db5e927279c889f928b447371109..832e1b2b04e381ad1d9e7c8ec9445a2537a71698 100644
--- a/src/jamidht/swarm/swarm_manager.cpp
+++ b/src/jamidht/swarm/swarm_manager.cpp
@@ -146,6 +146,12 @@ SwarmManager::shutdown()
     routing_table.shutdownAllNodes();
 }
 
+void
+SwarmManager::restart()
+{
+    isShutdown_ = false;
+}
+
 bool
 SwarmManager::addKnownNode(const NodeId& nodeId)
 {
diff --git a/src/jamidht/swarm/swarm_manager.h b/src/jamidht/swarm/swarm_manager.h
index 93bcb844082328184492b2dd2a3956483658c281..e35f39e1742321742329c3a4e26d2d2dd06c760e 100644
--- a/src/jamidht/swarm/swarm_manager.h
+++ b/src/jamidht/swarm/swarm_manager.h
@@ -112,6 +112,14 @@ public:
      */
     void shutdown();
 
+    /**
+     * Restart the swarm manager.
+     *
+     * This function must be called in situations where we want
+     * to use a swarm manager that was previously shut down.
+     */
+    void restart();
+
     /**
      * Display swarm manager info
      */