diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 1783b3f1d22f46f2e231d4662f26db9d3de63873..c6ad48039eddcf6d89fe8babdbadb048a456cbae 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -136,9 +136,13 @@ GModel::GModel(std::string name)
   list.push_back(this);
   // at the moment we always create (at least an empty) GEO model
   _createGEOInternals();
+
 #if defined(HAVE_OCC)
-  _factory = new OCCFactory();
+  setFactory("OpenCASCADE");
+#else
+  setFactory("Gmsh");
 #endif
+
 #if defined(HAVE_MESH)
   _fields = new FieldManager();
 #endif
@@ -181,17 +185,17 @@ int GModel::setCurrent(GModel *m)
 void GModel::setFactory(std::string name)
 {
   if(_factory) delete _factory;
-  _factory = new GeoFactory(); //creates by default a GeoFactory
-  if(name == "Gmsh") {
-    _factory = new GeoFactory();
-  }
-  else if(name == "OpenCASCADE"){
+  if(name == "OpenCASCADE"){
 #if defined(HAVE_OCC)
     _factory = new OCCFactory();
 #else
-    Msg::Error("Missing OpenCASCADE support");
+    Msg::Error("Missing OpenCASCADE support: using Gmsh GEO factory instead");
+    _factory = new GeoFactory();
 #endif
   }
+  else{
+    _factory = new GeoFactory();
+  }
 }
 
 GModel *GModel::findByName(std::string name)