diff --git a/Numeric/BasisFactory.cpp b/Numeric/BasisFactory.cpp
index 60f8ea8aa10ea9847393232f2d583a63621fdff2..129011088747e34b91fab94e7efcc5c1a119990a 100644
--- a/Numeric/BasisFactory.cpp
+++ b/Numeric/BasisFactory.cpp
@@ -45,10 +45,17 @@ const nodalBasis* BasisFactory::getNodalBasis(int tag)
       return NULL;
   }
 
-  // FIXME: check if already exists to deallocate if necessary
-  fs.insert(std::make_pair(tag, F));
+  std::pair<std::map<int, nodalBasis*>::const_iterator, bool> inserted;
 
-  return F;
+  #pragma omp critical
+    {
+      inserted = fs.insert(std::make_pair(tag, F));
+
+      if (!inserted.second)
+        delete F;
+    }
+
+  return inserted.first->second;
 }
 
 const JacobianBasis* BasisFactory::getJacobianBasis(int tag)