diff --git a/Geo/GModelIO_OCC.cpp b/Geo/GModelIO_OCC.cpp
index 591dbdca69e5c103e3aff9b127c84a1c0251da73..144518e2eafce0f7b2812a7347fa7fd65d2017f3 100644
--- a/Geo/GModelIO_OCC.cpp
+++ b/Geo/GModelIO_OCC.cpp
@@ -1344,8 +1344,8 @@ void OCC_Internals::addThickSolid(int tag, int solidTag,
 }
 
 void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c,
-                                 BRepPrimAPI_MakePrism *p,
-                                 BRepPrimAPI_MakeRevol *r,
+                                 BRepSweep_Prism *p,
+                                 BRepSweep_Revol *r,
                                  ExtrudeParams *e,
                                  double x, double y, double z,
                                  double dx, double dy, double dz,
@@ -1373,15 +1373,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c,
       m.source = bot;
       _meshAttr.Bind(top, m);
     }
-    TopoDS_Shape vol;
-    if(p){
-      BRepSweep_Prism prism = p->Prism();
-      vol = prism.Shape(face);
-    }
-    else{
-      BRepSweep_Revol revol = r->Revol();
-      vol = revol.Shape(face);
-    }
+    TopoDS_Shape vol = p ? p->Shape(face) : r->Shape(face);
     {
       ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY);
       ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle);
@@ -1406,15 +1398,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c,
       m.source = bot;
       _meshAttr.Bind(top, m);
     }
-    TopoDS_Shape sur;
-    if(p){
-      BRepSweep_Prism prism = p->Prism();
-      sur = prism.Shape(edge);
-    }
-    else{
-      BRepSweep_Revol revol = r->Revol();
-      sur = revol.Shape(edge);
-    }
+    TopoDS_Shape sur = p ? p->Shape(edge) : r->Shape(edge);
     {
       ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY);
       ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle);
@@ -1431,15 +1415,7 @@ void OCC_Internals::_setMeshAttr(const TopoDS_Compound &c,
     TopoDS_Vertex vertex = TopoDS::Vertex(exp0.Current());
     TopoDS_Shape bot = p ? p->FirstShape(vertex) : r->FirstShape(vertex);
     TopoDS_Shape top = p ? p->LastShape(vertex) : r->LastShape(vertex);
-    TopoDS_Shape lin;
-    if(p){
-      BRepSweep_Prism prism = p->Prism();
-      lin = prism.Shape(vertex);
-    }
-    else{
-      BRepSweep_Revol revol = r->Revol();
-      lin = revol.Shape(vertex);
-    }
+    TopoDS_Shape lin = p ? p->Shape(vertex) : r->Shape(vertex);
     {
       ExtrudeParams *ee = new ExtrudeParams(EXTRUDED_ENTITY);
       ee->fill(p ? TRANSLATE : ROTATE, dx, dy, dz, ax, ay, ax, x, y, z, angle);
@@ -1540,7 +1516,11 @@ void OCC_Internals::_extrude(int mode,
         return;
       }
       result = p.Shape();
-      if(e) _setMeshAttr(c, &p, 0, e, 0., 0., 0., dx, dy, dz, 0., 0., 0., 0.);
+      if(e){
+        const BRepSweep_Prism &prism(p.Prism());
+        _setMeshAttr(c, (BRepSweep_Prism*)&prism, 0, e,
+                     0., 0., 0., dx, dy, dz, 0., 0., 0., 0.);
+      }
     }
     else if(mode == 1){ // revolve
       gp_Ax1 axisOfRevolution(gp_Pnt(x, y, z), gp_Dir(ax, ay, az));
@@ -1551,8 +1531,11 @@ void OCC_Internals::_extrude(int mode,
         return;
       }
       result = r.Shape();
-      if(e)
-        _setMeshAttr(c, 0, &r, e, x, y, z, 0., 0., 0., ax, ay, az, angle);
+      if(e){
+        const BRepSweep_Revol &revol(r.Revol());
+        _setMeshAttr(c, 0, (BRepSweep_Revol*)&revol, e,
+                     x, y, z, 0., 0., 0., ax, ay, az, angle);
+      }
     }
     else if(mode == 2){ // pipe
       if(!_tagWire.IsBound(wireTag)){
diff --git a/Geo/GModelIO_OCC.h b/Geo/GModelIO_OCC.h
index e0f8fdb00f88d9b6aca4085617a7bde12eb1b22d..2b06266f1299a90183861b57ec9ccf352d4f2227 100644
--- a/Geo/GModelIO_OCC.h
+++ b/Geo/GModelIO_OCC.h
@@ -30,8 +30,8 @@ class ExtrudeParams;
 #include <TopTools_ShapeMapHasher.hxx>
 #include <NCollection_DataMap.hxx>
 
-class BRepPrimAPI_MakePrism;
-class BRepPrimAPI_MakeRevol;
+class BRepSweep_Prism;
+class BRepSweep_Revol;
 class BRepBuilderAPI_Transform;
 
 class OCC_Internals {
@@ -99,8 +99,8 @@ class OCC_Internals {
                 ExtrudeParams *e=0);
 
   // set mesh attributes for extruded meshes
-  void _setMeshAttr(const TopoDS_Compound &c, BRepPrimAPI_MakePrism *p,
-                    BRepPrimAPI_MakeRevol *r, ExtrudeParams *e,
+  void _setMeshAttr(const TopoDS_Compound &c, BRepSweep_Prism *p,
+                    BRepSweep_Revol *r, ExtrudeParams *e,
                     double x, double y, double z,
                     double dx, double dy, double dz,
                     double ax, double ay, double az, double angle);