diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 18245e2c76efd08abac2df234fb160654065c783..42625d1f57298d31f8c15a69de83437cc997aa34 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -697,6 +697,14 @@ MElement *GModel::getMeshElementByCoord(SPoint3 &p, int dim)
   }
   return _octree->find(p.x(), p.y(), p.z(), dim);
 }
+std::vector<MElement*> GModel::getMeshElementsByCoord(SPoint3 &p, int dim)
+{
+  if(!_octree){
+    Msg::Debug("Rebuilding mesh element octree");
+    _octree = new MElementOctree(this);
+  }
+  return _octree->findAll(p.x(), p.y(), p.z(), dim);
+}
 
 MVertex *GModel::getMeshVertexByTag(int n)
 {
diff --git a/Geo/GModel.h b/Geo/GModel.h
index e345f19f020a7ca7a44874291c7b751625a02e00..adf35614b3d68833d818e306ba4648a462414e61 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -297,6 +297,7 @@ class GModel
 
   // access a mesh element by coordinates (using an octree search)
   MElement *getMeshElementByCoord(SPoint3 &p, int dim = -1);
+  std::vector<MElement*> getMeshElementsByCoord(SPoint3 &p, int dim = -1);
 
   // access a mesh element by tag, using the element cache
   MElement *getMeshElementByTag(int n);