diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index dc17a6bf8d20869e9a8d6f99796991128b585925..478816d790e1d874faffa3de50a9ab945d03d857 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -580,21 +580,25 @@ static void applyOCCMeshConstraints(GModel *m, const void *constraints)
   for(GModel::viter it = m->firstVertex(); it != m->lastVertex(); ++it){
     GVertex *gv = *it;
     if(gv->getNativeType() != GEntity::OpenCascadeModel) continue;
-    TopoDS_Shape *shape = (TopoDS_Shape*)gv->getNativePtr();
-    if(vertexConstraints.IsBound(*shape)) {
+    TopoDS_Shape *s = (TopoDS_Shape*)gv->getNativePtr();
+    if(vertexConstraints.IsBound(*s)) {
       Msg::Debug("Found mesh contraints on vertex %d", gv->tag());
-      const MeshGmsh_VertexConstrain &c(vertexConstraints.Find(*shape));
+      const MeshGmsh_VertexConstrain &c(vertexConstraints.Find(*s));
+      // characteristic length constraint
       double lc = c.GetSize();
-      Msg::Debug("... setting mesh size = %g", lc);
-      gv->setPrescribedMeshSizeAtVertex(lc);
-      if(!c.GetFace().IsNull()){
+      if(lc >= 0.){
+        Msg::Debug("... setting mesh size = %g", lc);
+        gv->setPrescribedMeshSizeAtVertex(lc);
+      }
+      // embedding constraint
+      if(c.IsEmbedded() && !c.GetFace().IsNull()){
         TopoDS_Shape shape = c.GetFace();
         for(GModel::fiter it2 = m->firstFace(); it2 != m->lastFace(); ++it2){
           GFace *gf = *it2;
           if(gf->getNativeType() != GEntity::OpenCascadeModel) continue;
           TopoDS_Shape *shape2 = (TopoDS_Shape*)gf->getNativePtr();
           if(shape.IsSame(*shape2)){
-            Msg::Debug("... embedding in face %d", gf->tag());
+            Msg::Debug("... embedding vertex in face %d", gf->tag());
             gf->addEmbeddedVertex(gv);
           }
         }
@@ -608,11 +612,12 @@ static void applyOCCMeshConstraints(GModel *m, const void *constraints)
   for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it){
     GEdge *ge = *it;
     if(ge->getNativeType() != GEntity::OpenCascadeModel) continue;
-    TopoDS_Shape *shape = (TopoDS_Shape*)ge->getNativePtr();
-    if(edgeConstraints.IsBound(*shape)) {
+    TopoDS_Shape *s = (TopoDS_Shape*)ge->getNativePtr();
+    if(edgeConstraints.IsBound(*s)) {
       Msg::Debug("Found mesh contraints on edge %d", ge->tag());
-      const MeshGmsh_EdgeConstrain &c(edgeConstraints.Find(*shape));
-      if(c.IsMeshImposed() == Standard_True){
+      const MeshGmsh_EdgeConstrain &c(edgeConstraints.Find(*s));
+      // prescribed mesh constraint
+      if(c.IsMeshImposed()){
 	TColStd_SequenceOfInteger nodeNum;
 	c.GetNodesNumber(nodeNum);
 	TColStd_SequenceOfReal nodePar;
@@ -655,6 +660,19 @@ static void applyOCCMeshConstraints(GModel *m, const void *constraints)
 	  }
 	}
       }
+      // embedding constraint
+      if(c.IsEmbedded() && !c.GetFace().IsNull()){
+        TopoDS_Shape shape = c.GetFace();
+        for(GModel::fiter it2 = m->firstFace(); it2 != m->lastFace(); ++it2){
+          GFace *gf = *it2;
+          if(gf->getNativeType() != GEntity::OpenCascadeModel) continue;
+          TopoDS_Shape *shape2 = (TopoDS_Shape*)gf->getNativePtr();
+          if(shape.IsSame(*shape2)){
+            Msg::Debug("... embedding edge in face %d", gf->tag());
+            gf->addEmbeddedEdge(ge);
+          }
+        }
+      }
     }
   }
 #endif
diff --git a/doc/CREDITS.txt b/doc/CREDITS.txt
index 656b0c0efeba483117dffe4300803ea055ff8806..fa80fb75473ac8243555109e14a87e82930ca968 100644
--- a/doc/CREDITS.txt
+++ b/doc/CREDITS.txt
@@ -20,7 +20,8 @@ with the MacOS port and the tensor display code; Pierre Badel for help
 with the GSL integration; Marc Ume for the original list code; Matt
 Gundry for the Plot3d mesh format; Jozef Vesely for help with the
 Tetgen integration; Koen Hillewaert for high order element mappings
-and other improvements; Jacques Lechelle for the DIFFPACK mesh format.
+and other improvements; Jacques Lechelle for the DIFFPACK mesh format;
+Ruth Sabariego for pyramids.
 
 The AVL tree code (Common/avl.*) and the YUV image code
 (Graphics/gl2yuv.*) are copyright (C) 1988-1993, 1995 The Regents of
@@ -104,8 +105,11 @@ machines for testing Gmsh: Juan Abanto, Olivier Adam, Guillaume
 Alleon, Eric Bechet, Laurent Champaney, Pascal Dupuis, Philippe
 Geuzaine, Johan Gyselinck, Francois Henrotte, Benoit Meys, Nicolas
 Moes, Osamu Nakamura, Chad Schmutzer, Jean-Luc Fl'ejou, Xavier
-Dardenne, Christophe Prud'homme, Sebastien.Clerc, Jose Miguel Pasini,
+Dardenne, Christophe Prud'homme, Sebastien Clerc, Jose Miguel Pasini,
 Philippe Lussou, Jacques Kools, Bayram Yenikaya, Peter Hornby, Krishna
 Mohan Gundu, Christopher Stott, Timmy Schumacher, Carl Osterwisch,
-Bruno Frackowiak, Philip Kelleners, Romuald Conty, Ruth Sabariego,
-Renaud Sizaire, Michel Benhamou, Emilie Marchandise, Tom De Vuyst.
+Bruno Frackowiak, Philip Kelleners, Romuald Conty, Renaud Sizaire,
+Michel Benhamou, Emilie Marchandise, Tom De Vuyst, Kris Van den
+Abeele, Simon Vun, Simon Corbin, Thomas De-Soza, Marcus Drosson,
+Antoine Dechaume, Jose Paulo Moitinho de Almeida, Thomas Pinchard,
+Corrado Chisari, Axel Hackbarth, Peter Wainwright.