diff --git a/src/polymesh/algorithms/triangulate.cc b/src/polymesh/algorithms/triangulate.cc
index daecd22340802b74a1f9396ccfc62df98b7ac83b..425b9d6de8b502778d92355a968ba291ef4405ec 100644
--- a/src/polymesh/algorithms/triangulate.cc
+++ b/src/polymesh/algorithms/triangulate.cc
@@ -17,9 +17,6 @@ void polymesh::triangulate_naive(polymesh::Mesh& m)
         if (vs.size() <= 3)
             continue;
 
-        // remove
-        m.faces().remove(f);
-
         // find non-valence 2
         auto si = 0;
         for (auto i = 0u; i < vs.size(); ++i)
@@ -35,6 +32,10 @@ void polymesh::triangulate_naive(polymesh::Mesh& m)
         if (si < 0)
             si += int(vs.size());
 
+        // remove
+        // NOTE: AFTER finding start idx
+        m.faces().remove(f);
+
         // triangulate
         for (auto i = 2u; i < vs.size(); ++i)
             m.faces().add(vs[si], vs[(si + i - 1) % vs.size()], vs[(si + i) % vs.size()]);