diff --git a/dune/foamgrid/foamgrid/foamgrid.cc b/dune/foamgrid/foamgrid/foamgrid.cc
index 19903d75023dbbef9d28850cf414fdb0d1142050..a8d9e6efee2dd06906b61456a21f7acea97c609c 100644
--- a/dune/foamgrid/foamgrid/foamgrid.cc
+++ b/dune/foamgrid/foamgrid/foamgrid.cc
@@ -1085,6 +1085,8 @@ bool Dune::FoamGrid<dimgrid, dimworld>::grow()
 
   // All elements that are left now can be validly inserted in the maximum of minElementLevel and
   // minVertexLevel of their respective new vertices
+  using VertexPointer = FoamGridEntityImp<0, dimgrid, dimworld>*;
+  std::map<VertexPointer, VertexPointer> insertedMap;
   for (auto eIt = elementsToInsert_.begin(); eIt != elementsToInsert_.end(); ++eIt)
   {
     // skip impossible elements determined above
@@ -1101,7 +1103,6 @@ bool Dune::FoamGrid<dimgrid, dimworld>::grow()
     eIt->level_ = level;
 
     // set the vertex levels
-    std::map<FoamGridEntityImp<0, dimgrid, dimworld>*, FoamGridEntityImp<0, dimgrid, dimworld>* > insertedMap;
     for(auto vIt = eIt->vertex_.begin(); vIt != eIt->vertex_.end(); ++vIt)
     {
       if((*vIt)->isNew_)
@@ -1111,11 +1112,15 @@ bool Dune::FoamGrid<dimgrid, dimworld>::grow()
         // Insert the new vertex into the grid if it wasn't already inserted
         if(!insertedMap.count(*vIt))
         {
+          // add the vertex to the grid
           (*vIt)->id_ = freeIdCounter_[0]++;
           std::get<0>(entityImps_[level]).push_back(*(*vIt));
+
+          // add a map entry so we know this new vertex was already inserted
+          insertedMap[*vIt] = &*std::get<0>(entityImps_[level]).rbegin();
+
           // publish actual vertex pointer in element
           (*vIt) = &*std::get<0>(entityImps_[level]).rbegin();
-          insertedMap[*vIt] = &*std::get<0>(entityImps_[level]).rbegin();
         }
         else
         {