diff --git a/src/pe/collision/EPA.cpp b/src/pe/collision/EPA.cpp
index ed40e41535c487dadf7abc7f137eadb1993dfc22..2e0d0e889c2911827f298a7a76ca578513c22997 100644
--- a/src/pe/collision/EPA.cpp
+++ b/src/pe/collision/EPA.cpp
@@ -277,7 +277,6 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
       current = entryHeap.back();
       entryHeap.pop_back();
       if(!current->isObsolete()) {
-         WALBERLA_ASSERT_GREATER(current->getSqrDist(), real_t(0.0), "EPA_Trianalge distance is negative.");
          lowerBoundSqr = current->getSqrDist();
 
          if(epaVolume.size() == maxSupportPoints_) {
@@ -289,6 +288,10 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
          // if origin is contained in plane, use out-facing normal.
          Vec3 normal;
          if(current->getSqrDist() < real_comparison::Epsilon<real_t>::value*real_comparison::Epsilon<real_t>::value){
+            if(current->getNormal().sqrLength() < real_comparison::Epsilon<real_t>::value*real_comparison::Epsilon<real_t>::value){
+               break;
+            }
+
             normal = current->getNormal().getNormalized();
          }else{
             normal = current->getClosest().getNormalized();