#2 parity with js: mapbox/delaunator@760be6b
diff --git a/README.md b/README.md
index 67b6a49..4eabb27 100644
--- a/README.md
+++ b/README.md
@@ -48,16 +48,16 @@
 
 ```
 Run on (4 X 2300 MHz CPU s)
-2018-09-19 09:40:29
+2018-09-23 08:36:08
 ------------------------------------------------------------
 Benchmark                     Time           CPU Iterations
 ------------------------------------------------------------
-BM_45K_geojson_nodes         23 ms         23 ms         32
-BM_2K_uniform                 1 ms          1 ms        970
-BM_100K_uniform              63 ms         63 ms         10
-BM_200K_uniform             142 ms        141 ms          4
-BM_500K_uniform             415 ms        412 ms          2
-BM_1M_uniform              1016 ms       1010 ms          1
+BM_45K_geojson_nodes         22 ms         22 ms         33
+BM_uniform/2000               1 ms          1 ms        953
+BM_uniform/100000            61 ms         61 ms          9
+BM_uniform/200000           140 ms        140 ms          4
+BM_uniform/500000           409 ms        408 ms          2
+BM_uniform/1000000          998 ms        995 ms          1
 ```
 
 Library is ~10% faster then JS version for 1M uniform points ([details](https://github.com/delfrrr/delaunator-cpp/pull/8#issuecomment-422690056))
diff --git a/include/delaunator.hpp b/include/delaunator.hpp
index 03dc496..17ac031 100644
--- a/include/delaunator.hpp
+++ b/include/delaunator.hpp
@@ -256,18 +256,24 @@
         }
     }
 
+    const double i0x = coords[2 * i0];
+    const double i0y = coords[2 * i0 + 1];
+
     min_dist = std::numeric_limits<double>::max();
 
     // find the point closest to the seed
     for (std::size_t i = 0; i < n; i++) {
         if (i == i0) continue;
-        const double d = dist(coords[2 * i0], coords[2 * i0 + 1], coords[2 * i], coords[2 * i + 1]);
+        const double d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);
         if (d < min_dist && d > 0.0) {
             i1 = i;
             min_dist = d;
         }
     }
 
+    double i1x = coords[2 * i1];
+    double i1y = coords[2 * i1 + 1];
+
     double min_radius = std::numeric_limits<double>::max();
 
     // find the third point which forms the smallest circumcircle with the first two
@@ -275,7 +281,7 @@
         if (i == i0 || i == i1) continue;
 
         const double r = circumradius(
-            coords[2 * i0], coords[2 * i0 + 1], coords[2 * i1], coords[2 * i1 + 1], coords[2 * i], coords[2 * i + 1]);
+            i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);
 
         if (r < min_radius) {
             i2 = i;
@@ -287,22 +293,14 @@
         throw std::runtime_error("not triangulation");
     }
 
-    if (orient(
-            coords[2 * i0], coords[2 * i0 + 1], //
-            coords[2 * i1],
-            coords[2 * i1 + 1], //
-            coords[2 * i2],
-            coords[2 * i2 + 1]) //
-    ) {
-        std::swap(i1, i2);
-    }
+    double i2x = coords[2 * i2];
+    double i2y = coords[2 * i2 + 1];
 
-    const double i0x = coords[2 * i0];
-    const double i0y = coords[2 * i0 + 1];
-    const double i1x = coords[2 * i1];
-    const double i1y = coords[2 * i1 + 1];
-    const double i2x = coords[2 * i2];
-    const double i2y = coords[2 * i2 + 1];
+    if (orient(i0x, i0y, i1x, i1y, i2x, i2y)) {
+        std::swap(i1, i2);
+        std::swap(i1x, i2x);
+        std::swap(i1y, i2y);
+    }
 
     std::tie(m_center_x, m_center_y) = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);