diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 83c327154adb3df54de0c5180b2dcc94302326e2..a18d52b7570f88777f4d58aedfe3398c47bd0ea3 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -2773,6 +2773,7 @@ void OCC_Internals::fillet(std::vector<TopoDS_Edge> &edgesToFillet,
 
 // FIXME ***************** END OF WILL BE REMOVED ************************
 
+#endif
 
 void GModel::_createOCCInternals()
 {
@@ -2855,7 +2856,11 @@ int GModel::importOCCShape(const void *shape)
   if(!_occ_internals)
     _occ_internals = new OCC_Internals;
   std::vector<int> tags[4];
+#if defined(HAVE_OCC)
   _occ_internals->importShapes((TopoDS_Shape*)shape, false, tags);
+#else
+  Msg::Error("Gmsh requires OpenCASCADE to import TopoDS_Shape");
+#endif
   _occ_internals->synchronize(this);
   snapVertices();
   SetBoundingBox();
@@ -2865,106 +2870,39 @@ int GModel::importOCCShape(const void *shape)
 GVertex* GModel::getVertexForOCCShape(const void *shape)
 {
   if(!_occ_internals) return 0;
+#if defined(HAVE_OCC)
   return _occ_internals->getOCCVertexByNativePtr(this, *(TopoDS_Vertex*)shape);
+#else
+  return 0;
+#endif
 }
 
 GEdge* GModel::getEdgeForOCCShape(const void *shape)
 {
   if(!_occ_internals) return 0;
+#if defined(HAVE_OCC)
   return _occ_internals->getOCCEdgeByNativePtr(this, *(TopoDS_Edge*)shape);
+#else
+  return 0;
+#endif
 }
 
 GFace* GModel::getFaceForOCCShape(const void *shape)
 {
   if(!_occ_internals) return 0;
+#if defined(HAVE_OCC)
   return _occ_internals->getOCCFaceByNativePtr(this, *(TopoDS_Face*)shape);
+#else
+  return 0;
+#endif
 }
 
 GRegion* GModel::getRegionForOCCShape(const void *shape)
 {
   if(!_occ_internals) return 0;
+#if defined(HAVE_OCC)
   return _occ_internals->getOCCRegionByNativePtr(this, *(TopoDS_Solid*)shape);
-}
-
 #else
-
-void GModel::_createOCCInternals()
-{
-}
-
-void GModel::_deleteOCCInternals()
-{
-}
-
-int GModel::importOCCInternals()
-{
   return 0;
-}
-
-int GModel::readOCCBREP(const std::string &fn)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to load '%s'",
-             fn.c_str());
-  return 0;
-}
-
-int GModel::readOCCSTEP(const std::string &fn)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to load '%s'",
-             fn.c_str());
-  return 0;
-}
-
-int GModel::readOCCIGES(const std::string &fn)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to load '%s'",
-             fn.c_str());
-  return 0;
-}
-
-int GModel::writeOCCBREP(const std::string &fn)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to write '%s'",
-             fn.c_str());
-  return 0;
-}
-
-int GModel::writeOCCSTEP(const std::string &fn)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to write '%s'",
-             fn.c_str());
-  return 0;
-}
-
-int GModel::importOCCShape(const void *shape)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to import "
-             "a TopoDS_Shape");
-  return 0;
-}
-
-GVertex* GModel::getVertexForOCCShape(const void *shape)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to query OCC shape");
-  return 0;
-}
-
-GEdge* GModel::getEdgeForOCCShape(const void *shape)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to query OCC shape");
-  return 0;
-}
-
-GFace* GModel::getFaceForOCCShape(const void *shape)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to query OCC shape");
-  return 0;
-}
-
-GRegion* GModel::getRegionForOCCShape(const void *shape)
-{
-  Msg::Error("Gmsh must be compiled with OpenCASCADE support to query OCC shape");
-  return 0;
-}
-
 #endif
+}
diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h
index e60dbb0eb3fcd0c2544566983dd56da499592a63..b77c1388d18c07ce676942797c8fc79d16711b77 100644
--- a/Geo/GModelIO_OCC.h
+++ b/Geo/GModelIO_OCC.h
@@ -7,6 +7,7 @@
 #define _GMODELIO_OCC_H_
 
 #include "GmshConfig.h"
+#include "GmshMessage.h"
 #include "GModel.h"
 #include "OCCIncludes.h"
 
@@ -313,8 +314,14 @@ public:
   void copy(std::vector<int> inTags[4], std::vector<int> outTags[4]){}
   void remove(std::vector<int> inTags[4]){}
   void importShapes(const std::string &fileName, bool highestDimOnly,
-                    std::vector<int> outTags[4], const std::string &format=""){}
-  void exportShapes(const std::string &fileName, const std::string &format=""){}
+                    std::vector<int> outTags[4], const std::string &format="")
+  {
+    Msg::Error("Gmsh requires OpenCASCADE to import '%s'", fileName.c_str());
+  }
+  void exportShapes(const std::string &fileName, const std::string &format="")
+  {
+    Msg::Error("Gmsh requires OpenCASCADE to export '%s'", fileName.c_str());
+  }
   void synchronize(GModel *model){}
 };