diff --git a/Code/hull.cpp b/Code/hull.cpp
index 00c06bab9e628e69ee25b88ce38cd8d2361d6684..0198facce2a64dbc73e0c3164a806bbab19af69f 100644
--- a/Code/hull.cpp
+++ b/Code/hull.cpp
@@ -13,6 +13,8 @@
 //{{{ struct vec
 
 struct vec {
+  vec() {} ;
+
   vec(float x, float y) : x(x), y(y) {}
   float x ;
   float y ;
@@ -36,6 +38,11 @@ struct vec {
   float length() const {
     return sqrt(length2()) ;
   }
+
+  bool lexicoinf(const vec& rhs) const {
+    if(x == rhs.x) return y < rhs.y ;
+    return x < rhs.x ;
+  }
 } ;
 
 //}}}
@@ -46,12 +53,29 @@ int sign(float x) {
   return 0 ;
 }
 
-int orient(const vec& v0, const vec& v1) {
+int orient(const vec& v0_in, const vec& v1_in) {
+  vec v0, v1 ;
+  int factor = 1 ;
+  if(v0_in.lexicoinf(v1_in)) {
+    v0 = v0_in ;
+    v1 = v1_in ;
+  } else {
+    v0 = v1_in ;
+    v1 = v0_in ;
+    factor = -1 ;
+  }
+
   //determinant
   float d = v0.x*v1.y - v0.y*v1.x ;
+  return d ;
+
+  if(d != 0) return factor*sign(d) ;
 
-  //encode as sign
-  return sign(d) ;
+  //perturbation
+  if(v1.y != 0) return factor*sign(v1.y) ;
+  float a = v0.x - v0.y - v1.x ;
+  if (a!= 0) return factor*sign(a) ;
+  return factor*1 ;
 }
 
 struct vec_compare {
@@ -108,7 +132,13 @@ void compute_hull(std::vector<vec>& points, std::vector<vec>& hull) {
 
 //{{{ generate svg
 
-void svg_hull(const std::string& filename, const std::vector<vec>& points, const std::vector<vec>& hull) {
+void svg_hull(
+    const std::string& filename, 
+    const std::vector<vec>& points, 
+    const std::vector<vec>& hull,
+    float salt = 0
+    ) 
+{
   std::ofstream file(filename) ;
   SvgPad svg(file, 1024, 1024) ;
   svg.open() ;
@@ -118,15 +148,35 @@ void svg_hull(const std::string& filename, const std::vector<vec>& points, const
   }
 
   size_t hs = hull.size() ;
+  std::mt19937 mt ;
+  std::uniform_real_distribution<float> rf(-salt, salt) ;
   for(size_t i = 0; i < hs; ++i) {
+
+  vec salti(0,0) ;
+  vec saltip(0,0) ;
+    if(salt > 0) {
+      salti.x = rf(mt) ;
+      salti.y = rf(mt) ;
+      saltip.x = rf(mt) ;
+      saltip.y = rf(mt) ;
+    }
+
     svg.contour_point(hull[i].x, hull[i].y) ;
-    svg.line(hull[i].x, hull[i].y, hull[(i+1)%hs].x, hull[(i+1)%hs].y) ;
+    svg.line(
+        hull[i].x + salti.x, 
+        hull[i].y + salti.y, 
+        hull[(i+1)%hs].x + saltip.x,
+        hull[(i+1)%hs].y + saltip.y
+    ) ;
   }
 
   svg.close() ;
 }
 
-void svg_sort(const std::string& filename, const std::vector<vec>& points) {
+void svg_sort(
+    const std::string& filename, 
+    const std::vector<vec>& points) 
+{
   std::ofstream file(filename) ;
   SvgPad svg(file, 1024, 1024) ;
   svg.open() ;
@@ -179,20 +229,37 @@ int main() {
   //{{{ wicked test
 
   {
-    std::vector<vec> points ;
+    std::vector<vec> aligned_points ;
     //aligned points
-    points.emplace_back(0, 0.5) ;
-    points.emplace_back(0, 1) ;
-    points.emplace_back(0, 0) ;
-    points.emplace_back(0, 0.8) ;
-    //make the hull non flat
-    points.emplace_back(1, 0.5) ;
-
-    //hull
-    std::vector<vec> hull ;
-    compute_hull(points, hull) ;
-    svg_hull("/tmp/hull_aligned.svg", points, hull) ;
-
+    aligned_points.emplace_back(0, 1) ;
+    aligned_points.emplace_back(0, 0) ;
+    aligned_points.emplace_back(0, 0.8) ;
+    aligned_points.emplace_back(0, 0.5) ;
+
+    int indices[4] = {0, 1, 2, 3} ;
+    int permutation_index = 0 ;
+
+    //test every permutation of the input
+    do {
+      std::vector<vec> points ;
+      for(unsigned int i = 0; i < 4; ++i) {
+        points.push_back(aligned_points[indices[i]]) ;
+      }
+      //make the hull non flat
+      points.emplace_back(1, 0.5) ;
+
+      //hull
+      std::vector<vec> hull ;
+      compute_hull(points, hull) ;
+      
+      //export
+      std::stringstream ss ;
+      ss << "/tmp/hull_aligned_" << permutation_index << ".svg" ;
+      svg_hull(ss.str(), points, hull, 0.02) ;
+
+      //move to next permutation
+      ++ permutation_index ;
+    }while(std::next_permutation(indices, indices + 4)) ;
   }
 
   //}}}
diff --git a/Presentation/presentation.tex b/Presentation/presentation.tex
index 837448029e6166d915bed52ab0561d7a62ca7df7..8db009b9dea82a1fba812aafd8b1cea3a8e61120 100644
--- a/Presentation/presentation.tex
+++ b/Presentation/presentation.tex
@@ -270,7 +270,7 @@
 }
 
 \frame{
-  \frametitle{Simulation de simplicité (Edelsbrnner \& Mücke 90)}
+  \frametitle{Simulation de simplicité (Edelsbrunner \& Mücke 90)}
 
   \begin{center}
     \begin{myblock}{0.8\li}
@@ -285,7 +285,7 @@
   \textbf{Principe :}
   \begin{itemize}
     \item $\sum_{k=0}^n 2^k = 2^{k+1} - 1$
-    \item $\prod_{k=0}^n\eps^{2^k} = \eps^{\sum_{k=0}^n2^k} = \eps^{2^{k+1} - 1} >> \eps^{2^{k+1}}$
+    \item $\prod_{k=0}^n\eps^{2^k} = \eps^{\sum_{k=0}^n2^k} = \eps^{2^{n+1} - 1} >> \eps^{2^{n+1}}$
   \end{itemize}
 }
 
@@ -294,10 +294,10 @@
 
   \begin{equation*}
     \begin{pmatrix}
-      p_{0,0} + \eps{0,0} & p_{0,1} + \eps{0,1} & \cdots & p_{0,d} + \eps{0,d-1} & 1 \\
-      p_{1,0} + \eps{1,0} & p_{1,1} + \eps{1,1} & \cdots & p_{1,d} + \eps{1,d-1} & 1 \\
+      p_{0,0} + \eps_{0,0} & p_{0,1} + \eps_{0,1} & \cdots & p_{0,d} + \eps_{0,d-1} & 1 \\
+      p_{1,0} + \eps_{1,0} & p_{1,1} + \eps_{1,1} & \cdots & p_{1,d} + \eps_{1,d-1} & 1 \\
       \vdots & \vdots & \ddots & \vdots \\
-      p_{d,0} + \eps{d,0} & p_{d,1} + \eps{d,1} & \cdots & p_{d,d-1} + \eps{d,d-1} & 1
+      p_{d,0} + \eps_{d,0} & p_{d,1} + \eps_{d,1} & \cdots & p_{d,d-1} + \eps_{d,d-1} & 1
     \end{pmatrix}
   \end{equation*}