diff --git a/Geo/GModel.h b/Geo/GModel.h
index b81a97ce6543a159fdf74fe3e611946966659ad1..52194e4ae2209f37d5fd11c834e6222c16d76116 100644
--- a/Geo/GModel.h
+++ b/Geo/GModel.h
@@ -138,6 +138,7 @@ class GModel
   virtual int readFourier(const std::string &name);
 
   // OCC model
+  int readOCCBREP(const std::string &name);
   int readOCCIGES(const std::string &name);
   int readOCCSTEP(const std::string &name);
   void deleleOCCInternals();
diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 4c1e3f854334b1d7cb259d910cb7ea5706fb13a1..4fc99138b04e4279ccd0bfdc3ab62c796bd3f375 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -1,4 +1,4 @@
-  // $Id: GModelIO_OCC.cpp,v 1.3 2006-11-15 15:06:45 geuzaine Exp $
+  // $Id: GModelIO_OCC.cpp,v 1.4 2006-11-15 21:53:31 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -265,7 +265,8 @@ void OCC_Internals :: buildLists ()
 
 void OCC_Internals :: loadBREP (const char *fn)
 {
-  throw;
+  BRep_Builder aBuilder;
+  Standard_Boolean result = BRepTools::Read( shape, (char*)fn, aBuilder );
 }
 
 void OCC_Internals :: loadSTEP (const char *fn)
@@ -342,6 +343,14 @@ int GModel::readOCCIGES(const std::string &fn)
   occ_internals->buildGModel (this);
   return 1;
 }
+int GModel::readOCCBREP(const std::string &fn)
+{
+  occ_internals = new OCC_Internals;
+  occ_internals->loadBREP (fn.c_str());
+  occ_internals->buildLists ();
+  occ_internals->buildGModel (this);
+  return 1;
+}
 void GModel::deleteOCCInternals()
 {
   if(occ_internals)delete occ_internals;
diff --git a/Geo/OCCIncludes.h b/Geo/OCCIncludes.h
index 10367594b6fa4cb24a11cd6a6dc9ce74672d7334..80c6b4cbe32e9e6526923139090b60eb1fd82648 100644
--- a/Geo/OCCIncludes.h
+++ b/Geo/OCCIncludes.h
@@ -30,6 +30,7 @@ using std::iostream;
 #include "TopoDS_Solid.hxx"
 #include "TopExp_Explorer.hxx"
 #include "BRep_Tool.hxx"
+#include "BRep_Builder.hxx"
 #include "Geom_Curve.hxx"
 #include "Geom2d_Curve.hxx"
 #include "Geom_Surface.hxx"
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index 775b7271899e120e46c482373471cff6cad77fdc..8d76b46e5beabbeefa3bca1afbabd6b1b268e3b8 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.126 2006-11-14 20:20:18 remacle Exp $
+// $Id: OpenFile.cpp,v 1.127 2006-11-15 21:53:31 remacle Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -293,6 +293,10 @@ int MergeProblem(char *name, int warn_if_missing)
   if(!strcmp(ext, ".stl") || !strcmp(ext, ".STL")){
     status = GMODEL->readSTL(name, CTX.mesh.stl_distance_tol);
   }
+  else if(!strcmp(ext, ".brep") || !strcmp(ext, ".rle") ||
+	  !strcmp(ext, ".brp") || !strcmp(ext, ".BRP")){
+    GMODEL->readOCCBREP(std::string(name));
+  }
   else if(!strcmp(ext, ".iges") || !strcmp(ext, ".IGES") ||
 	  !strcmp(ext, ".igs") || !strcmp(ext, ".IGS")){
     GMODEL->readOCCIGES(std::string(name));