diff --git a/Base/SceneElements/Objects/imstkCollidingObject.h b/Base/SceneElements/Objects/imstkCollidingObject.h
index c097f672c7dfc34f409e18ccac0b1756635232d9..1c35ba64e446f43221f8c64b16fc525ff46ca469 100644
--- a/Base/SceneElements/Objects/imstkCollidingObject.h
+++ b/Base/SceneElements/Objects/imstkCollidingObject.h
@@ -37,7 +37,7 @@ public:
 
     CollidingObject(std::string name) : SceneObject(name)
     {
-        m_type = Type::Static;
+        m_type = SceneObject::Type::Static;
     }
 
     ~CollidingObject() = default;
diff --git a/Base/Scene/Object/imstkDeformableBodyModel.h b/Base/SceneElements/Objects/imstkDeformableBodyModel.h
similarity index 100%
rename from Base/Scene/Object/imstkDeformableBodyModel.h
rename to Base/SceneElements/Objects/imstkDeformableBodyModel.h
diff --git a/Base/SceneElements/Objects/imstkDeformableObject.h b/Base/SceneElements/Objects/imstkDeformableObject.h
index 91859183f763f7d3e294a3fa066fe87466fef012..65ed828d2677af74b0851405f5883fa8d9d1ec5a 100644
--- a/Base/SceneElements/Objects/imstkDeformableObject.h
+++ b/Base/SceneElements/Objects/imstkDeformableObject.h
@@ -27,7 +27,7 @@
 
 #include "imstkDynamicObject.h"
 #include "imstkDynamicalModel.h"
-#include "imstkTimeIntegrator.h"
+//#include "imstkTimeIntegrator.h"
 #include "imstkKinematicState.h"
 #include "imstkMath.h"
 
@@ -48,7 +48,7 @@ public:
     ///
     DeformableObject(std::string name) : DynamicObject(name)
     {
-        m_type = SceneObjectType::Deformable;
+        m_type = SceneObject::Type::Deformable;
     }
 
     ///
@@ -86,7 +86,7 @@ public:
     ///
     /// \brief Set the integration scheme used to solve the ODE system.
     ///
-    void setTimeIntegrator(TimeIntegratorType integrator);
+    //void setTimeIntegrator(TimeIntegrator::Type integrator);
 
 protected:
 
diff --git a/Base/Scene/Object/imstkDynamicObject.cpp b/Base/SceneElements/Objects/imstkDynamicObject.cpp
similarity index 100%
rename from Base/Scene/Object/imstkDynamicObject.cpp
rename to Base/SceneElements/Objects/imstkDynamicObject.cpp
diff --git a/Base/Scene/Object/imstkDynamicObject.h b/Base/SceneElements/Objects/imstkDynamicObject.h
similarity index 100%
rename from Base/Scene/Object/imstkDynamicObject.h
rename to Base/SceneElements/Objects/imstkDynamicObject.h
diff --git a/Base/Scene/Object/imstkDynamicalModel.h b/Base/SceneElements/Objects/imstkDynamicalModel.h
similarity index 100%
rename from Base/Scene/Object/imstkDynamicalModel.h
rename to Base/SceneElements/Objects/imstkDynamicalModel.h
diff --git a/Base/Scene/Object/imstkKinematicState.cpp b/Base/SceneElements/Objects/imstkKinematicState.cpp
similarity index 89%
rename from Base/Scene/Object/imstkKinematicState.cpp
rename to Base/SceneElements/Objects/imstkKinematicState.cpp
index 936d6155cb8c482237a7308f54a64e21a3bb3a12..5de40887708eeb3fd6304b9b8938343f0eccb84a 100644
--- a/Base/Scene/Object/imstkKinematicState.cpp
+++ b/Base/SceneElements/Objects/imstkKinematicState.cpp
@@ -24,10 +24,4 @@
 namespace imstk
 {
 
-KinematicState::KinematicState(const T& u, const T& v)
-{
-    m_displacement = u;
-    m_velocity = v;
-}
-
 }
diff --git a/Base/Scene/Object/imstkKinematicState.h b/Base/SceneElements/Objects/imstkKinematicState.h
similarity index 100%
rename from Base/Scene/Object/imstkKinematicState.h
rename to Base/SceneElements/Objects/imstkKinematicState.h
diff --git a/Base/Scene/Object/imstkRigidObject.cpp b/Base/SceneElements/Objects/imstkRigidObject.cpp
similarity index 100%
rename from Base/Scene/Object/imstkRigidObject.cpp
rename to Base/SceneElements/Objects/imstkRigidObject.cpp
diff --git a/Base/Scene/Object/imstkRigidObject.h b/Base/SceneElements/Objects/imstkRigidObject.h
similarity index 100%
rename from Base/Scene/Object/imstkRigidObject.h
rename to Base/SceneElements/Objects/imstkRigidObject.h
diff --git a/Base/SceneElements/Objects/imstkSceneObject.cpp b/Base/SceneElements/Objects/imstkSceneObject.cpp
index 5d19c22cc9905cf512d34188787c7973626d08e1..d334cbe132eaf8ce0cf30a7df192ef40438a20c8 100644
--- a/Base/SceneElements/Objects/imstkSceneObject.cpp
+++ b/Base/SceneElements/Objects/imstkSceneObject.cpp
@@ -36,14 +36,14 @@ SceneObject::setVisualGeometry(std::shared_ptr<Geometry> geometry)
     m_visualGeometry = geometry;
 }
 
-const SceneObjectType&
+const SceneObject::Type&
 SceneObject::getType() const
 {
     return m_type;
 }
 
 void
-SceneObject::setType(SceneObjectType type)
+SceneObject::setType(SceneObject::Type type)
 {
     m_type = type;
 }
diff --git a/Base/SceneElements/Objects/imstkSceneObject.h b/Base/SceneElements/Objects/imstkSceneObject.h
index 4fbb4a2b7c874ca5ed299e98a47034c2bdf47440..f5d2b4f4be7e35c9553bfa0c9c294d8e2d59dda3 100644
--- a/Base/SceneElements/Objects/imstkSceneObject.h
+++ b/Base/SceneElements/Objects/imstkSceneObject.h
@@ -30,15 +30,6 @@
 
 namespace imstk {
 
-enum class SceneObjectType
-{
-    Static,
-    Dynamic,
-    Rigid,
-    Deformable,
-    VirtualTool,
-};
-
 //class Geometry;
 //class GeometryMap;
 
@@ -51,6 +42,14 @@ enum class SceneObjectType
 class SceneObject
 {
 public:
+    enum class Type
+    {
+        Static,
+        Dynamic,
+        Rigid,
+        Deformable,
+        VirtualCoupling
+    };
 
     ///
     /// \brief Constructor
@@ -65,7 +64,7 @@ public:
     ///
     /// \brief Get the type of the object
     ///
-    const SceneObjectType& getType() const;
+    const Type& getType() const;
 
     ///
     /// \brief Get/Set the custom name of the scene object
@@ -95,9 +94,9 @@ protected:
     ///
     /// \brief Assigns the type of the object
     ///
-    void setType(SceneObjectType type);
+    void setType(Type type);
 
-    SceneObjectType m_type = SceneObjectType::Static; ///> Type of the scene object
+    Type m_type = Type::Static; ///> Type of the scene object
     std::string m_name; ///> Custom name of the scene object
 
     std::shared_ptr<Geometry> m_visualGeometry;          ///> Geometry for rendering
diff --git a/Base/SimulationManager/imstkSceneManager.cpp b/Base/SimulationManager/imstkSceneManager.cpp
index 8d87e2685ba3259e43f4599e96b64bdc4d68b7ca..d402e0f37b0c3b38700308b51081061fd18a5553 100644
--- a/Base/SimulationManager/imstkSceneManager.cpp
+++ b/Base/SimulationManager/imstkSceneManager.cpp
@@ -22,7 +22,7 @@
 #include "imstkSceneManager.h"
 
 #include "imstkCameraController.h"
-#include "imstkVirtualToolObject.h"
+#include "imstkVirtualCouplingObject.h"
 
 #include "g3log/g3log.hpp"
 
@@ -46,7 +46,7 @@ SceneManager::initModule()
     // Init virtual coupling objects offsets
     for (auto obj : m_scene->getSceneObjects())
     {
-        if (auto virtualCoupling = std::dynamic_pointer_cast<VirtualToolObject>(obj))
+        if (auto virtualCoupling = std::dynamic_pointer_cast<VirtualCouplingObject>(obj))
         {
             virtualCoupling->initOffsets();
         }
@@ -66,7 +66,7 @@ SceneManager::runModule()
     // Update virtualCoupling objects based on devices
     for (auto obj : m_scene->getSceneObjects())
     {
-        if (auto virtualCoupling = std::dynamic_pointer_cast<VirtualToolObject>(obj))
+        if (auto virtualCoupling = std::dynamic_pointer_cast<VirtualCouplingObject>(obj))
         {
             virtualCoupling->updateFromDevice();
             virtualCoupling->applyForces();
diff --git a/Base/Solvers/CMakeLists.txt b/Base/Solvers/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..996abd97b496e7d9f7bc0ae59f93fea8ec307cf0
--- /dev/null
+++ b/Base/Solvers/CMakeLists.txt
@@ -0,0 +1,15 @@
+#-----------------------------------------------------------------------------
+# Create target
+#-----------------------------------------------------------------------------
+include(imstkAddLibrary)
+imstk_add_library( Solvers
+  DEPENDS
+    Core
+  )
+
+#-----------------------------------------------------------------------------
+# Testing
+#-----------------------------------------------------------------------------
+if( iMSTK_BUILD_TESTING )
+  add_subdirectory( Testing )
+endif()
diff --git a/Base/TimeIntegrators/CMakeLists.txt b/Base/TimeIntegrators/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..718b49a2fdb2602548dcb3bb3b2f55438da89544
--- /dev/null
+++ b/Base/TimeIntegrators/CMakeLists.txt
@@ -0,0 +1,15 @@
+#-----------------------------------------------------------------------------
+# Create target
+#-----------------------------------------------------------------------------
+include(imstkAddLibrary)
+imstk_add_library( TimeIntegrators
+  DEPENDS
+    Core
+  )
+
+#-----------------------------------------------------------------------------
+# Testing
+#-----------------------------------------------------------------------------
+if( iMSTK_BUILD_TESTING )
+  add_subdirectory( Testing )
+endif()
diff --git a/Base/Scene/Object/imstkTimeIntegrator.cpp b/Base/TimeIntegrators/imstkTimeIntegrator.cpp
similarity index 100%
rename from Base/Scene/Object/imstkTimeIntegrator.cpp
rename to Base/TimeIntegrators/imstkTimeIntegrator.cpp
diff --git a/Base/Scene/Object/imstkTimeIntegrator.h b/Base/TimeIntegrators/imstkTimeIntegrator.h
similarity index 94%
rename from Base/Scene/Object/imstkTimeIntegrator.h
rename to Base/TimeIntegrators/imstkTimeIntegrator.h
index 3f5367dca565284f6e1cd913f308a69d5124a533..16e1a6864f7680c3dcf1b70e6dd56e84a9d071b7 100644
--- a/Base/Scene/Object/imstkTimeIntegrator.h
+++ b/Base/TimeIntegrators/imstkTimeIntegrator.h
@@ -28,14 +28,6 @@
 namespace imstk
 {
 
-enum class TimeIntegratorType
-{
-    forwardEuler,
-    backwardEuler,
-    newmarkBeta,
-    centralDifference
-};
-
 ///
 /// \class TimeIntegrator
 ///
diff --git a/Examples/Sandbox/main.cpp b/Examples/Sandbox/main.cpp
index aa159bb77fa1065e3dd7b79332f165cf5c86358b..d8769ef15fbc934cd98f0e40dce95ddd1d351a82 100644
--- a/Examples/Sandbox/main.cpp
+++ b/Examples/Sandbox/main.cpp
@@ -10,7 +10,7 @@
 
 // Objects
 #include "imstkSceneObject.h"
-#include "imstkVirtualToolObject.h"
+#include "imstkVirtualCouplingObject.h"
 #include "imstkLight.h"
 #include "imstkCamera.h"
 
@@ -253,7 +253,7 @@ void testTwoFalcons()
     auto sphere0Geom = std::make_shared<imstk::Sphere>();
     sphere0Geom->setPosition(imstk::Vec3d(16,4.5,0));
     sphere0Geom->scale(1);
-    auto sphere0Obj = std::make_shared<imstk::VirtualToolObject>("Sphere0", falcon0, 30);
+    auto sphere0Obj = std::make_shared<imstk::VirtualCouplingObject>("Sphere0", falcon0, 30);
     sphere0Obj->setVisualGeometry(sphere0Geom);
     sphere0Obj->setCollidingGeometry(sphere0Geom);
     scene->addSceneObject(sphere0Obj);
@@ -262,7 +262,7 @@ void testTwoFalcons()
     auto sphere1Geom = std::make_shared<imstk::Sphere>();
     sphere1Geom->setPosition(imstk::Vec3d(-16,4.5,0));
     sphere1Geom->scale(1);
-    auto sphere1Obj = std::make_shared<imstk::VirtualToolObject>("Sphere1", falcon1, 30);
+    auto sphere1Obj = std::make_shared<imstk::VirtualCouplingObject>("Sphere1", falcon1, 30);
     sphere1Obj->setVisualGeometry(sphere1Geom);
     sphere1Obj->setCollidingGeometry(sphere1Geom);
     scene->addSceneObject(sphere1Obj);