diff --git a/src/polymesh/impl/impl_mesh.hh b/src/polymesh/impl/impl_mesh.hh
index 29dfab4a1fc8f06903fce312fae9f78e37058985..6ae4597cb8ca0ac889dea0de9fa0099eeb1d8da1 100644
--- a/src/polymesh/impl/impl_mesh.hh
+++ b/src/polymesh/impl/impl_mesh.hh
@@ -741,10 +741,15 @@ inline face_index Mesh::face_fill(halfedge_index h)
         // set face
         h_ref.face = f;
 
-        // set boundary
+        // fix face boundary
         if (is_boundary(opposite(h)))
             f_ref.halfedge = h;
 
+        // fix adj face boundary
+        auto adj_face = halfedge(opposite(h)).face;
+        if (adj_face.is_valid())
+            fix_boundary_state_of(adj_face);
+
         // advance
         h = h_ref.next_halfedge;
     } while (h != h_begin);