diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx
--- OCCT-6.9.1_SRC/drv/BRepFill/BRepFill_Pipe.jxx	2015-09-25 17:35:58.000000000 +0300
+++ OCCT-6.9.1p1_SRC/drv/BRepFill/BRepFill_Pipe.jxx	2016-04-26 16:10:42.000000000 +0300
@@ -4,6 +4,7 @@
 #include <StdFail_NotDone.hxx>
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Shape.hxx>
+#include <TopTools_ListOfShape.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Vertex.hxx>
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx
--- OCCT-6.9.1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx	2015-09-25 17:36:04.000000000 +0300
+++ OCCT-6.9.1p1_SRC/drv/BRepOffsetAPI/BRepOffsetAPI_MakePipe.jxx	2016-04-26 16:10:47.000000000 +0300
@@ -1,4 +1,5 @@
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Shape.hxx>
 #include <BRepFill_Pipe.hxx>
+#include <TopTools_ListOfShape.hxx>
 #include <BRepOffsetAPI_MakePipe.hxx>
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx
--- OCCT-6.9.1_SRC/inc/BRepFill_Pipe.hxx	2015-09-25 17:35:58.000000000 +0300
+++ OCCT-6.9.1p1_SRC/inc/BRepFill_Pipe.hxx	2016-04-26 16:10:42.000000000 +0300
@@ -18,6 +18,7 @@
 #include <TopTools_MapOfShape.hxx>
 #include <BRepFill_DataMapOfShapeHArray2OfShape.hxx>
 #include <Standard_Integer.hxx>
+#include <TopTools_DataMapOfShapeListOfShape.hxx>
 #include <GeomAbs_Shape.hxx>
 #include <GeomFill_Trihedron.hxx>
 #include <Standard_Boolean.hxx>
@@ -28,6 +29,7 @@
 class StdFail_NotDone;
 class TopoDS_Wire;
 class TopoDS_Shape;
+class TopTools_ListOfShape;
 class TopoDS_Face;
 class TopoDS_Edge;
 class TopoDS_Vertex;
@@ -65,6 +67,9 @@
   
   Standard_EXPORT  const  TopoDS_Shape& LastShape()  const;
   
+  //! Returns the list of shapes generated from the shape <S>.
+  Standard_EXPORT   void Generated (const TopoDS_Shape& S, TopTools_ListOfShape& L) ;
+  
   //! Returns the face created from an edge of the spine
   //! and an edge of the profile.
   //! if the edges are not in the spine or the profile
@@ -131,6 +136,7 @@
   Standard_Integer myCurIndexOfSectionEdge;
   TopoDS_Shape myFirst;
   TopoDS_Shape myLast;
+  TopTools_DataMapOfShapeListOfShape myGenMap;
   Standard_Integer myDegmax;
   Standard_Integer mySegmax;
   GeomAbs_Shape myContinuity;
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx
--- OCCT-6.9.1_SRC/inc/BRepOffsetAPI_MakePipe.hxx	2015-09-25 17:36:04.000000000 +0300
+++ OCCT-6.9.1p1_SRC/inc/BRepOffsetAPI_MakePipe.hxx	2016-04-26 16:10:47.000000000 +0300
@@ -18,6 +18,7 @@
 class TopoDS_Wire;
 class TopoDS_Shape;
 class BRepFill_Pipe;
+class TopTools_ListOfShape;
 
 
 //! Describes functions to build pipes.
@@ -68,6 +69,8 @@
   //! Returns the TopoDS Shape of the top of the prism.
   Standard_EXPORT   TopoDS_Shape LastShape() ;
   
+  Standard_EXPORT virtual  const  TopTools_ListOfShape& Generated (const TopoDS_Shape& S) ;
+  
   Standard_EXPORT   TopoDS_Shape Generated (const TopoDS_Shape& SSpine, const TopoDS_Shape& SProfile) ;
   
   Standard_EXPORT   Standard_Real ErrorOnSurface()  const;
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl
--- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cdl	2015-09-16 18:27:02.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cdl	2016-04-26 15:51:10.000000000 +0300
@@ -15,11 +15,11 @@
 -- commercial license or contractual agreement.
 
 
-class Pipe from BRepFill 
+class Pipe from BRepFill
 
 	---Purpose: Create a  shape by sweeping a shape  (the profile)
 	--          along a wire (the spine).
-	--          
+	--
 	--          For each edge  or vertex from the spine  the  user
 	--          may ask for the shape generated from each subshape
 	--          of the profile.
@@ -28,38 +28,40 @@
 
     HArray2OfShape from TopTools,
     MapOfShape     from TopTools,
+		ListOfShape from TopTools,
     DataMapOfShapeHArray2OfShape from BRepFill,
+		DataMapOfShapeListOfShape from TopTools,
     LocationLaw  from BRepFill,
     Shape  from TopoDS,
     Face   from TopoDS,
     Wire   from TopoDS,
     Edge   from TopoDS,
-    Vertex from TopoDS,  
+    Vertex from TopoDS,
     Pnt    from  gp,
     Trsf   from  gp,
     Shape  from GeomAbs,
     Trihedron from GeomFill
 
 raises
-    DomainError from Standard, 
+    DomainError from Standard,
     NotDone     from StdFail
 
 is
 
     Create returns Pipe from BRepFill;
-    
-    Create ( Spine   : Wire from TopoDS; 
+
+    Create ( Spine   : Wire from TopoDS;
     	     Profile : Shape from TopoDS;
 	     aMode   : Trihedron from GeomFill = GeomFill_IsCorrectedFrenet;
 	     ForceApproxC1 : Boolean from Standard = Standard_False;
-             GeneratePartCase : Boolean from Standard = Standard_False) 
+             GeneratePartCase : Boolean from Standard = Standard_False)
     returns Pipe from BRepFill;
-    
-    Perform (me : in out;  Spine   : Wire from TopoDS; 
+
+    Perform (me : in out;  Spine   : Wire from TopoDS;
     	    	    	   Profile : Shape from TopoDS;
-                           GeneratePartCase : Boolean from Standard = Standard_False) 
+                           GeneratePartCase : Boolean from Standard = Standard_False)
     is static;
-    
+
     Spine(me) returns Shape from TopoDS
 	---C++ : return const &
     is static;
@@ -74,7 +76,7 @@
 
     ErrorOnSurface (me)
     returns Real from Standard;
-    
+
     FirstShape(me) returns Shape from TopoDS
 	---C++ : return const &
     is static;
@@ -83,27 +85,30 @@
 	---C++ : return const &
     is static;
 
+    Generated(me: in out; S: Shape from TopoDS; L: in out ListOfShape from TopTools);
+    ---Purpose: Returns the list of shapes generated from the shape <S>.
+
     Face(me : in out; ESpine, EProfile : Edge from TopoDS)
     returns Face from TopoDS
 	---Purpose: Returns the face created from an edge of the spine
 	--          and an edge of the profile.
     raises
-    	DomainError from Standard 
+    	DomainError from Standard
 	---Purpose: if the edges are not in the spine or the profile
-	
+
     is static;
-    
+
     Edge(me : in out; ESpine : Edge from TopoDS; VProfile : Vertex from TopoDS)
     returns Edge from TopoDS
 	---Purpose: Returns the edge created from an edge of the spine
 	--          and a vertex of the profile.
     raises
-    	DomainError from Standard 
+    	DomainError from Standard
 	---Purpose: if the edge or the vertex are not in  the spine or
 	--          the profile.
-	
+
     is static;
-    
+
     Section(me; VSpine : Vertex from TopoDS)
     returns Shape from TopoDS
 	---Purpose: Returns  the shape created from the profile at the
@@ -111,50 +116,50 @@
     raises
     	DomainError from Standard
 	---Purpose: if the vertex is not in the Spine
-    is static; 
-     
-     
-    PipeLine(me : in out;  Point :  Pnt  from  gp)  
+    is static;
+
+
+    PipeLine(me : in out;  Point :  Pnt  from  gp)
 	---Purpose: Create a Wire by sweeping the Point along the <spine>
-    returns  Wire  from  TopoDS 
+    returns  Wire  from  TopoDS
     raises
     	DomainError from Standard
-	---Purpose: if the <Spine> is undefined      
+	---Purpose: if the <Spine> is undefined
     is  static;
 
 
     --
     --  Private methods
-    --  
-    
-    MakeShape(me : in out; S : Shape from TopoDS; 
+    --
+
+    MakeShape(me : in out; S : Shape from TopoDS;
     	    	    	   FirstShape,  LastShape  :  Shape  from  TopoDS)
     returns Shape from TopoDS
 	---Purpose: Auxiliary  recursive  method  used  to  build  the
-	--          result. 
+	--          result.
     is static private;
 
 
-    FindEdge(me;  S : Shape from TopoDS;  
-    	          E : Edge  from  TopoDS;  
-		  Init  : in  out Integer)	 
+    FindEdge(me;  S : Shape from TopoDS;
+    	          E : Edge  from  TopoDS;
+		  Init  : in  out Integer)
 	---Purpose: Auxiliary recursive method used to find the edge's index
     returns  Integer
     is static private;
 
-    FindVertex(me;  S : Shape from TopoDS;  
-    	            V : Vertex  from  TopoDS;  
-		    Init  : in  out Integer) 
+    FindVertex(me;  S : Shape from TopoDS;
+    	            V : Vertex  from  TopoDS;
+		    Init  : in  out Integer)
     returns  Integer
-    is static private; 
-  
+    is static private;
+
     DefineRealSegmax(me : in out)
-    is static private; 
-    
+    is static private;
+
     RebuildTopOrBottomFace(me; aFace: Shape from TopoDS;
     	    	    	       IsTop: Boolean from Standard)
-    is static private; 
-    
+    is static private;
+
     ShareFaces(me: in out; theShape: Shape from TopoDS;
                            theInitialFacesLen: Integer;
                            theInitialEdgesLen: Integer;
@@ -164,30 +169,31 @@
 	--          Returns the shared shape. If theShape is not modified this
 	--          method returns it.
     returns Shape from TopoDS
-    is static private; 
-     
+    is static private;
+
 fields
     mySpine   : Wire  from TopoDS;
     myProfile : Shape from TopoDS;
-    myShape   : Shape from TopoDS; 
-    myTrsf    : Trsf  from  gp; 
+    myShape   : Shape from TopoDS;
+    myTrsf    : Trsf  from  gp;
     myLoc     : LocationLaw  from BRepFill;
-    mySections: HArray2OfShape from TopTools; 
-    myFaces   : HArray2OfShape from TopTools;  
-    myEdges   : HArray2OfShape from TopTools;  
-    myReversedEdges : MapOfShape from TopTools;  
+    mySections: HArray2OfShape from TopTools;
+    myFaces   : HArray2OfShape from TopTools;
+    myEdges   : HArray2OfShape from TopTools;
+    myReversedEdges : MapOfShape from TopTools;
     myTapes   : DataMapOfShapeHArray2OfShape from BRepFill;
     myRails   : DataMapOfShapeHArray2OfShape from BRepFill;
     myCurIndexOfSectionEdge : Integer from Standard;
-    myFirst   :  Shape  from  TopoDS; 
-    myLast    :  Shape  from  TopoDS; 
-     
+    myFirst   :  Shape  from  TopoDS;
+    myLast    :  Shape  from  TopoDS;
+		myGenMap  : DataMapOfShapeListOfShape from TopTools;
+
     myDegmax  : Integer from Standard;
     mySegmax  : Integer from Standard;
     myContinuity : Shape from GeomAbs;
     myMode    : Trihedron from GeomFill;
     myForceApproxC1 : Boolean from Standard;
-    
+
     myErrorOnSurf : Real from Standard;
-    
+
 end Pipe;
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx
--- OCCT-6.9.1_SRC/src/BRepFill/BRepFill_Pipe.cxx	2015-09-16 18:27:02.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/BRepFill/BRepFill_Pipe.cxx	2016-04-26 15:51:10.000000000 +0300
@@ -69,6 +69,38 @@
 static Standard_Boolean Affich = 0;
 #endif
 
+// ---------------------------------------------------------------------------------
+// static function: UpdateMap
+// purpose:
+// ---------------------------------------------------------------------------------
+static Standard_Boolean UpdateMap(const TopoDS_Shape&                 theKey,
+                                  const TopoDS_Shape&                 theValue,
+                                  TopTools_DataMapOfShapeListOfShape& theMap)
+{
+  if(!theMap.IsBound(theKey))
+  {
+    TopTools_ListOfShape thelist;
+    theMap.Bind(theKey, thelist);
+  }
+  TopTools_ListOfShape& aList = theMap.ChangeFind(theKey);
+  TopTools_ListIteratorOfListOfShape anIt(aList);
+  Standard_Boolean found = Standard_False;
+
+  for(; anIt.More(); anIt.Next())
+  {
+    if(theValue.IsSame(anIt.Value()))
+    {
+      found = Standard_True;
+      break;
+    }
+  }
+
+  if(!found)
+    aList.Append(theValue);
+  
+  return !found;
+}
+
 static void ReverseModifiedEdges(TopoDS_Shape& aShape,
                                  TopTools_MapOfShape& Emap)
 {
@@ -374,6 +406,47 @@
   return myLast;
 }
 
+//=======================================================================
+//function : Generated
+//purpose  : 
+//=======================================================================
+void BRepFill_Pipe::Generated(const TopoDS_Shape&   theShape,
+                              TopTools_ListOfShape& theList) 
+{
+  theList.Clear();
+
+  if (theShape.IsSame(myProfile))
+    theList.Append(myShape);
+  else
+  {
+    if (theShape.ShapeType() == TopAbs_FACE ||
+        theShape.ShapeType() == TopAbs_WIRE)
+    {
+      if(myGenMap.IsBound(theShape))
+        theList = myGenMap.Find(theShape);
+    }
+    else if (theShape.ShapeType() == TopAbs_EDGE)
+    {
+      TopoDS_Iterator itw(mySpine);
+      for (; itw.More(); itw.Next())
+      {
+        const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value());
+        const TopoDS_Shape& aFace = Face(aSpineEdge, TopoDS::Edge(theShape));
+        theList.Append(aFace);
+      }
+    }
+    else if (theShape.ShapeType() == TopAbs_VERTEX)
+    {
+      TopoDS_Iterator itw(mySpine);
+      for (; itw.More(); itw.Next())
+      {
+        const TopoDS_Edge& aSpineEdge = TopoDS::Edge(itw.Value());
+        const TopoDS_Shape& anEdge = Edge(aSpineEdge, TopoDS::Vertex(theShape));
+        theList.Append(anEdge);
+      }
+    }
+  }
+}
 
 //=======================================================================
 //function : Face
@@ -640,6 +713,7 @@
       MkSw.Build( myReversedEdges, myTapes, myRails,
                   BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax );
       result = MkSw.Shape();
+      UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap);
       myErrorOnSurf = MkSw.ErrorOnSurface();
 
       Handle(TopTools_HArray2OfShape) aSections = MkSw.Sections();
@@ -662,6 +736,7 @@
       MkSw.Build( myReversedEdges, myTapes, myRails,
                   BRepFill_Modified, myContinuity, GeomFill_Location, myDegmax, mySegmax );
       result = MkSw.Shape();
+      UpdateMap(TheS.Located(myProfile.Location()), result, myGenMap);
       myErrorOnSurf = MkSw.ErrorOnSurface();
       //Correct <myFirst> and <myLast>
       ReverseModifiedEdges(myFirst, myReversedEdges);
@@ -769,6 +844,7 @@
       BS.Add(solid,TopoDS::Shell(aLocalShape));
 //      BS.Add(solid,TopoDS::Shell(result.Reversed()));
     }
+    UpdateMap(TheS.Located(myProfile.Location()), solid, myGenMap);
     return solid;
   }
   else {
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl
--- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl	2015-09-16 18:27:03.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cdl	2016-04-26 15:51:11.000000000 +0300
@@ -36,8 +36,8 @@
     ListOfShape from TopTools
 
 is
- 
-    
+
+
     Create( Spine   : Wire  from TopoDS;
     	    Profile : Shape from TopoDS )
 	---Purpose: Constructs a pipe by sweeping the shape Profile along
@@ -52,7 +52,7 @@
     	-- Standard_DomainError if the profile is a solid or a
     	-- composite solid.
     returns MakePipe from BRepOffsetAPI;
-    
+
     Create( Spine   : Wire  from TopoDS;
     	    Profile : Shape from TopoDS;
 	    aMode   : Trihedron from GeomFill;
@@ -72,7 +72,7 @@
     Build(me : in out)
     is redefined;
 	---Purpose: Builds the resulting shape (redefined from MakeShape).
-	---Level: Public    
+	---Level: Public
 
 
     FirstShape (me : in out)
@@ -84,6 +84,11 @@
     ---Purpose: Returns the TopoDS Shape of the top of the prism.
     returns Shape from TopoDS;
 
+    Generated (me: in out; S: Shape from TopoDS)
+    returns ListOfShape from TopTools
+    is redefined;
+    ---C++: return const &
+    ---Level: Public
 
     Generated (me: in out; SSpine, SProfile : Shape from TopoDS)
         ---Level: Public
@@ -99,4 +104,4 @@
 
     myPipe : Pipe from BRepFill;
 
-end MakePipe; 
+end MakePipe;
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx
--- OCCT-6.9.1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx	2015-09-16 18:27:03.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/BRepOffsetAPI/BRepOffsetAPI_MakePipe.cxx	2016-04-26 15:51:11.000000000 +0300
@@ -109,14 +109,23 @@
   return myPipe.LastShape();
 }
 
+//=======================================================================
+//function : Generated
+//purpose  : standard method
+//=======================================================================
+const TopTools_ListOfShape& BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& S) 
+{
+  myPipe.Generated(S, myGenerated);
+  return myGenerated;
+}
 
 //=======================================================================
 //function : Generated
-//purpose  : 
+//purpose  : returns generated elementary subshape
 //=======================================================================
 
-TopoDS_Shape BRepOffsetAPI_MakePipe::Generated (const TopoDS_Shape& SSpine,
-					  const TopoDS_Shape& SProfile)
+TopoDS_Shape BRepOffsetAPI_MakePipe::Generated(const TopoDS_Shape& SSpine,
+                                               const TopoDS_Shape& SProfile)
 {
   if (SProfile.ShapeType () == TopAbs_EDGE) {
     return myPipe.Face (TopoDS::Edge (SSpine), TopoDS::Edge (SProfile));
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx
--- OCCT-6.9.1_SRC/src/QABugs/QABugs_19.cxx	2015-09-16 18:27:29.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/QABugs/QABugs_19.cxx	2016-04-26 15:51:28.000000000 +0300
@@ -53,6 +53,7 @@
 #include <GeomFill_Trihedron.hxx>
 #include <BRepOffsetAPI_MakePipe.hxx>
 #include <Standard_Atomic.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 
 #include <Standard_Version.hxx>
 
@@ -4306,6 +4307,95 @@
   return 0;
 }
 
+//========================================================================
+//function : OCC27065
+//purpose  : Tests overloaded method "Generated" of BRepOffsetAPI_MakePipe
+//========================================================================
+static Standard_Integer OCC27065(Draw_Interpretor& di,
+                                 Standard_Integer n, const char** a)
+{
+  if (n < 3) return 1;
+  BRep_Builder BB;
+
+  TopoDS_Shape SpineShape = DBRep::Get(a[1],TopAbs_WIRE);
+  if ( SpineShape.IsNull()) return 1;
+  TopoDS_Wire Spine = TopoDS::Wire(SpineShape);
+
+  TopoDS_Shape Profile = DBRep::Get(a[2]);
+  if ( Profile.IsNull()) return 1;
+
+  BRepOffsetAPI_MakePipe aPipeBuilder(Spine, Profile);
+  if (!aPipeBuilder.IsDone())
+  {
+    di << "Error: failed to create pipe\n";
+    return 1;
+  }
+
+  TopExp_Explorer Explo(Profile, TopAbs_SHELL);
+  TopoDS_Shape aShape;
+  TopTools_ListIteratorOfListOfShape itl;
+  if (Explo.More())
+  {
+    aShape = Explo.Current();
+    TopoDS_Compound res1;
+    BB.MakeCompound(res1);
+    itl.Initialize(aPipeBuilder.Generated(aShape));
+    for (; itl.More(); itl.Next())
+      BB.Add(res1, itl.Value());
+    DBRep::Set("res_shell", res1);
+  }
+
+  Explo.Init(Profile, TopAbs_FACE);
+  if (Explo.More())
+  {
+    aShape = Explo.Current();
+    TopoDS_Compound res2;
+    BB.MakeCompound(res2);
+    itl.Initialize(aPipeBuilder.Generated(aShape));
+    for (; itl.More(); itl.Next())
+      BB.Add(res2, itl.Value());
+    DBRep::Set("res_face", res2);
+  }
+
+  Explo.Init(Profile, TopAbs_WIRE);
+  if (Explo.More())
+  {
+    aShape = Explo.Current();
+    TopoDS_Compound res3;
+    BB.MakeCompound(res3);
+    itl.Initialize(aPipeBuilder.Generated(aShape));
+    for (; itl.More(); itl.Next())
+      BB.Add(res3, itl.Value());
+    DBRep::Set("res_wire", res3);
+  }
+
+  Explo.Init(Profile, TopAbs_EDGE);
+  if (Explo.More())
+  {
+    aShape = Explo.Current();
+    TopoDS_Compound res4;
+    BB.MakeCompound(res4);
+    itl.Initialize(aPipeBuilder.Generated(aShape));
+    for (; itl.More(); itl.Next())
+      BB.Add(res4, itl.Value());
+    DBRep::Set("res_edge", res4);
+  }
+
+  Explo.Init(Profile, TopAbs_VERTEX);
+  if (Explo.More())
+  {
+    aShape = Explo.Current();
+    TopoDS_Compound res5;
+    BB.MakeCompound(res5);
+    itl.Initialize(aPipeBuilder.Generated(aShape));
+    for (; itl.More(); itl.Next())
+      BB.Add(res5, itl.Value());
+    DBRep::Set("res_vertex", res5);
+  }
+
+  return 0;
+}
+
 void QABugs::Commands_19(Draw_Interpretor& theCommands) {
   const char *group = "QABugs";
 
@@ -4397,5 +4487,9 @@
 
   theCommands.Add ("OCC26313", "OCC26313 result shape", __FILE__, OCC26313, group);
 
+  theCommands.Add ("OCC27065",
+                   "OCC27065 spine profile",
+                   __FILE__, OCC27065, group);
+
   return;
 }
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx
--- OCCT-6.9.1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx	2015-09-16 18:27:36.000000000 +0300
+++ OCCT-6.9.1p1_SRC/src/SelectMgr/SelectMgr_SelectionManager.cxx	2016-04-26 15:51:32.000000000 +0300
@@ -687,6 +687,7 @@
   for(theObject->Init(); theObject->More(); theObject->Next())
   {
     const Handle(SelectMgr_Selection)& aSelection = theObject->CurrentSelection();
+    aSelection->UpdateStatus (SelectMgr_TOU_Full);
     Standard_Integer aSelMode = aSelection->Mode();
 
     for (TColStd_MapIteratorOfMapOfTransient aSelectorIter (mySelectors); aSelectorIter.More(); aSelectorIter.Next())
@@ -697,10 +698,10 @@
           ClearSelectionStructures (theObject, aSelMode, aCurSelector);
           theObject->RecomputePrimitives(aSelMode);
           RestoreSelectionStructures (theObject, aSelMode, aCurSelector);
+          aSelection->UpdateStatus (SelectMgr_TOU_None);
+          aSelection->UpdateBVHStatus (SelectMgr_TBU_None);
       }
     }
-    aSelection->UpdateStatus (SelectMgr_TOU_None);
-    aSelection->UpdateBVHStatus (SelectMgr_TBU_None);
   }
 }
 
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1
--- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_1	1970-01-01 03:00:00.000000000 +0300
+++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_1	2016-04-26 14:43:27.000000000 +0300
@@ -0,0 +1,24 @@
+puts "============"
+puts "OCC27065"
+puts "============"
+puts ""
+###############################
+## BRepOffsetAPI_MakePipe misses definition of virtual method Generated()
+###############################
+
+pload QAcommands
+
+restore [locate_data_file bug24840_comp.brep] sh
+explode sh
+OCC27065 sh_1 sh_2
+fit
+
+checknbshapes res_shell -vertex 56 -edge 130 -wire 99 -face 99 -shell 24 -solid 24 -compsolid 1 -compound 1 -shape 434
+
+checknbshapes res_face -vertex 8 -edge 12 -wire 6 -face 6 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 35
+
+checknbshapes res_wire -vertex 8 -edge 12 -wire 4 -face 4 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 30
+
+checknbshapes res_edge -vertex 4 -edge 4 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 11
+
+checknbshapes res_vertex -vertex 2 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 4
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2 OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2
--- OCCT-6.9.1_SRC/tests/bugs/modalg_6/bug27065_2	1970-01-01 03:00:00.000000000 +0300
+++ OCCT-6.9.1p1_SRC/tests/bugs/modalg_6/bug27065_2	2016-04-26 14:43:27.000000000 +0300
@@ -0,0 +1,28 @@
+puts "============"
+puts "OCC27065"
+puts "============"
+puts ""
+###############################
+## BRepOffsetAPI_MakePipe misses definition of virtual method Generated()
+###############################
+
+pload QAcommands
+
+restore [locate_data_file bug23903_base.brep] base
+restore [locate_data_file bug23903_path.brep] sp
+explode base
+shape pr Sh
+add base_1 pr
+add base_2 pr
+OCC27065 sp pr
+fit
+
+checknbshapes res_shell -vertex 2 -edge 5 -wire 3 -face 3 -shell 2 -solid 2 -compsolid 1 -compound 1 -shape 19
+
+checknbshapes res_face -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 1 -compsolid 0 -compound 1 -shape 13
+
+checknbshapes res_wire -vertex 2 -edge 4 -wire 2 -face 2 -shell 1 -solid 0 -compsolid 0 -compound 1 -shape 12
+
+checknbshapes res_edge -vertex 2 -edge 3 -wire 1 -face 1 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 8
+
+checknbshapes res_vertex -vertex 1 -edge 1 -wire 0 -face 0 -shell 0 -solid 0 -compsolid 0 -compound 1 -shape 3
diff -Naur --exclude=CVS --exclude=.git --exclude=samples --exclude=cmake --exclude=Makefile.am --exclude=CMakeLists.txt --exclude=adm OCCT-6.9.1_SRC/tests/bugs/vis/bug26870 OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870
--- OCCT-6.9.1_SRC/tests/bugs/vis/bug26870	1970-01-01 03:00:00.000000000 +0300
+++ OCCT-6.9.1p1_SRC/tests/bugs/vis/bug26870	2016-04-26 15:52:06.000000000 +0300
@@ -0,0 +1,37 @@
+puts "============"
+puts "CR26870"
+puts "============"
+puts ""
+
+##########################################################################################
+puts "Visualization - deactivated selections are not updated after object's re-computation"
+##########################################################################################
+
+pload VISUALIZATION MODELING
+
+vinit
+box b 1 1 1
+vdisplay b
+vfit
+
+vselmode b 2 1
+vselmode b 4 1
+vselmode b 4 0
+
+box b 3 3 3
+vdisplay b
+vfit
+
+vselmode 4 1
+
+# pick a point onto previously computed face
+vmoveto 80 265
+if {[vreadpixel 90 206 name] == "CYAN1 1"} {
+  puts "ERROR: previously computed entities are highlighted! Selection mode 4 was not updated after redisplaying the box."
+}
+# pick a point onto box
+if {[vreadpixel 29 216 name] == "YELLOW 1"} {
+  puts "ERROR: the box's face is not highlighted! Selection mode 4 was not updated after redisplaying the box."
+}
+
+set only_screen 1