diff --git a/examples/vegaFem/main.cpp b/examples/vegaFem/main.cpp
index 8366ae95ed99592bc65844bde69ef53b573a0015..2a2839f229505bb9e41495d6d943fc1164e17dc5 100644
--- a/examples/vegaFem/main.cpp
+++ b/examples/vegaFem/main.cpp
@@ -37,7 +37,12 @@
 #include "smSimulators/smVegaFemSimulator.h"
 #include "smSimulators/smDummySimulator.h"
 
+#include "smCollision/smCollisionPair.h"
 #include "smCollision/smPlaneCollisionModel.h"
+#include "smCollision/smMeshCollisionModel.h"
+#include "smCollision/smPlaneToMeshCollision.h"
+
+#include "smContactHandling\smPenaltyContactHandling.h"
 
 #include "../common/wasdCameraController.h"
 #include "../common/KeyPressSDKShutdown.h"
@@ -79,7 +84,7 @@ int main()
         "asianDragon/asianDragon.config");
 
     auto femObjRenderDetail = std::make_shared<smRenderDetail>(
-                                                               //SIMMEDTK_RENDER_FACES |
+                                                               SIMMEDTK_RENDER_WIREFRAME |
                                                                SIMMEDTK_RENDER_VERTICES
                                                               );
     femObjRenderDetail->setPointSize(4.0);
@@ -105,7 +110,7 @@ int main()
     // create a static plane scene object of given normal and position
     staticObject = std::make_shared<smStaticSceneObject>();
 
-    plane = std::make_shared<smPlaneCollisionModel>(smVec3d(0.0, -10.0, 0.0),
+    plane = std::make_shared<smPlaneCollisionModel>(smVec3d(0.0, -3.0, 0.0),
                                                     smVec3d(0.0, 1.0, 0.0));
 
     staticObject->setModel(plane);
@@ -117,6 +122,38 @@ int main()
     auto sdkSimulator = sdk->getSimulator();
     sdkSimulator->registerObjectSimulator(femSimulator);
     //sdkSimulator->registerObjectSimulator(staticSimulator);
+
+
+    //-------------------------------------------------------
+    // Enable collision between scene actors 1 and 2
+    //-------------------------------------------------------
+    std::shared_ptr<smMeshCollisionModel> meshModel =
+                                    std::make_shared<smMeshCollisionModel>();
+    meshModel->setMesh(femObject->getSurfaceMesh());
+
+    std::shared_ptr<smCollisionPair> planeMeshCollisionPairs =
+                                         std::make_shared<smCollisionPair>();
+
+    planeMeshCollisionPairs->setModels(meshModel, plane);
+
+    sdkSimulator->addCollisionPair(planeMeshCollisionPairs);
+
+    std::shared_ptr<smPlaneToMeshCollision> planeToMeshCollisionDetection =
+        std::make_shared<smPlaneToMeshCollision>();
+
+    sdkSimulator->registerCollisionDetection(planeToMeshCollisionDetection);
+
+    //-------------------------------------------------------
+    // Enable contact handling between scene actors 1 and 2
+    //-------------------------------------------------------
+    std::shared_ptr<smPenaltyContactHandling> planeToMeshContact =
+                                     std::make_shared<smPenaltyContactHandling>(false);
+
+    planeToMeshContact->setCollisionPairs(planeMeshCollisionPairs);
+
+    planeToMeshContact->setSceneObjects(staticObject, femObject);
+
+    sdkSimulator->registerContactHandling(planeToMeshContact);
  
     //-------------------------------------------------------
     // Customize the viewer
diff --git a/include/smCollision/smPlaneCollisionModel.h b/include/smCollision/smPlaneCollisionModel.h
index 91c8842aa9343b95e53a5b43fda04691e2d9002d..66ed6e79eca30c192b7ce33f44aea0ac4239b021 100644
--- a/include/smCollision/smPlaneCollisionModel.h
+++ b/include/smCollision/smPlaneCollisionModel.h
@@ -33,11 +33,12 @@
 
 class smPlaneCollisionModel : public smPlaneModel
 {
-
 public:
     smPlaneCollisionModel(const smVec3d &p, const smVec3d &n);
 
     ~smPlaneCollisionModel();
+
+    
 };
 
 #endif // SMPLANECOLLISIONMODEL_H_H
diff --git a/include/smCore/smSimulator.h b/include/smCore/smSimulator.h
index b49d932450b6b6c1436703db9a37a34df6763c08..cf71de2e913ad68e5e0e27bd3498966ec3b694cf 100644
--- a/include/smCore/smSimulator.h
+++ b/include/smCore/smSimulator.h
@@ -73,6 +73,8 @@ public:
 
     void registerCollisionDetection(std::shared_ptr<smCollisionDetection> p_collisionDetection);
 
+    void registerContactHandling(std::shared_ptr<smContactHandling> p_contactHandling);
+
     ///Registration of the Simulation main. It is called in each and every frame
     void registerSimulationMain(std::shared_ptr<smSimulationMain> p_main);
 
diff --git a/include/smGeometry/smPlaneModel.h b/include/smGeometry/smPlaneModel.h
index 417b4ae09b01662381a9449d38cdb0b009732315..65edd7b98e37c6aa1f8d08d74e816a932f15d220 100644
--- a/include/smGeometry/smPlaneModel.h
+++ b/include/smGeometry/smPlaneModel.h
@@ -87,6 +87,16 @@ public:
     ///
     void setTransform(const RigidTransformType &t);
 
+    ///
+    /// @brief Set transformation operator
+    ///
+    void setPlaneModel(const std::shared_ptr<smPlane> &p);
+
+    ///
+    /// @brief Set transformation operator
+    ///
+    std::shared_ptr<smPlane> getPlaneModel() const;
+
 protected:
     // Plane data and transform
     std::shared_ptr<smPlane> plane;
diff --git a/include/smSimulators/smVegaFemSceneObject.h b/include/smSimulators/smVegaFemSceneObject.h
index b2decd73a29a369bc71ab3235a82de398c0ae5bd..ec231441b48dc5c1a7d66932259973ce92f9ffb9 100644
--- a/include/smSimulators/smVegaFemSceneObject.h
+++ b/include/smSimulators/smVegaFemSceneObject.h
@@ -194,6 +194,8 @@ public:
 
 	virtual void init() override {};
 
+    std::shared_ptr<smSurfaceMesh> getSurfaceMesh() const;
+
 public:
     /// performance counters and simulation flags. some variable names are self explainatory
     double fps; ///< fps of the simulation
diff --git a/src/smCollision/smPlaneToMeshCollision.cpp b/src/smCollision/smPlaneToMeshCollision.cpp
index 0c83363a8b6cd2ef641effdf56769a439c988998..cbb248cb7d3d5ab7fce7ee9da072838dc52b9522 100644
--- a/src/smCollision/smPlaneToMeshCollision.cpp
+++ b/src/smCollision/smPlaneToMeshCollision.cpp
@@ -37,14 +37,17 @@ void smPlaneToMeshCollision::doComputeCollision(std::shared_ptr<smCollisionPair>
     auto mesh = std::static_pointer_cast<smMeshCollisionModel>(pair->getFirst());
     auto plane = std::static_pointer_cast<smPlaneCollisionModel>(pair->getFirst());
 
-    if(!mesh || !plane)
+    if (!mesh || !plane)
+    {
         return;
+    }
 
+    double d;
     smVec3d planeNormal = plane->getNormal();
     float planeOffset = planeNormal.dot(plane->getPosition());
     for (const auto& vertex : mesh->getVertices())
     {
-        double d = planeNormal.dot(vertex) - planeOffset;
+        d = planeNormal.dot(vertex) - planeOffset;
         if (d < std::numeric_limits<float>::epsilon())
         {
             // Create contact
@@ -52,4 +55,4 @@ void smPlaneToMeshCollision::doComputeCollision(std::shared_ptr<smCollisionPair>
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/src/smContactHandling/smPenaltyContactHandling.cpp b/src/smContactHandling/smPenaltyContactHandling.cpp
index 329bf6ee110d5828aeaeae19501e3d6afd2a286a..adc729e17de59efffc8a8e39075d597607270607 100644
--- a/src/smContactHandling/smPenaltyContactHandling.cpp
+++ b/src/smContactHandling/smPenaltyContactHandling.cpp
@@ -78,6 +78,8 @@ void smPenaltyContactHandling::computeUnilateralContactForces()
 
     std::vector<std::shared_ptr<smContact>> contactInfo = this->getCollisionPairs()->getContacts();
 
+    std::cout << "# contacts: " << contactInfo.size() << std::endl;
+
     if( this->getFirstSceneObject()->getType() == SIMMEDTK_SMVEGAFEMSCENEOBJECT
             && this->getSecondSceneObject()->getType() == SIMMEDTK_SMSTATICSCENEOBJECT )
     {
diff --git a/src/smCore/smSimulator.cpp b/src/smCore/smSimulator.cpp
index 68af748bac565021e8e2fff622546d02f7d901ed..e31c22bf9791c833f584cd18ee39c801b3b50eb7 100644
--- a/src/smCore/smSimulator.cpp
+++ b/src/smCore/smSimulator.cpp
@@ -191,6 +191,12 @@ void smSimulator::registerCollisionDetection(std::shared_ptr<smCollisionDetectio
     collisionDetectors.emplace_back(p_collisionDetection);
 }
 
+/// \brief
+void smSimulator::registerContactHandling(std::shared_ptr<smContactHandling> p_contactHandling)
+{
+    contactHandlers.emplace_back(p_contactHandling);
+}
+
 /// \brief
 void smSimulator::registerSimulationMain(std::shared_ptr<smSimulationMain> p_main)
 {
diff --git a/src/smGeometry/smPlaneModel.cpp b/src/smGeometry/smPlaneModel.cpp
index d73d81db9ea31f0c9e241406b8114cc9a8c072a5..a80d73a610927c4b5554f10e050ea7fd9e0b26d1 100644
--- a/src/smGeometry/smPlaneModel.cpp
+++ b/src/smGeometry/smPlaneModel.cpp
@@ -53,3 +53,13 @@ void smPlaneModel::setTransform(const smPlaneModel::RigidTransformType& t)
 {
     this->transform = t;
 }
+
+void smPlaneModel::setPlaneModel(const std::shared_ptr<smPlane> &p)
+{
+    this->plane = p;
+}
+
+std::shared_ptr<smPlane> smPlaneModel::getPlaneModel() const
+{
+    return plane;
+}
diff --git a/src/smSimulators/smVegaFemSceneObject.cpp b/src/smSimulators/smVegaFemSceneObject.cpp
index 1ea09e56fad8ba98ffc80f4d2a84860b2cd58409..b82fc4f4e7fbb024a827e9236bcf68b1c74cd6d3 100644
--- a/src/smSimulators/smVegaFemSceneObject.cpp
+++ b/src/smSimulators/smVegaFemSceneObject.cpp
@@ -1018,7 +1018,7 @@ void smVegaFemSceneObject::advanceDynamics()
 
         timestepCounter++;
 
-        std::cout << "Time step: " << timestepCounter << std::endl;
+        //std::cout << "Time step: " << timestepCounter << std::endl;
 
         memcpy(u, integratorBase->Getq(), sizeof(double) * 3 * n);
 
@@ -1320,3 +1320,8 @@ void smVegaFemSceneObject::draw()
 {
     smtkSurfaceMesh->draw();
 }
+
+std::shared_ptr<smSurfaceMesh> smVegaFemSceneObject::getSurfaceMesh() const
+{
+    return smtkSurfaceMesh;
+}