diff --git a/Common/Gmsh.h b/Common/Gmsh.h
index d2b1b63bd1f81e8b40755d836af6ef29c7c93037..2a9178c7c597a980f90816d870b560380a175c2d 100644
--- a/Common/Gmsh.h
+++ b/Common/Gmsh.h
@@ -19,7 +19,7 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-int GmshInitialize(int argc, char **argv);
+int GmshInitialize(int argc=0, char **argv=0);
 int GmshFinalize();
 int GmshBatch();
 
diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 3feaf601ca98ec3e55c20ea8c335c29f668de1e5..7e47d384af4fe465e287910e91931d6bfd313730 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -1,4 +1,4 @@
-// $Id: GModelIO_OCC.cpp,v 1.33 2008-05-25 07:10:57 geuzaine Exp $
+// $Id: GModelIO_OCC.cpp,v 1.34 2008-06-03 07:25:07 geuzaine Exp $
 //
 // Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 //
@@ -279,7 +279,7 @@ void OCC_Internals::healGeometry(double tolerance, bool fixsmalledges,
   
   if(fixspotstripfaces){
     Msg::Info("- fixing spot and strip faces");
-    Handle(ShapeFix_FixSmallFace) sffsm = new ShapeFix_FixSmallFace();
+    Handle(ShapeFix_FixSmallFace) sffsm = new ShapeFix_FixSmallFace;
     sffsm->Init(shape);
     sffsm->SetPrecision(tolerance);
     sffsm->Perform();
@@ -399,11 +399,12 @@ void OCC_Internals::loadShape(const TopoDS_Shape *s)
 {
   shape = *s;
   BRepTools::Clean(shape);
-  healGeometry(CTX.geom.tolerance, 
-               CTX.geom.occ_fix_small_edges,
-               CTX.geom.occ_fix_small_faces,
-               CTX.geom.occ_sew_faces);
-  BRepTools::Clean(shape);
+  // FIXME should we apply the healing stuff when we import a shape?
+  // healGeometry(CTX.geom.tolerance, 
+  //              CTX.geom.occ_fix_small_edges,
+  //              CTX.geom.occ_fix_small_faces,
+  //              CTX.geom.occ_sew_faces);
+  // BRepTools::Clean(shape);
   buildLists();
 }
 
@@ -478,6 +479,10 @@ int GModel::importOCCShape(const void *shape, const void *options)
   _occ_internals = new OCC_Internals;
   _occ_internals->loadShape((TopoDS_Shape*)shape);
   _occ_internals->buildGModel(this);
+  snapVertices();
+  // FIXME remove this when CL API is done
+  extern void SetBoundingBox();
+  SetBoundingBox();
   return 1;
 }
 
diff --git a/utils/misc/driver.cpp b/utils/misc/driver.cpp
index bd8b2b1c1aa8ceb41eae8fd02e99f3f35270f298..2ada8029975135f154e73b94042853be25215ad3 100644
--- a/utils/misc/driver.cpp
+++ b/utils/misc/driver.cpp
@@ -25,5 +25,6 @@ int main(int argc, char **argv)
   }
   m->writeMSH("test.msh");
   m->writeUNV("test.unv");
+  delete m;
   GmshFinalize();
 }
diff --git a/utils/misc/driverOCC.cpp b/utils/misc/driverOCC.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..787297ead1626e67a05dfb55e4e1748896a7bc06
--- /dev/null
+++ b/utils/misc/driverOCC.cpp
@@ -0,0 +1,39 @@
+// g++ -I/usr/local/opencascade/inc driverOCC.cpp -lGmsh -L/usr/local/opencascade/lib -lTKSTEP -lTKSTEP209 -lTKSTEPAttr -lTKSTEPBase -lTKIGES -lTKXSBase -lTKOffset -lTKFeat -lTKFillet -lTKBool -lTKShHealing -lTKMesh -lTKHLR -lTKBO -lTKPrim -lTKTopAlgo -lTKGeomAlgo -lTKBRep -lTKGeomBase -lTKG3d -lTKG2d -lTKAdvTools -lTKMath -lTKernel -lm
+
+#if !defined(WIN32) || defined(__CYGWIN__)
+#include "config.h"
+#endif
+#include "TopoDS_Shape.hxx"
+#include "BRep_Tool.hxx"
+#include "BRep_Builder.hxx"
+#include "BRepTools.hxx"
+
+#include <stdio.h>
+#include <gmsh/Gmsh.h>
+#include <gmsh/GModel.h>
+#include <gmsh/MElement.h>
+
+int main(int argc, char **argv)
+{
+  // create an OCC shape (by loading it from a brep file)
+  TopoDS_Shape shape;
+  BRep_Builder builder;
+  BRepTools::Read(shape, argv[1], builder);
+  BRepTools::Clean(shape);
+
+  // import the shape in gmsh and mesh it
+  GmshInitialize(argc, argv);
+  GModel *m = new GModel();
+  m->importOCCShape((void*)&shape, 0);
+  m->mesh(2);
+  for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){
+    GRegion *r = *it;
+    printf("volume %d contains %d elements:\n", r->tag(), r->getNumMeshElements());
+    for(unsigned int i = 0; i < r->getNumMeshElements(); i++)
+      printf(" %d", r->getMeshElement(i)->getNum());
+    printf("\n");
+  }
+  m->writeMSH("test.msh");
+  delete m;
+  GmshFinalize();
+}