diff --git a/Base/Constraint/PbdConstraints/imstkPbdConstraint.h b/Base/Constraint/PbdConstraints/imstkPbdConstraint.h
index 81952aebcd89ed02cdc3a1ea7b81ed24873d4dca..8176be0b060b0269319c6ff9ea95dd4312f0c9bf 100644
--- a/Base/Constraint/PbdConstraints/imstkPbdConstraint.h
+++ b/Base/Constraint/PbdConstraints/imstkPbdConstraint.h
@@ -62,17 +62,6 @@ public:
     ///
     virtual Type getType() const = 0;
 
-    ///
-    /// \brief update constraint
-    /// \param model \class PbdModel
-    /// \return true if succeeded
-    /// TODO: Remove this or implement for child classes in future
-    ///
-    virtual bool updateConstraint(PbdModel& model)
-    {
-        return true;
-    }
-
     ///
     /// \brief compute delta position from the constraint function
     /// \param model \class PbdModel
@@ -80,17 +69,6 @@ public:
     ///
     virtual bool solvePositionConstraint(PbdModel& model) = 0;
 
-    ///
-    /// \brief compute delta velocity, specifically for rigid bodies
-    /// \param model \class PbdModel
-    /// \return true if succeeded
-    /// TODO: Remove this or implement for child classes in future
-    ///
-    virtual bool solveVelocityConstraint(PbdModel& model)
-    {
-        return true;
-    }
-
 public:
     std::vector<size_t> m_vertexIds; ///> index of points for the constraint
 };
diff --git a/Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.cpp b/Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.cpp
similarity index 87%
rename from Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.cpp
rename to Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.cpp
index a6e7515fce339d49b15a5bea88b2312e5a4a9424..c13973440c59439a100dc25e78ec544a4183e196 100644
--- a/Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.cpp
+++ b/Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.cpp
@@ -22,7 +22,7 @@
 #include <fstream>
 
 //imstk
-#include "imstkDeformableBodyModel.h"
+#include "imstkFEMDeformableBodyModel.h"
 
 // vega
 #include "generateMassMatrix.h"
@@ -31,65 +31,65 @@
 namespace imstk
 {
 
-DeformableBodyModel::DeformableBodyModel() :
+FEMDeformableBodyModel::FEMDeformableBodyModel() :
 DynamicalModel(DynamicalModelType::elastoDynamics), m_damped(false){}
 
 void
-DeformableBodyModel::setForceModelConfiguration(std::shared_ptr<ForceModelConfig> fmConfig)
+FEMDeformableBodyModel::setForceModelConfiguration(std::shared_ptr<ForceModelConfig> fmConfig)
 {
     m_forceModelConfiguration = fmConfig;
 }
 
 std::shared_ptr<imstk::ForceModelConfig>
-DeformableBodyModel::getForceModelConfiguration() const
+FEMDeformableBodyModel::getForceModelConfiguration() const
 {
     return m_forceModelConfiguration;
 }
 
 void
-DeformableBodyModel::setInternalForceModel(std::shared_ptr<InternalForceModel> fm)
+FEMDeformableBodyModel::setInternalForceModel(std::shared_ptr<InternalForceModel> fm)
 {
     m_internalForceModel = fm;
 }
 
 std::shared_ptr<imstk::InternalForceModel>
-DeformableBodyModel::getInternalForceModel() const
+FEMDeformableBodyModel::getInternalForceModel() const
 {
     return m_internalForceModel;
 }
 
 void
-DeformableBodyModel::setTimeIntegrator(std::shared_ptr<TimeIntegrator> timeIntegrator)
+FEMDeformableBodyModel::setTimeIntegrator(std::shared_ptr<TimeIntegrator> timeIntegrator)
 {
     m_timeIntegrator = timeIntegrator;
 }
 
 std::shared_ptr<imstk::TimeIntegrator>
-DeformableBodyModel::getTimeIntegrator() const
+FEMDeformableBodyModel::getTimeIntegrator() const
 {
     return m_timeIntegrator;
 }
 
 void
-DeformableBodyModel::setModelGeometry(std::shared_ptr<Geometry> geometry)
+FEMDeformableBodyModel::setModelGeometry(std::shared_ptr<Geometry> geometry)
 {
     m_forceModelGeometry = geometry;
 }
 
 std::shared_ptr<imstk::Geometry>
-DeformableBodyModel::getModelGeometry()
+FEMDeformableBodyModel::getModelGeometry()
 {
     return m_forceModelGeometry;
 }
 
 void
-DeformableBodyModel::configure(const std::string& configFileName)
+FEMDeformableBodyModel::configure(const std::string& configFileName)
 {
     m_forceModelConfiguration = std::make_shared<ForceModelConfig>(configFileName);
 }
 
 void
-DeformableBodyModel::initialize(std::shared_ptr<VolumetricMesh> physicsMesh)
+FEMDeformableBodyModel::initialize(std::shared_ptr<VolumetricMesh> physicsMesh)
 {
     this->setModelGeometry(physicsMesh);
 
@@ -122,7 +122,7 @@ DeformableBodyModel::initialize(std::shared_ptr<VolumetricMesh> physicsMesh)
 }
 
 void
-DeformableBodyModel::loadInitialStates()
+FEMDeformableBodyModel::loadInitialStates()
 {
     // For now the initial states are set to zero
     m_initialState = std::make_shared<kinematicState>(m_numDOF);
@@ -131,7 +131,7 @@ DeformableBodyModel::loadInitialStates()
 }
 
 void
-DeformableBodyModel::loadBoundaryConditions()
+FEMDeformableBodyModel::loadBoundaryConditions()
 {
     auto fileName = m_forceModelConfiguration->getStringOptionsMap().at("fixedDOFFilename");
 
@@ -166,7 +166,7 @@ DeformableBodyModel::loadBoundaryConditions()
 }
 
 void
-DeformableBodyModel::initializeForceModel()
+FEMDeformableBodyModel::initializeForceModel()
 {
     const double g = m_forceModelConfiguration->getFloatsOptionsMap().at("gravity");
     const bool isGravityPresent = (g > 0) ? true : false;
@@ -207,7 +207,7 @@ DeformableBodyModel::initializeForceModel()
 }
 
 void
-DeformableBodyModel::initializeMassMatrix(const bool saveToDisk /*= false*/)
+FEMDeformableBodyModel::initializeMassMatrix(const bool saveToDisk /*= false*/)
 {
     if (!this->m_forceModelGeometry)
     {
@@ -226,7 +226,7 @@ DeformableBodyModel::initializeMassMatrix(const bool saveToDisk /*= false*/)
 }
 
 void
-DeformableBodyModel::initializeDampingMatrix(std::shared_ptr<vega::VolumetricMesh> vegaMesh)
+FEMDeformableBodyModel::initializeDampingMatrix(std::shared_ptr<vega::VolumetricMesh> vegaMesh)
 {
     auto dampingLaplacianCoefficient = this->m_forceModelConfiguration->getFloatsOptionsMap().at("dampingLaplacianCoefficient");
     auto dampingMassCoefficient = this->m_forceModelConfiguration->getFloatsOptionsMap().at("dampingMassCoefficient");
@@ -272,7 +272,7 @@ DeformableBodyModel::initializeDampingMatrix(std::shared_ptr<vega::VolumetricMes
 }
 
 void
-DeformableBodyModel::initializeTangentStiffness()
+FEMDeformableBodyModel::initializeTangentStiffness()
 {
     if (!m_internalForceModel)
     {
@@ -320,7 +320,7 @@ DeformableBodyModel::initializeTangentStiffness()
 }
 
 void
-DeformableBodyModel::initializeGravityForce()
+FEMDeformableBodyModel::initializeGravityForce()
 {
     m_gravityForce.resize(m_numDOF);
     m_gravityForce.setZero();
@@ -330,7 +330,7 @@ DeformableBodyModel::initializeGravityForce()
 }
 
 void
-DeformableBodyModel::computeImplicitSystemRHS(kinematicState& stateAtT,
+FEMDeformableBodyModel::computeImplicitSystemRHS(kinematicState& stateAtT,
                                               kinematicState& newState)
 {
     // Do checks if there are uninitialized matrices
@@ -367,7 +367,7 @@ DeformableBodyModel::computeImplicitSystemRHS(kinematicState& stateAtT,
 }
 
 void
-DeformableBodyModel::computeSemiImplicitSystemRHS(kinematicState& stateAtT,
+FEMDeformableBodyModel::computeSemiImplicitSystemRHS(kinematicState& stateAtT,
 kinematicState& newState)
 {
     // Do checks if there are uninitialized matrices
@@ -394,7 +394,7 @@ kinematicState& newState)
 }
 
 void
-DeformableBodyModel::computeImplicitSystemLHS(const kinematicState& stateAtT,
+FEMDeformableBodyModel::computeImplicitSystemLHS(const kinematicState& stateAtT,
                                               kinematicState& newState)
 {
     // Do checks if there are uninitialized matrices
@@ -421,7 +421,7 @@ DeformableBodyModel::computeImplicitSystemLHS(const kinematicState& stateAtT,
 }
 
 void
-DeformableBodyModel::initializeExplicitExternalForces()
+FEMDeformableBodyModel::initializeExplicitExternalForces()
 {
     m_explicitExternalForce.resize(m_numDOF);
     m_explicitExternalForce.setZero();
@@ -430,7 +430,7 @@ DeformableBodyModel::initializeExplicitExternalForces()
 }
 
 void
-DeformableBodyModel::updateDampingMatrix()
+FEMDeformableBodyModel::updateDampingMatrix()
 {
     if (m_damped)
     {
@@ -454,7 +454,7 @@ DeformableBodyModel::updateDampingMatrix()
 }
 
 void
-DeformableBodyModel::applyBoundaryConditions(SparseMatrixd &M, const bool withCompliance) const
+FEMDeformableBodyModel::applyBoundaryConditions(SparseMatrixd &M, const bool withCompliance) const
 {
     double compliance = withCompliance ? 1.0 : 0.0;
 
@@ -482,7 +482,7 @@ DeformableBodyModel::applyBoundaryConditions(SparseMatrixd &M, const bool withCo
 }
 
 void
-DeformableBodyModel::applyBoundaryConditions(Vectord &x) const
+FEMDeformableBodyModel::applyBoundaryConditions(Vectord &x) const
 {
     for (auto & index : m_fixedNodeIds)
     {
@@ -491,13 +491,13 @@ DeformableBodyModel::applyBoundaryConditions(Vectord &x) const
 }
 
 void
-DeformableBodyModel::updateMassMatrix()
+FEMDeformableBodyModel::updateMassMatrix()
 {
     // Do nothing for now as topology changes are not supported yet!
 }
 
 void
-DeformableBodyModel::updatePhysicsGeometry()
+FEMDeformableBodyModel::updatePhysicsGeometry()
 {
     auto volMesh = std::static_pointer_cast<VolumetricMesh>(m_forceModelGeometry);
     auto u = m_currentState->getQ();
@@ -506,7 +506,7 @@ DeformableBodyModel::updatePhysicsGeometry()
 
 
 void
-DeformableBodyModel::updateBodyStates(const Vectord& solution, const stateUpdateType updateType)
+FEMDeformableBodyModel::updateBodyStates(const Vectord& solution, const stateUpdateType updateType)
 {
     auto uPrev = m_previousState->getQ();
     auto u = m_currentState->getQ();
@@ -541,7 +541,7 @@ DeformableBodyModel::updateBodyStates(const Vectord& solution, const stateUpdate
 }
 
 NonLinearSystem::VectorFunctionType
-DeformableBodyModel::getFunction(const bool semiImplicit)
+FEMDeformableBodyModel::getFunction(const bool semiImplicit)
 {
     // Function to evaluate the nonlinear objective function given the current state
     return [&, this](const Vectord& q) -> const Vectord&
@@ -561,7 +561,7 @@ DeformableBodyModel::getFunction(const bool semiImplicit)
 }
 
 NonLinearSystem::MatrixFunctionType
-DeformableBodyModel::getFunctionGradient()
+FEMDeformableBodyModel::getFunctionGradient()
 {
     //const Vectord& q
     // Gradient of the nonlinear objective function given the current state
@@ -574,7 +574,7 @@ DeformableBodyModel::getFunctionGradient()
 }
 
 NonLinearSystem::UpdateFunctionType
-DeformableBodyModel::getUpdateFunction()
+FEMDeformableBodyModel::getUpdateFunction()
 {
     // Function to evaluate the nonlinear objective function given the current state
     return[&, this](const Vectord& q) -> void
@@ -584,7 +584,7 @@ DeformableBodyModel::getUpdateFunction()
 }
 
 void
-DeformableBodyModel::initializeEigenMatrixFromVegaMatrix(const vega::SparseMatrix& vegaMatrix, SparseMatrixd& eigenMatrix)
+FEMDeformableBodyModel::initializeEigenMatrixFromVegaMatrix(const vega::SparseMatrix& vegaMatrix, SparseMatrixd& eigenMatrix)
 {
     auto rowLengths = vegaMatrix.GetRowLengths();
     auto nonZeroValues = vegaMatrix.GetEntries();
@@ -605,7 +605,7 @@ DeformableBodyModel::initializeEigenMatrixFromVegaMatrix(const vega::SparseMatri
 }
 
 Vectord&
-DeformableBodyModel::getContactForce()
+FEMDeformableBodyModel::getContactForce()
 {
     return m_Fcontact;
 }
diff --git a/Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.h b/Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.h
similarity index 96%
rename from Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.h
rename to Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.h
index ea007b9a5c9f7046e31083b6d7879736a2a43959..99a6d9b6bccc4dad00ca037a37f7681ca3225200 100644
--- a/Base/DynamicalModels/ObjectModels/imstkDeformableBodyModel.h
+++ b/Base/DynamicalModels/ObjectModels/imstkFEMDeformableBodyModel.h
@@ -19,8 +19,8 @@
 
    =========================================================================*/
 
-#ifndef imstkDeformableBodyModel_h
-#define imstkDeformableBodyModel_h
+#ifndef imstkFEMDeformableBodyModel_h
+#define imstkFEMDeformableBodyModel_h
 
 #include <memory>
 
@@ -49,13 +49,13 @@ namespace imstk
 {
 
 ///
-/// \class DeformableBodyModel
+/// \class FEMDeformableBodyModel
 ///
 /// \brief Mathematical model of the physics governing the dynamic deformable object
 /// Note: Vega specifics will removed in future when the inertial and damping calculations
 /// are done with in-house code
 ///
-class DeformableBodyModel : public DynamicalModel<VectorizedState>
+class FEMDeformableBodyModel : public DynamicalModel<VectorizedState>
 {
 
     using kinematicState = VectorizedState;
@@ -63,12 +63,12 @@ public:
     ///
     /// \brief Constructor
     ///
-    DeformableBodyModel();
+    FEMDeformableBodyModel();
 
     ///
     /// \brief Destructor
     ///
-    ~DeformableBodyModel() = default;
+    ~FEMDeformableBodyModel() = default;
 
     ///
     /// \brief Set/Get force model configuration
@@ -258,4 +258,4 @@ protected:
 
 } // imstk
 
-#endif // ifndef imstkDeformableBodyModel_h
+#endif // ifndef imstkFEMDeformableBodyModel_h
diff --git a/Base/SceneElements/Objects/imstkDeformableObject.cpp b/Base/SceneElements/Objects/imstkDeformableObject.cpp
index 891ee7215dfc28550ce04d7637d4c8284ddd7e75..7dd029df146e61d1cc6ae590898121a30835e9c3 100644
--- a/Base/SceneElements/Objects/imstkDeformableObject.cpp
+++ b/Base/SceneElements/Objects/imstkDeformableObject.cpp
@@ -40,17 +40,13 @@ DeformableObject::getContactForce()
 bool
 DeformableObject::initialize()
 {
-    // CHECKBACK
-    if (!m_dynamicalModel || m_dynamicalModel->getType() != DynamicalModelType::elastoDynamics)
+    m_defModel = std::dynamic_pointer_cast<FEMDeformableBodyModel>(m_dynamicalModel);
+    if (m_defModel == nullptr)
     {
         LOG(WARNING) << "Dynamic model set is not of expected type (DeformableBodyModel)!";
         return false;
     }
-    else
-    {
-        m_defModel = std::static_pointer_cast<DeformableBodyModel>(m_dynamicalModel);
-        return true;
-    }
+    return true;
 }
 
 const Vectord&
diff --git a/Base/SceneElements/Objects/imstkDeformableObject.h b/Base/SceneElements/Objects/imstkDeformableObject.h
index 909ec7ec77a697b5c57b1407969cdce214270085..08a9221bcfb0f82938d05f041443939d7e44a246 100644
--- a/Base/SceneElements/Objects/imstkDeformableObject.h
+++ b/Base/SceneElements/Objects/imstkDeformableObject.h
@@ -27,7 +27,7 @@
 
 // imstk
 #include "imstkDynamicObject.h"
-#include "imstkDeformableBodyModel.h"
+#include "imstkFEMDeformableBodyModel.h"
 #include "imstkMath.h"
 
 namespace imstk
@@ -48,7 +48,7 @@ public:
     ///
     /// \brief Constructor
     ///
-    DeformableObject(std::string name) : DynamicObject(name) { m_type = Type::Deformable; }
+    DeformableObject(std::string name) : DynamicObject(name) { m_type = Type::FEMDeformable; }
     DeformableObject() = delete;
 
     ///
@@ -108,7 +108,7 @@ public:
     const Vectord& getPrevAccelerations() const;
 
 protected:
-    std::shared_ptr<DeformableBodyModel> m_defModel;
+    std::shared_ptr<FEMDeformableBodyModel> m_defModel;
 };
 
 } // imstk
diff --git a/Base/SceneElements/Objects/imstkDynamicObject.h b/Base/SceneElements/Objects/imstkDynamicObject.h
index cbed91ac20763556d76683482e2fa484a80ec204..524f303edfefe1b092c2dcf0c862017fd95d0ce6 100644
--- a/Base/SceneElements/Objects/imstkDynamicObject.h
+++ b/Base/SceneElements/Objects/imstkDynamicObject.h
@@ -81,16 +81,13 @@ public:
     ///
     size_t getNumOfDOF() const
     {
-        if (m_dynamicalModel)
-        {
-            return m_dynamicalModel->getNumDegreeOfFreedom();
-        }
-        else
+        if (!m_dynamicalModel)
         {
             LOG(WARNING) << "Cannot get the degree of freedom since the dynamical model is not initialized! returning 0";
             return 0;
         }
 
+        return m_dynamicalModel->getNumDegreeOfFreedom();
     }
 
     ///
@@ -104,11 +101,17 @@ public:
         {
             m_physicsToCollidingGeomMap->apply();
         }
-        CollidingObject::updateGeometries();
 
-        if (m_physicsToVisualGeomMap)
+        if (m_updateVisualFromPhysicsGeometry)
+        {
+            if (m_physicsToVisualGeomMap)
+            {
+                m_physicsToVisualGeomMap->apply();
+            }
+        }
+        else
         {
-            m_physicsToVisualGeomMap->apply();
+            CollidingObject::updateGeometries();
         }
     }
 
@@ -125,6 +128,7 @@ protected:
     //Maps
     std::shared_ptr<GeometryMap> m_physicsToCollidingGeomMap;   ///> Maps from Physics to collision geometry
     std::shared_ptr<GeometryMap> m_physicsToVisualGeomMap;      ///> Maps from Physics to visual geometry
+    bool m_updateVisualFromPhysicsGeometry = true; ///> Defines if visual is updated from colliding mapping or physics mapping
 };
 
 } // imstk
diff --git a/Base/SceneElements/Objects/imstkPbdObject.cpp b/Base/SceneElements/Objects/imstkPbdObject.cpp
index 745ca06a78f829331319f2b8217f27c88729b968..19ca5ed93932706d7b83cc302315d3216b320a80 100644
--- a/Base/SceneElements/Objects/imstkPbdObject.cpp
+++ b/Base/SceneElements/Objects/imstkPbdObject.cpp
@@ -9,31 +9,22 @@ namespace imstk
 bool
 PbdObject::initialize(int nCons, ...)
 {
-    std::shared_ptr<Mesh> mesh;
-    if (!m_physicsGeometry ||
-        !(m_physicsGeometry->getType() == Geometry::Type::TetrahedralMesh ||
-        m_physicsGeometry->getType() == Geometry::Type::SurfaceMesh||
-        m_physicsGeometry->getType() == Geometry::Type::HexahedralMesh))
+    std::shared_ptr<Mesh> mesh = std::dynamic_pointer_cast<Mesh>(m_physicsGeometry);
+    if (mesh == nullptr)
     {
         LOG(WARNING) << "Physics geometry is not a mesh!";
         return false;
     }
-    else
-    {
-        mesh = std::static_pointer_cast<Mesh>(m_physicsGeometry);
-    }
 
-    if (!m_dynamicalModel || m_dynamicalModel->getType() != DynamicalModelType::positionBasedDynamics)
+    m_pbdModel = std::dynamic_pointer_cast<PbdModel>(m_dynamicalModel);
+    if (m_pbdModel == nullptr)
     {
         LOG(WARNING) << "Dynamic model set is not of expected type (PbdModel)!";
         return false;
     }
-    else
-    {
-        m_pbdModel = std::static_pointer_cast<PbdModel>(m_dynamicalModel);
-        m_pbdModel->setModelGeometry(mesh);
-        m_pbdModel->initialize();
-    }
+
+    m_pbdModel->setModelGeometry(mesh);
+    m_pbdModel->initialize();
 
     va_list args;
     va_start(args, nCons);
diff --git a/Base/SceneElements/Objects/imstkPbdObject.h b/Base/SceneElements/Objects/imstkPbdObject.h
index 3bddddb062f421fd8353367e9b1705413153912b..f8e6f25c3982ef95199be46c574cfca3761d8dd1 100644
--- a/Base/SceneElements/Objects/imstkPbdObject.h
+++ b/Base/SceneElements/Objects/imstkPbdObject.h
@@ -58,6 +58,7 @@ public:
 
 protected:
 
+    std::shared_ptr<Mesh> m_physicsGeometry;                ///> Geometry used for Physics
     std::shared_ptr<PbdModel> m_pbdModel; ///> PBD mathematical model
 };
 
diff --git a/Base/SceneElements/Objects/imstkPbdRigidObject.h b/Base/SceneElements/Objects/imstkPbdRigidObject.h
index 9b44347abf7c6a779423646aaef76985d04e8304..02c875a7167b05121b202bcff2b05eab934b8c83 100644
--- a/Base/SceneElements/Objects/imstkPbdRigidObject.h
+++ b/Base/SceneElements/Objects/imstkPbdRigidObject.h
@@ -42,7 +42,7 @@ public:
     ///
     PbdRigidObject(std::string name) : PbdObject(name)
     {
-        m_type = SceneObject::Type::Deformable;
+        m_type = SceneObject::Type::Pbd;
     }
 
     ///
diff --git a/Base/SceneElements/Objects/imstkSceneObject.h b/Base/SceneElements/Objects/imstkSceneObject.h
index 3978f3cacff29c0da58d5b843bef4872288188fa..38045907bad200c5b6056d7420d8bc6075bab324 100644
--- a/Base/SceneElements/Objects/imstkSceneObject.h
+++ b/Base/SceneElements/Objects/imstkSceneObject.h
@@ -46,7 +46,7 @@ public:
         Visual,
         Colliding,
         Rigid,
-        Deformable,
+        FEMDeformable,
         Pbd
     };
 
diff --git a/Base/Solvers/imstkNewtonMethod.cpp b/Base/Solvers/imstkNewtonMethod.cpp
index f26ad61f542431eea4817d6292ad175d25feb473..77fac9e6a89bf7d37ed3a80e1390003c591e77fd 100644
--- a/Base/Solvers/imstkNewtonMethod.cpp
+++ b/Base/Solvers/imstkNewtonMethod.cpp
@@ -87,8 +87,6 @@ NewtonMethod::solveGivenState(Vectord& x)
 void
 NewtonMethod::solve()
 {
-    NonLinearSolver::solve();
-
     if (!this->m_nonLinearSystem)
     {
         LOG(WARNING) << "NewtonMethod::solve - nonlinear system is not set to the nonlinear solver";
diff --git a/Base/Solvers/imstkNonLinearSolver.h b/Base/Solvers/imstkNonLinearSolver.h
index 462c2c2839997765126a3f563a73d67bb09bd67d..e19ff7b32eeb36683460f913799ea76965fe9808 100644
--- a/Base/Solvers/imstkNonLinearSolver.h
+++ b/Base/Solvers/imstkNonLinearSolver.h
@@ -53,10 +53,7 @@ public:
     /// \brief Main solve routine.
     ///
     virtual void solveGivenState(Vectord& x) = 0;
-    virtual void solve()
-    {
-        SolverBase::solve();
-    };
+    virtual void solve() = 0;
 
     ///
     /// \brief Backtracking line search method based on the Armijo-Goldstein condition
diff --git a/Base/Solvers/imstkPbdSolver.h b/Base/Solvers/imstkPbdSolver.h
index a84026781f78e27e5783ed2775cc5a02185f258d..d596c250d007088ee0440b03630e0092abc25d5b 100644
--- a/Base/Solvers/imstkPbdSolver.h
+++ b/Base/Solvers/imstkPbdSolver.h
@@ -74,8 +74,6 @@ public:
     ///
     void solve()
     {
-        SolverBase::solve();
-
         m_pbdObject->integratePosition();
         m_pbdObject->solveConstraints();
         m_pbdObject->integrateVelocity();
diff --git a/Base/Solvers/imstkSolverBase.h b/Base/Solvers/imstkSolverBase.h
index 4d27451654ca3a8393b43fd5010a7a49af1f10b9..9c87b52101810a2bbe2a615107ca7b485215c45d 100644
--- a/Base/Solvers/imstkSolverBase.h
+++ b/Base/Solvers/imstkSolverBase.h
@@ -36,7 +36,7 @@ public:
     SolverBase() = default;
     virtual ~SolverBase() = default;
 
-    virtual void solve() {};
+    virtual void solve() =0;
 
 };
 
diff --git a/Examples/Sandbox/main.cpp b/Examples/Sandbox/main.cpp
index 32e6d1825a5c150c973fa34d7fa2bc86ea083e95..8d6ba7d8f13bc876fedc440012515051ce716274 100644
--- a/Examples/Sandbox/main.cpp
+++ b/Examples/Sandbox/main.cpp
@@ -10,7 +10,7 @@
 
 // Objects
 #include "imstkForceModelConfig.h"
-#include "imstkDeformableBodyModel.h"
+#include "imstkFEMDeformableBodyModel.h"
 #include "imstkDeformableObject.h"
 #include "imstkSceneObject.h"
 #include "imstkLight.h"
@@ -1060,7 +1060,7 @@ void testDeformableBody()
     // e. Scene object 1: Dragon
 
     // Configure dynamic model
-    auto dynaModel = std::make_shared<DeformableBodyModel>();
+    auto dynaModel = std::make_shared<FEMDeformableBodyModel>();
     dynaModel->configure("asianDragon.config");
     dynaModel->initialize(volTetMesh);
     auto timeIntegrator = std::make_shared<BackwardEuler>(0.01);// Create and add Backward Euler time integrator