diff --git a/src/static_equilibrium.cpp b/src/static_equilibrium.cpp
index 3337f401af487f9ea471e05eef435139eb9c0309..8e4de3e9e25abc0db03b77cf727d9c83e5265df5 100644
--- a/src/static_equilibrium.cpp
+++ b/src/static_equilibrium.cpp
@@ -515,6 +515,16 @@ bool StaticEquilibrium::computePolytopeProjection(Cref_matrix6X v)
 
 //  getProfiler().start("cdd to eigen");
   dd_MatrixPtr b_A = dd_CopyInequalities(H_);
+  if(canonicalize_cdd_matrix)
+  {
+    dd_ErrorType error = dd_NoError;
+    dd_rowset redset,impl_linset;
+    dd_rowindex newpos;
+    dd_MatrixCanonicalize(&b_A, &impl_linset, &redset, &newpos, &error);
+    set_free(redset);
+    set_free(impl_linset);
+    free(newpos);
+  }
   // get equalities and add them as complementary inequality constraints
   std::vector<long> eq_rows;
   for(long elem=1;elem<=(long)(b_A->linset[0]);++elem)