diff --git a/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp b/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp
index ca7ea1878898a611d009a9c3c51d92bc38cfc104..f29702253db81860266d4d8be805b0aff3298187 100644
--- a/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp
+++ b/SimDynamics/DynamicsEngine/BulletEngine/BulletEngine.cpp
@@ -529,24 +529,28 @@ std::vector<DynamicsEngine::DynamicsContactInfo> BulletEngine::getContacts()
 		for (int j=0;j<numContacts;j++)
 		{
 			btManifoldPoint& pt = contactManifold->getContactPoint(j);
-			if (pt.getDistance()<0.f)
-			{
-				DynamicsContactInfo i;
-				i.objectA = dynObjA;
-				i.objectB = dynObjB;
-				const btVector3& ptA = pt.getPositionWorldOnA();
-				const btVector3& ptB = pt.getPositionWorldOnB();
-				const btVector3& normalOnB = pt.m_normalWorldOnB;
-				i.posGlobalA = getVecEigen(ptA);
-				i.posGlobalB = getVecEigen(ptB);
-				i.normalGlobalB(0) = normalOnB.x();
-				i.normalGlobalB(1) = normalOnB.y();
-				i.normalGlobalB(2) = normalOnB.z();
-				i.combinedFriction = pt.m_combinedFriction;
-				i.combinedRestitution = pt.m_combinedRestitution;
-                i.appliedImpulse = pt.m_appliedImpulse;
-				result.push_back(i);
-			}
+			DynamicsContactInfo i;
+			i.objectA = dynObjA;
+			i.objectB = dynObjB;
+			const btVector3& ptA = pt.getPositionWorldOnA();
+			const btVector3& ptB = pt.getPositionWorldOnB();
+			const btVector3& normalOnB = pt.m_normalWorldOnB;
+			i.posGlobalA = getVecEigen(ptA);
+			i.posGlobalB = getVecEigen(ptB);
+			i.normalGlobalB(0) = normalOnB.x();
+			i.normalGlobalB(1) = normalOnB.y();
+			i.normalGlobalB(2) = normalOnB.z();
+			i.combinedFriction = pt.m_combinedFriction;
+			i.combinedRestitution = pt.m_combinedRestitution;
+			i.appliedImpulse = pt.m_appliedImpulse;
+			i.frictionDir1.x() = pt.m_lateralFrictionDir1.x();
+			i.frictionDir1.y() = pt.m_lateralFrictionDir1.y();
+			i.frictionDir1.z() = pt.m_lateralFrictionDir1.z();
+			i.frictionDir2.x() = pt.m_lateralFrictionDir2.x();
+			i.frictionDir2.y() = pt.m_lateralFrictionDir2.y();
+			i.frictionDir2.z() = pt.m_lateralFrictionDir2.z();
+			i.distance = pt.getDistance();
+			result.push_back(i);
 		}
 	}
 	return result;
diff --git a/SimDynamics/DynamicsEngine/DynamicsEngine.h b/SimDynamics/DynamicsEngine/DynamicsEngine.h
index 35f38de3b8f62891a692a8393401852fc2c27a6a..c3d7717c52cba5f233767437e920c6c15d4fae0d 100644
--- a/SimDynamics/DynamicsEngine/DynamicsEngine.h
+++ b/SimDynamics/DynamicsEngine/DynamicsEngine.h
@@ -136,6 +136,9 @@ public:
 		Eigen::Vector3f posGlobalA;
 		Eigen::Vector3f posGlobalB;
 		Eigen::Vector3f normalGlobalB;
+		Eigen::Vector3f frictionDir1;
+		Eigen::Vector3f frictionDir2;
+		double distance;
 		double combinedFriction;
 		double combinedRestitution;
         double appliedImpulse;