diff --git a/Source/SimulationManager/imstkSimulationManager.cpp b/Source/SimulationManager/imstkSimulationManager.cpp
index 46a0df0e5a4475ede6aed82c3b4dd4fdf44f5059..f2c2f4ab900f63c5cd66994ca77ddf7818e5ddbb 100644
--- a/Source/SimulationManager/imstkSimulationManager.cpp
+++ b/Source/SimulationManager/imstkSimulationManager.cpp
@@ -348,6 +348,8 @@ SimulationManager::launchSimulation()
     this->startModuleInNewThread(m_sceneManagerMap.at(m_activeSceneName));
 
     m_status = SimulationStatus::RUNNING;
+
+    m_simThreadLaunched = true;
 }
 
 void
@@ -384,9 +386,10 @@ SimulationManager::startSimulation(const SimulationStatus simStatus /*= Simulati
     }
 
     // Launch simulation right away if the simulator starts in running mode
-    if (simStatus == SimulationStatus::RUNNING)
+    this->launchSimulation();
+    if (simStatus == SimulationStatus::PAUSED)
     {
-        this->launchSimulation();
+        this->pauseSimulation();
     }
 
     if (m_viewer)
diff --git a/Source/SimulationManager/imstkSimulationManager.h b/Source/SimulationManager/imstkSimulationManager.h
index 226a5334c5574f1d4d36adb4c34a8a352e0c7777..2b1e854aee1c6039cf5f02d8371a18f783191749 100644
--- a/Source/SimulationManager/imstkSimulationManager.h
+++ b/Source/SimulationManager/imstkSimulationManager.h
@@ -203,6 +203,8 @@ private:
 
     std::shared_ptr<Viewer> m_viewer = nullptr;
     std::shared_ptr<LogUtility> m_logUtil = std::make_shared<LogUtility>();
+
+    bool m_simThreadLaunched = false;
 };
 } // imstk