diff --git a/include/robust-equilibrium-lib/util.hh b/include/robust-equilibrium-lib/util.hh
index d540d1dd93de0c666cf67aac15b83a401e0a670b..522f8d85d4c94dd80ba51946747512a2c863bc3b 100644
--- a/include/robust-equilibrium-lib/util.hh
+++ b/include/robust-equilibrium-lib/util.hh
@@ -101,10 +101,11 @@ namespace robust_equilibrium
   /**
  * Convert the specified list of rays from Eigen to cdd format.
  * @param input The mXn input Eigen matrix contains m rays of dimension n.
+ * @param bool whether to remove redundant inequalities
  * @return The mX(n+1) output cdd matrix, which contains an additional column,
  * the first one, with all zeros.
  */
-  dd_MatrixPtr cone_span_eigen_to_cdd(Cref_matrixXX input);
+  dd_MatrixPtr cone_span_eigen_to_cdd(Cref_matrixXX input, const bool canonicalize=false);
 
   /**
  * Compute the cross-product skew-symmetric matrix associated to the specified vector.
diff --git a/src/util.cpp b/src/util.cpp
index 7ffb2ae8fbcff35e381cebb1fa5897e248471754..9b0770de13cd3ccef9d17327d320317ce01e83a0 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -12,7 +12,7 @@
 namespace robust_equilibrium
 {
 
-dd_MatrixPtr cone_span_eigen_to_cdd(Cref_matrixXX input)
+dd_MatrixPtr cone_span_eigen_to_cdd(Cref_matrixXX input, const bool canonicalize)
 {
   dd_debug = false;
   dd_MatrixPtr M=NULL;
@@ -40,6 +40,17 @@ dd_MatrixPtr cone_span_eigen_to_cdd(Cref_matrixXX input)
     }
   }
   dd_clear(value);
+  if(canonicalize)
+  {
+    dd_ErrorType error = dd_NoError;
+    dd_rowset redset,impl_linset;
+    dd_rowindex newpos;
+    dd_MatrixCanonicalize(&M, &impl_linset, &redset, &newpos, &error);
+    set_free(redset);
+    set_free(impl_linset);
+    free(newpos);
+  }
+
   return M;
 }