diff --git a/src/BRep/BRep_Builder.cxx b/src/BRep/BRep_Builder.cxx
index c556d6a3bb..b30c72fe47 100644
--- a/src/BRep/BRep_Builder.cxx
+++ b/src/BRep/BRep_Builder.cxx
@@ -563,7 +563,6 @@ void  BRep_Builder::MakeEdge(TopoDS_Edge& E) const
   {
     TopoDS_LockedShape::Raise("BRep_Builder::MakeEdge");
   }
-  TE->Closed(Standard_False);
   MakeShape(E,TE);
 }
 
@@ -586,7 +585,6 @@ void  BRep_Builder::UpdateEdge(const TopoDS_Edge& E,
   const TopLoc_Location l = L.Predivided(E.Location());
 
   UpdateCurves(TE->ChangeCurves(),C,l);
-  if (!C.IsNull()) TE->Closed(C->IsClosed());
 
   TE->UpdateTolerance(Tol);
   TE->Modified(Standard_True);
@@ -665,8 +663,6 @@ void  BRep_Builder::UpdateEdge(const TopoDS_Edge& E,
   const TopLoc_Location l = L.Predivided(E.Location());
 
   UpdateCurves(TE->ChangeCurves(),C1,C2,S,l);
-  if (!C1.IsNull() && !C2.IsNull()) 
-    TE->Closed(C1->IsClosed() && C2->IsClosed());
 
   TE->UpdateTolerance(Tol);
   TE->Modified(Standard_True);
@@ -695,9 +691,7 @@ void  BRep_Builder::UpdateEdge(const TopoDS_Edge& E,
   const TopLoc_Location l = L.Predivided(E.Location());
 
   UpdateCurves(TE->ChangeCurves(),C1,C2,S,l,Pf,Pl);
-  if (!C1.IsNull() && !C2.IsNull()) 
-    TE->Closed(C1->IsClosed() && C2->IsClosed());
-  
+
   TE->UpdateTolerance(Tol);
   TE->Modified(Standard_True);
 }
@@ -768,14 +762,14 @@ void  BRep_Builder::UpdateEdge(const TopoDS_Edge& E,
   while (itcr.More())
   {
     if (itcr.Value()->IsPolygonOnTriangulation(T,l))
-	{
+    {
       // cr is used to keep a reference on the curve representation
       // this avoid deleting it as its content may be referenced by T
       cr = itcr.Value();
       lcr.Remove(itcr);
       isModified = Standard_True;
       break;
-	}
+    }
     itcr.Next();
   }
 
@@ -1093,23 +1087,8 @@ void  BRep_Builder::Range(const TopoDS_Edge&  E,
   
   while (itcr.More()) {
     GC = Handle(BRep_GCurve)::DownCast(itcr.Value());
-    if (!GC.IsNull()) {
-      if (!Only3d || GC->IsCurve3D())
-	GC->SetRange(First,Last);
-      if (GC->IsCurve3D()) {
-        // Set the closedness flag to the correct value.
-        Handle(Geom_Curve) C = GC->Curve3D();
-        
-        //fixing a bug PRO18577 to avoid infinite values of First and Last 
-        if ( !C.IsNull() && 
-            !Precision::IsNegativeInfinite(First) && 
-            !Precision::IsPositiveInfinite(Last) )   {
-          Standard_Boolean closed = 
-            C->Value(First).IsEqual(C->Value(Last),BRep_Tool::Tolerance(E));
-          TE->Closed(closed);
-        }
-      }
-    }
+    if (!GC.IsNull() && (!Only3d || GC->IsCurve3D()))
+      GC->SetRange(First,Last);
     itcr.Next();
   }
   
@@ -1141,20 +1120,10 @@ void  BRep_Builder::Range(const TopoDS_Edge& E,
 
   while (itcr.More()) {
     GC = Handle(BRep_GCurve)::DownCast(itcr.Value());
-    if (!GC.IsNull()) {
-      if (GC->IsCurveOnSurface(S,l)) {
-        GC->SetRange(First,Last);
-
-        // Set the closedness flag to the correct value.
-        Handle(Geom2d_Curve) PC = GC->PCurve();
-        gp_Pnt2d P1 = PC->Value(First);
-        gp_Pnt2d P2 = PC->Value(Last);
-        gp_Pnt   PP1 = S->Value(P1.X(),P1.Y());
-        gp_Pnt   PP2 = S->Value(P2.X(),P2.Y());
-        Standard_Boolean closed = PP1.IsEqual(PP2,BRep_Tool::Tolerance(E));
-        TE->Closed(closed);
-        break;
-      }
+    if (!GC.IsNull() && GC->IsCurveOnSurface(S,l))
+    {
+      GC->SetRange(First,Last);
+      break;
     }
     itcr.Next();
   }
diff --git a/src/BRep/BRep_Tool.cdl b/src/BRep/BRep_Tool.cdl
index 84c6c81704..0db0bb0c3d 100644
--- a/src/BRep/BRep_Tool.cdl
+++ b/src/BRep/BRep_Tool.cdl
@@ -49,14 +49,15 @@ is
 
     -----------------------------------------------------------
     -----------------------------------------------------------
-    --                         Solid                         -- 
+    --                         Shape                         -- 
     -----------------------------------------------------------
     -----------------------------------------------------------
     IsClosed (myclass; S : Shape from TopoDS) returns Boolean from Standard;
-    	---Purpose: If S is Solid or Shell, returns True if it has no free boundaries (edges).
-		--          If S is Wire, returns True if it has no free ends (vertices).
-		--          (Internal and External sub-shepes are ignored in this check.)
-		--          For other shape types returns S.Closed().
+    ---Purpose: If S is Shell, returns True if it has no free boundaries (edges).
+    --          If S is Wire, returns True if it has no free ends (vertices).
+    --          (Internal and External sub-shepes are ignored in these checks)
+    --          If S is Edge, returns True if its vertices are the same.
+    --          For other shape types returns S.Closed().
     	
     -----------------------------------------------------------
     -----------------------------------------------------------
diff --git a/src/BRep/BRep_Tool.cxx b/src/BRep/BRep_Tool.cxx
index 930c7dc417..800f1df403 100644
--- a/src/BRep/BRep_Tool.cxx
+++ b/src/BRep/BRep_Tool.cxx
@@ -1455,7 +1455,7 @@ gp_Pnt2d  BRep_Tool::Parameters(const TopoDS_Vertex& V,
 //=======================================================================
 Standard_Boolean BRep_Tool::IsClosed (const TopoDS_Shape& theShape)
 {
-  if (theShape.ShapeType() == TopAbs_SHELL || theShape.ShapeType() == TopAbs_SOLID)
+  if (theShape.ShapeType() == TopAbs_SHELL)
   {
     NCollection_Map<TopoDS_Shape, TopTools_ShapeMapHasher> aMap (101, new NCollection_IncAllocator);
     TopExp_Explorer exp (theShape.Oriented(TopAbs_FORWARD), TopAbs_EDGE);
@@ -1487,6 +1487,12 @@ Standard_Boolean BRep_Tool::IsClosed (const TopoDS_Shape& theShape)
     }
     return hasBound && aMap.IsEmpty();
   }
+  else if (theShape.ShapeType() == TopAbs_EDGE)
+  {
+    TopoDS_Vertex aVFirst, aVLast;
+    TopExp::Vertices(TopoDS::Edge(theShape), aVFirst, aVLast);
+    return !aVFirst.IsNull() && aVFirst.IsSame(aVLast);
+  }
   return theShape.Closed();
 }
 
diff --git a/src/BRepAlgo/BRepAlgo_Loop.cxx b/src/BRepAlgo/BRepAlgo_Loop.cxx
index 64bec4b01b..e8cc8c6421 100644
--- a/src/BRepAlgo/BRepAlgo_Loop.cxx
+++ b/src/BRepAlgo/BRepAlgo_Loop.cxx
@@ -826,7 +826,7 @@ void BRepAlgo_Loop::CutEdge (const TopoDS_Edge&          E,
 	{
 	  gp_Pnt2d pf, pl;
 	  BRep_Tool::UVPoints( EE, myFace, pf, pl );
-	  if (pf.Distance(pl) <= Tol && !EE.Closed())
+	  if (pf.Distance(pl) <= Tol && !BRep_Tool::IsClosed(EE))
 	    NE.Remove(it);
 	  else
 	    it.Next();
diff --git a/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx b/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx
index 7e0b90f837..5ef838e04e 100644
--- a/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx
+++ b/src/BRepFeat/BRepFeat_MakeCylindricalHole.cxx
@@ -92,7 +92,6 @@ void BRepFeat_MakeCylindricalHole::Perform(const Standard_Real Radius)
   TopoDS_Solid theTool;
   B.MakeSolid(theTool);
   B.Add(theTool,theCylinder.Shell());
-  theTool.Closed(Standard_True);
 
   myTopFace = theCylinder.TopFace();
   myBotFace = theCylinder.BottomFace();
@@ -193,7 +192,6 @@ void BRepFeat_MakeCylindricalHole::PerformThruNext(const Standard_Real Radius,
   TopoDS_Solid theTool;
   B.MakeSolid(theTool);
   B.Add(theTool,theCylinder.Shell());
-  theTool.Closed(Standard_True);
 
   myTopFace = theCylinder.TopFace();
   myBotFace = theCylinder.BottomFace();
@@ -344,7 +342,6 @@ void BRepFeat_MakeCylindricalHole::PerformUntilEnd(const Standard_Real Radius,
   TopoDS_Solid theTool;
   B.MakeSolid(theTool);
   B.Add(theTool,theCylinder.Shell());
-  theTool.Closed(Standard_True);
 
   myTopFace = theCylinder.TopFace();
   myBotFace = theCylinder.BottomFace();
@@ -474,7 +471,6 @@ void BRepFeat_MakeCylindricalHole::Perform(const Standard_Real Radius,
   TopoDS_Solid theTool;
   B.MakeSolid(theTool);
   B.Add(theTool,theCylinder.Shell());
-  theTool.Closed(Standard_True);
 
   myTopFace = theCylinder.TopFace();
   myBotFace = theCylinder.BottomFace();
@@ -603,7 +599,6 @@ void BRepFeat_MakeCylindricalHole::PerformBlind(const Standard_Real Radius,
   TopoDS_Solid theTool;
   B.MakeSolid(theTool);
   B.Add(theTool,theCylinder.Shell());
-  theTool.Closed(Standard_True);
 
   myTopFace = theCylinder.TopFace();
   myBotFace.Nullify();
diff --git a/src/BRepFill/BRepFill.cxx b/src/BRepFill/BRepFill.cxx
index 1b1361ac89..8eb19fc677 100644
--- a/src/BRepFill/BRepFill.cxx
+++ b/src/BRepFill/BRepFill.cxx
@@ -304,7 +304,6 @@ TopoDS_Face BRepFill::Face(const TopoDS_Edge& Edge1,
   TopoDS_Edge Edge3, Edge4;
 
   Iso = Surf->UIso(f1);
-//  Tol = Max(BT.Tolerance(V1f), BT.Tolerance(V2f));
   Tol = Max(BRep_Tool::Tolerance(V1f), BRep_Tool::Tolerance(V2f));
   if (Iso->Value(f2).Distance(Iso->Value(l2)) > Tol) {
     B.MakeEdge(Edge3,Iso,Precision::Confusion());
@@ -324,7 +323,6 @@ TopoDS_Face BRepFill::Face(const TopoDS_Edge& Edge1,
   }
   else {
     Iso = Surf->UIso(l1);
-//    Tol = Max(BT.Tolerance(V1l), BT.Tolerance(V2l));
     Tol = Max(BRep_Tool::Tolerance(V1l), BRep_Tool::Tolerance(V2l));
     if (Iso->Value(l2).Distance(Iso->Value(f2)) > Tol) {
       B.MakeEdge(Edge4,Iso,Precision::Confusion());
@@ -436,7 +434,8 @@ TopoDS_Shell BRepFill::Shell(const TopoDS_Wire& Wire1,
     Edge1 = TopoDS::Edge(ex1.Current());
     Edge2 = TopoDS::Edge(ex2.Current());
 
-    Standard_Boolean Periodic = Edge1.Closed() && Edge2.Closed();
+    Standard_Boolean Periodic =
+      BRep_Tool::IsClosed(Edge1) && BRep_Tool::IsClosed(Edge2);
     
     ex1.Next();
     ex2.Next();
diff --git a/src/BRepFill/BRepFill_Evolved.cxx b/src/BRepFill/BRepFill_Evolved.cxx
index d23cd97bd6..642fbca5d4 100644
--- a/src/BRepFill/BRepFill_Evolved.cxx
+++ b/src/BRepFill/BRepFill_Evolved.cxx
@@ -3218,7 +3218,7 @@ void CutEdge (const TopoDS_Edge& E,
   CT2d = new Geom2d_TrimmedCurve(C2d,f,l);
 
   if (CT2d->BasisCurve()->IsKind(STANDARD_TYPE(Geom2d_Circle)) &&
-      E.Closed()) {
+      BRep_Tool::IsClosed(E)) {
     //---------------------------
     // Cut closed circle.
     //---------------------------
diff --git a/src/BRepFill/BRepFill_Filling.cxx b/src/BRepFill/BRepFill_Filling.cxx
index 4e0bd81a5a..56e108abc1 100644
--- a/src/BRepFill/BRepFill_Filling.cxx
+++ b/src/BRepFill/BRepFill_Filling.cxx
@@ -681,7 +681,7 @@ void BRepFill_Filling::Build()
     Handle(Geom2d_Curve) aCurveOnPlate = CurvesOnPlate->Value(i);
 
     TopoDS_Edge NewEdge = TopoDS::Edge(anEdge.EmptyCopied());
-    NewEdge.Closed(anEdge.Closed());
+
     TopoDS_Vertex V1, V2;
     TopExp::Vertices(anEdge, V1, V2, Standard_True); //with orientation
     BB.UpdateVertex(V1, dmax);
diff --git a/src/BRepFill/BRepFill_Generator.cxx b/src/BRepFill/BRepFill_Generator.cxx
index 989cd8be54..3f7a83869f 100644
--- a/src/BRepFill/BRepFill_Generator.cxx
+++ b/src/BRepFill/BRepFill_Generator.cxx
@@ -620,8 +620,8 @@ void BRepFill_Generator::Perform()
 	Edge2 = TopoDS::Edge(ex2.Current());
       }
 
-      Standard_Boolean Periodic
-	= (Edge1.Closed() || degen1) && (Edge2.Closed() || degen2);
+      Standard_Boolean Periodic = (BRep_Tool::IsClosed(Edge1) || degen1) &&
+                                  (BRep_Tool::IsClosed(Edge2) || degen2);
       // ATTENTION : a non-punctual wire should not 
       //             contain a punctual edge
       if (!wPoint1) ex1.Next();
@@ -648,13 +648,7 @@ void BRepFill_Generator::Perform()
 	  Vf_toMap = V1f;
 	  Vl_toMap = V1l;
 	}
-      
-      if(Periodic) {
-	Standard_Boolean E1IsReallyClosed = BRepTools::Compare(V1f,V1l);
-	Standard_Boolean E2IsReallyClosed = BRepTools::Compare(V2f,V2l);
-	Periodic 
-	  = (E1IsReallyClosed || degen1) && (E2IsReallyClosed || degen2);
-      }
+
       // processing of KPart
       Standard_Integer IType = DetectKPart(Edge1,Edge2);
       if (IType==0) {
diff --git a/src/BRepFill/BRepFill_NSections.cxx b/src/BRepFill/BRepFill_NSections.cxx
index cbdeab57bd..81431a2f50 100644
--- a/src/BRepFill/BRepFill_NSections.cxx
+++ b/src/BRepFill/BRepFill_NSections.cxx
@@ -573,7 +573,7 @@ void BRepFill_NSections::Init(const TColStd_SequenceOfReal & P,
 	    Last = aux;
 	    C =  CBis;
 	  } 
-	  if ((ii>1) || (!E.Closed()) ) { // Cut C
+	  if ((ii>1) || (!BRep_Tool::IsClosed(E)) ) { // Cut C
 	    Handle(Geom_TrimmedCurve) TC = 
 	      new (Geom_TrimmedCurve) (C,First, Last);
 	    C  = TC;
diff --git a/src/BRepFill/BRepFill_OffsetWire.cxx b/src/BRepFill/BRepFill_OffsetWire.cxx
index efd39b4f0d..ee341093f5 100644
--- a/src/BRepFill/BRepFill_OffsetWire.cxx
+++ b/src/BRepFill/BRepFill_OffsetWire.cxx
@@ -251,9 +251,7 @@ static Standard_Boolean KPartCircle
     C = Ct->BasisCurve();
   }
 
-  TopoDS_Vertex V1,V2;
-  TopExp::Vertices(E,V1,V2);
-  if ((C->IsKind(STANDARD_TYPE(Geom_Circle)) && V1.IsSame(V2)) || //closed circle
+  if ((C->IsKind(STANDARD_TYPE(Geom_Circle)) && BRep_Tool::IsClosed(E)) || //closed circle
       IsOpenResult)
   {
     Standard_Real anOffset = myOffset;
diff --git a/src/BRepFill/BRepFill_Pipe.cxx b/src/BRepFill/BRepFill_Pipe.cxx
index 4c27561a7d..3f17c63711 100644
--- a/src/BRepFill/BRepFill_Pipe.cxx
+++ b/src/BRepFill/BRepFill_Pipe.cxx
@@ -556,18 +556,18 @@ TopoDS_Shape BRepFill_Pipe::MakeShape(const TopoDS_Shape& S,
       B.MakeShell(TopoDS::Shell(result));
       B.MakeWire(W);
       B.Add(W, S);
-      W.Closed(S.Closed());
+      W.Closed(BRep_Tool::IsClosed(S));
       TheS = W;
       if (!FirstShape.IsNull()) {
 	B.MakeWire(W);
 	B.Add(W, FirstShape);
-	W.Closed(FirstShape.Closed());
+	W.Closed(BRep_Tool::IsClosed(FirstShape));
 	TheFirst = W;
       }
       if (!LastShape.IsNull()) {
 	B.MakeWire(W);
 	B.Add(W, LastShape);
-	W.Closed(LastShape.Closed());
+	W.Closed(BRep_Tool::IsClosed(LastShape));
 	TheLast = W;
       }
       result.Closed (BRep_Tool::IsClosed (result));
diff --git a/src/BRepFill/BRepFill_Section.cxx b/src/BRepFill/BRepFill_Section.cxx
index 6f00f35ca9..070eb2d8e9 100644
--- a/src/BRepFill/BRepFill_Section.cxx
+++ b/src/BRepFill/BRepFill_Section.cxx
@@ -46,7 +46,6 @@ BRepFill_Section::BRepFill_Section(const TopoDS_Shape& Profile,
       BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) );
       BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) );
       BB.Degenerated( DegEdge, Standard_True );
-      DegEdge.Closed( Standard_True );
       
       BB.MakeWire( wire );
       BB.Add( wire, DegEdge );
diff --git a/src/BRepFill/BRepFill_ShapeLaw.cxx b/src/BRepFill/BRepFill_ShapeLaw.cxx
index 096688580c..a48f1784bc 100644
--- a/src/BRepFill/BRepFill_ShapeLaw.cxx
+++ b/src/BRepFill/BRepFill_ShapeLaw.cxx
@@ -149,23 +149,12 @@ void BRepFill_ShapeLaw::Init(const Standard_Boolean Build)
 	    C = CBis;
 	  }
 
-	  Standard_Boolean IsReallyClosed = E.Closed();
-	  //IFV - some checking when closed flag is wrong
-	  if(IsReallyClosed) {
-	    TopoDS_Vertex V1, V2;
-	    TopExp::Vertices(E, V1, V2);
-	    if(V1.IsNull() || V2.IsNull()) {
-	      IsReallyClosed = Standard_False;
-	    }
-	    else {
-	      IsReallyClosed = V1.IsSame(V2);
-	    }
-	  }
-          if (IsReallyClosed &&
+          Standard_Boolean IsClosed = BRep_Tool::IsClosed(E);
+          if (IsClosed &&
               Abs(C->FirstParameter() - First) > Precision::PConfusion())
-            IsReallyClosed = Standard_False; //trimmed curve differs
+            IsClosed = Standard_False; //trimmed curve differs
 
-	  if ((ii>1) || !IsReallyClosed ) { // Trim C
+	  if ((ii>1) || !IsClosed ) { // Trim C
 	    Handle(Geom_TrimmedCurve) TC = new Geom_TrimmedCurve(C,First, Last);
 	    C = TC;
 	  }
diff --git a/src/BRepLib/BRepLib.cxx b/src/BRepLib/BRepLib.cxx
index 1ff393d404..3b72a6ff6b 100644
--- a/src/BRepLib/BRepLib.cxx
+++ b/src/BRepLib/BRepLib.cxx
@@ -361,15 +361,9 @@ Standard_Boolean  BRepLib::BuildCurve3d(const TopoDS_Edge& AnEdge,
     Standard_Real First, Last;
 
     BRep_Builder B;
-    Standard_Boolean is_closed ;
-    is_closed = AnEdge.Closed() ;
-
     B.UpdateEdge(AnEdge,C3d,LocalLoc,0.0e0);
     BRep_Tool::Range(AnEdge, S, LC, First, Last);
     B.Range(AnEdge, First, Last); //Do not forget 3D range.(PRO6412)
-    TopoDS_Edge E = AnEdge ;
-    E.Closed(is_closed) ;
-
   }
   else {
     //
@@ -430,14 +424,10 @@ Standard_Boolean  BRepLib::BuildCurve3d(const TopoDS_Edge& AnEdge,
       max_deviation = Max( tolerance, Tolerance );
       if (NewCurvePtr.IsNull())
         return Standard_False;
-      Standard_Boolean is_closed ;
-      is_closed = AnEdge.Closed() ;
       B.UpdateEdge(TopoDS::Edge(AnEdge),
         NewCurvePtr,
         L[0],
         max_deviation) ;
-      TopoDS_Edge  E = AnEdge ;
-      E.Closed(is_closed) ;
       if (jj == 1 ) {
         //
         // if there is only one curve on surface attached to the edge
diff --git a/src/BRepLib/BRepLib_MakeWire.cxx b/src/BRepLib/BRepLib_MakeWire.cxx
index 3e4a82d70c..c0de4f9b7f 100644
--- a/src/BRepLib/BRepLib_MakeWire.cxx
+++ b/src/BRepLib/BRepLib_MakeWire.cxx
@@ -279,7 +279,6 @@ void  BRepLib_MakeWire::Add(const TopoDS_Edge& E)
 	// copy the edge
 	TopoDS_Shape Dummy = EE.EmptyCopied();
 	myEdge = TopoDS::Edge(Dummy);
-	myEdge.Closed(EE.Closed());
 	
 	for (it.Initialize(EE); it.More(); it.Next()) {
 
diff --git a/src/BRepLib/BRepLib_MakeWire_1.cxx b/src/BRepLib/BRepLib_MakeWire_1.cxx
index 8bafda8e4e..35a595b73b 100644
--- a/src/BRepLib/BRepLib_MakeWire_1.cxx
+++ b/src/BRepLib/BRepLib_MakeWire_1.cxx
@@ -97,7 +97,6 @@ void  BRepLib_MakeWire::Add(const TopTools_ListOfShape& L)
 	  TopoDS_Edge newEd=TopoDS::Edge(aLocalShape);
 //	  TopoDS_Edge newEd=TopoDS::Edge(curEd.EmptyCopied());
 	  BB.Transfert(curEd, newEd);
-	  newEd.Closed(curEd.Closed());
 	  TopTools_ListIteratorOfListOfShape itV(nlist);
 	  for (; itV.More(); itV.Next()) {
 	    BB.Add(newEd, itV.Value());
diff --git a/src/BRepOffset/BRepOffset_Offset.cxx b/src/BRepOffset/BRepOffset_Offset.cxx
index e3eda2d5c3..7e734e0555 100644
--- a/src/BRepOffset/BRepOffset_Offset.cxx
+++ b/src/BRepOffset/BRepOffset_Offset.cxx
@@ -179,43 +179,6 @@ static void UpdateEdge (const TopoDS_Edge& E,
   B.UpdateEdge(E,NC1,NC2,F,Tol);
 }
 
-//=======================================================================
-//function : Range3d
-//purpose  : Set the range only on the 3d curve 
-//           waitint that BRep_Builder does it !!
-//=======================================================================
-
-static void Range3d (const TopoDS_Edge&  E, 
-		     const Standard_Real First, 
-		     const Standard_Real Last) 
-{
-  //  set the range to all the representations
-  const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
-  
-  BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
-  BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr);
-  Handle(BRep_GCurve) GC;
-  
-  while (itcr.More()) {
-    GC = Handle(BRep_GCurve)::DownCast(itcr.Value());
-    if (!GC.IsNull()) {
-      if (GC->IsCurve3D()) {
-	GC->SetRange(First,Last);
-	// Set the closedness flag to the correct value.
-	Handle(Geom_Curve) C = GC->Curve3D();
-	if ( !C.IsNull() ) {
-	  Standard_Boolean closed = 
-	    C->Value(First).IsEqual(C->Value(Last),BRep_Tool::Tolerance(E));
-	  TE->Closed(closed);
-	}
-      }
-    }
-    itcr.Next();
-  }
-
-  TE->Modified(Standard_True);
-}
-
 
 //=======================================================================
 //function : ComputeCurve3d
@@ -1165,12 +1128,11 @@ void BRepOffset_Offset::Init(const TopoDS_Edge&     Path,
 
   // mise a same range de la nouvelle pcurve.
   if ( !C1is3D && !C1Denerated)
-  myBuilder.SameRange    (Edge1,Standard_False);
-  if ( !C1is3D && !C1Denerated) 
-    Range3d(Edge1,U1,U2);
-  myBuilder.Range       (Edge1,myFace,U1,U2); 
-    Range3d(Edge1,U1,U2);
-  myBuilder.Range       (Edge1,myFace,U1,U2);
+  {
+    myBuilder.SameRange    (Edge1,Standard_False);
+    myBuilder.Range(Edge1,U1,U2, Standard_True);
+  }
+  myBuilder.Range(Edge1,myFace,U1,U2);
   BRepLib::SameRange(Edge1);
   
   // mise a sameparameter pour les KPart
@@ -1206,7 +1168,8 @@ void BRepOffset_Offset::Init(const TopoDS_Edge&     Path,
 
   // mise a same range de la nouvelle pcurve.
   myBuilder.SameRange    (Edge2,Standard_False);
-  if ( !C2is3D && !C2Denerated) Range3d(Edge2,U1,U2);
+  if ( !C2is3D && !C2Denerated)
+    myBuilder.Range(Edge2, U1, U2, Standard_True);
   myBuilder.Range(Edge2,myFace,U1,U2);
   BRepLib::SameRange(Edge2);
   
diff --git a/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx b/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx
index be62e61aba..db5178fca0 100644
--- a/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx
+++ b/src/BRepOffsetAPI/BRepOffsetAPI_ThruSections.cxx
@@ -317,7 +317,6 @@ void BRepOffsetAPI_ThruSections::AddVertex(const TopoDS_Vertex& aVertex)
   BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) );
   BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) );
   BB.Degenerated( DegEdge, Standard_True );
-  DegEdge.Closed( Standard_True );
 
   TopoDS_Wire DegWire;
   BB.MakeWire( DegWire );
diff --git a/src/BRepPrim/BRepPrim_Builder.cxx b/src/BRepPrim/BRepPrim_Builder.cxx
index beab8514db..aa2eb0a8ab 100644
--- a/src/BRepPrim/BRepPrim_Builder.cxx
+++ b/src/BRepPrim/BRepPrim_Builder.cxx
@@ -210,7 +210,6 @@ void BRepPrim_Builder::AddEdgeVertex (TopoDS_Edge& E,
   VV.Orientation(TopAbs_REVERSED);
   myBuilder.Add(E,VV);
   myBuilder.Range(E,P1,P2);
-  E.Closed(Standard_True);
 }
 
 //=======================================================================
@@ -280,6 +279,7 @@ void  BRepPrim_Builder::CompleteEdge(TopoDS_Edge& E)const
 
 void  BRepPrim_Builder::CompleteWire(TopoDS_Wire& W)const 
 {
+  W.Closed(BRep_Tool::IsClosed(W));
   BRepTools::Update(W);
 }
 
@@ -302,5 +302,6 @@ void  BRepPrim_Builder::CompleteFace(TopoDS_Face& F)const
 
 void  BRepPrim_Builder::CompleteShell(TopoDS_Shell& S)const 
 {
+  S.Closed(BRep_Tool::IsClosed(S));
   BRepTools::Update(S);
 }
diff --git a/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx b/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx
index 3a6e0c1020..6f97b32113 100644
--- a/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx
+++ b/src/BRepPrimAPI/BRepPrimAPI_MakeOneAxis.cxx
@@ -52,7 +52,6 @@ void BRepPrimAPI_MakeOneAxis::Build()
   BRep_Builder B;
   B.MakeSolid(TopoDS::Solid(myShape));
   B.Add(myShape,((BRepPrim_OneAxis*) OneAxis())->Shell());
-  myShape.Closed(Standard_True);
   Done();
 }
 
diff --git a/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx b/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx
index 34dc6decd9..65422dc73f 100644
--- a/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx
+++ b/src/BRepPrimAPI/BRepPrimAPI_MakeWedge.cxx
@@ -119,7 +119,6 @@ void BRepPrimAPI_MakeWedge::Build()
   BRep_Builder B;
   B.MakeSolid(TopoDS::Solid(myShape));
   B.Add(myShape,myWedge.Shell());
-  myShape.Closed(Standard_True);
   Done();
 }
 
diff --git a/src/BRepProj/BRepProj_Projection.cxx b/src/BRepProj/BRepProj_Projection.cxx
index 0edfa6bffd..c56a0e61f6 100644
--- a/src/BRepProj/BRepProj_Projection.cxx
+++ b/src/BRepProj/BRepProj_Projection.cxx
@@ -260,7 +260,7 @@ BRepProj_Projection::BRepProj_Projection (const TopoDS_Shape& Wire,
   BB.Add( DegEdge, aVertex.Oriented(TopAbs_FORWARD) );
   BB.Add( DegEdge, aVertex.Oriented(TopAbs_REVERSED) );
   BB.Degenerated( DegEdge, Standard_True );
-  DegEdge.Closed( Standard_True );
+
   TopoDS_Wire DegWire;
   BB.MakeWire( DegWire );
   BB.Add( DegWire, DegEdge );
diff --git a/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx b/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx
index 21c5c30489..7a9d71a1a9 100644
--- a/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx
+++ b/src/BRepSweep/BRepSweep_NumLinearRegularSweep.cxx
@@ -256,6 +256,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
 		TopoDS_Shape wi;
 		myBuilder.MakeWire(wi);
 		myBuilder.Add(wi,newShape,Or);
+		wi.Closed(BRep_Tool::IsClosed(wi));
 		WireSeq.Append(wi);
 	      }
 	      else{
@@ -328,6 +329,7 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
 	  }
 	}
 	else{
+	  newWire.Closed(BRep_Tool::IsClosed(newWire));
 	  myBuilder.Add(myShapes(iGenS,iDirS),newWire);
 	}
 	myBuiltShapes(iGenS,iDirS) = Standard_True;
@@ -393,7 +395,10 @@ TopoDS_Shape BRepSweep_NumLinearRegularSweep::Shape (const TopoDS_Shape& aGenS,
     }
     myBuiltShapes(iGenS,iDirS) = Standard_True;
   }
-  myShapes(iGenS,iDirS).Closed (BRep_Tool::IsClosed (myShapes(iGenS,iDirS)));
+  // Change the "Closed" flag only for Wires and Shells
+  if (myShapes(iGenS, iDirS).ShapeType() == TopAbs_WIRE ||
+      myShapes(iGenS, iDirS).ShapeType() == TopAbs_SHELL)
+    myShapes(iGenS,iDirS).Closed (BRep_Tool::IsClosed (myShapes(iGenS,iDirS)));
   return myShapes(iGenS,iDirS);
 }
 
diff --git a/src/BRepSweep/BRepSweep_Rotation.cxx b/src/BRepSweep/BRepSweep_Rotation.cxx
index 99dcfffa56..b0d01d3d42 100644
--- a/src/BRepSweep/BRepSweep_Rotation.cxx
+++ b/src/BRepSweep/BRepSweep_Rotation.cxx
@@ -201,14 +201,7 @@ TopoDS_Shape  BRepSweep_Rotation::MakeEmptyDirectingEdge
     Handle(Geom_Circle) GC = new Geom_Circle(Axis,O.Distance(P));
     Standard_Real tol = BRep_Tool::Tolerance(TopoDS::Vertex(aGenV));
     myBuilder.Builder().MakeEdge(E, GC, tol);
-
-    gp_Pnt PLast = GC->Value(myAng);
-    if(PLast.SquareDistance(P) > tol*tol) E.Closed(Standard_False);
-
   }
-
-    
-
   return E;
 }
 
diff --git a/src/BRepTools/BRepTools_ReShape.cxx b/src/BRepTools/BRepTools_ReShape.cxx
index 77fadbad9b..3ca3db4e1c 100644
--- a/src/BRepTools/BRepTools_ReShape.cxx
+++ b/src/BRepTools/BRepTools_ReShape.cxx
@@ -375,10 +375,7 @@ TopoDS_Shape BRepTools_ReShape::Apply (const TopoDS_Shape& shape,
     if ( (modif < 0 && buildmode < 2) || (modif == 0 && buildmode < 1) )
       return C;
     else
-    {
-      S.Closed (BRep_Tool::IsClosed (S));
       return S;
-    }
   }
 
   if (st == TopAbs_SHELL) {
@@ -542,17 +539,17 @@ TopoDS_Shape BRepTools_ReShape::Apply (const TopoDS_Shape& shape,
     //BRepTools_Edge sbe;
     CopyRanges ( TopoDS::Edge ( result ), TopoDS::Edge ( shape ),0,1 );
   }
-
-  if (st == TopAbs_FACE)  {
+  else if (st == TopAbs_FACE)  {
     TopoDS_Face face = TopoDS::Face ( shape );
     if( BRep_Tool::NaturalRestriction( face ) ) {
       BRep_Builder aB;
       aB.NaturalRestriction( TopoDS::Face (  result ), Standard_True );
     }
   }
+  else if (st == TopAbs_WIRE || st == TopAbs_SHELL)
+    result.Closed (BRep_Tool::IsClosed (result));
 
   result.Orientation(orien);
-  result.Closed (BRep_Tool::IsClosed (result));
   myStatus = locStatus;
   Replace ( shape, result );
 
diff --git a/src/ChFi3d/ChFi3d_Builder_1.cxx b/src/ChFi3d/ChFi3d_Builder_1.cxx
index 376b1390a0..378d078f66 100644
--- a/src/ChFi3d/ChFi3d_Builder_1.cxx
+++ b/src/ChFi3d/ChFi3d_Builder_1.cxx
@@ -547,9 +547,7 @@ void ChFi3d_Builder::PerformExtremity (const Handle(ChFiDS_Spine)& Spine)
 	Ec = TopoDS::Edge(It.Value());
 	Standard_Boolean bonedge = !BRep_Tool::Degenerated(Ec);
 	if(bonedge){
-	  TopoDS_Vertex v1,v2;
-	  TopExp::Vertices(Ec,v1,v2);
-	  Standard_Boolean eclosed = v1.IsSame(v2);
+	  Standard_Boolean eclosed = BRep_Tool::IsClosed(Ec);
 	  Standard_Integer nboc = 0;
 	  for(j = 0; j <= i && bonedge; j++){ 
 	    if(!eclosed) bonedge = !Ec.IsSame(E[j]); 
diff --git a/src/IGESToBRep/IGESToBRep_BRepEntity.cxx b/src/IGESToBRep/IGESToBRep_BRepEntity.cxx
index 5b86bffd2b..1fe2ad4685 100644
--- a/src/IGESToBRep/IGESToBRep_BRepEntity.cxx
+++ b/src/IGESToBRep/IGESToBRep_BRepEntity.cxx
@@ -268,7 +268,7 @@ TopoDS_Shape IGESToBRep_BRepEntity::TransferEdge
 	    Standard_Real dist2f = p2.Distance ( pf );
 	    Standard_Real dist1l = p1.Distance ( pl );
 	    Standard_Real dist2l = p2.Distance ( pl );
-	    if ( E.Closed() || dist1f + dist2l <= dist1l + dist2f ) {
+	    if ( V1.IsSame(V2) || dist1f + dist2l <= dist1l + dist2f + Precision::Confusion() ) {
 	      //:77 if (BRepTools::Compare(V1, Vf)) //the part 'else' only if, in fact, edge should be reversed
 	      V1.Orientation(TopAbs_FORWARD);
 	      B.Add(E,V1);
diff --git a/src/LocOpe/LocOpe_SplitShape.cxx b/src/LocOpe/LocOpe_SplitShape.cxx
index aac49a456a..721792410a 100644
--- a/src/LocOpe/LocOpe_SplitShape.cxx
+++ b/src/LocOpe/LocOpe_SplitShape.cxx
@@ -1233,7 +1233,9 @@ Standard_Boolean LocOpe_SplitShape::Rebuild(const TopoDS_Shape& S)
         B.Add(result,itr.Value().Oriented(orient));
       }
     }
-    result.Closed (BRep_Tool::IsClosed(result));
+    // Assign "Closed" flag for Wires and Shells only
+    if (result.ShapeType() == TopAbs_WIRE || result.ShapeType() == TopAbs_SHELL)
+      result.Closed (BRep_Tool::IsClosed(result));
     myMap(S).Append(result);
   }
   else {
diff --git a/src/ShapeBuild/ShapeBuild_ReShape.cxx b/src/ShapeBuild/ShapeBuild_ReShape.cxx
index a82f68297f..d874d5bc16 100644
--- a/src/ShapeBuild/ShapeBuild_ReShape.cxx
+++ b/src/ShapeBuild/ShapeBuild_ReShape.cxx
@@ -124,8 +124,9 @@ TopoDS_Shape ShapeBuild_ReShape::Apply (const TopoDS_Shape& shape,
     ShapeBuild_Edge sbe;
     sbe.CopyRanges ( TopoDS::Edge ( result ), TopoDS::Edge ( shape ));
   }
+  else if (st == TopAbs_WIRE || st == TopAbs_SHELL)
+    result.Closed (BRep_Tool::IsClosed (result));
   result.Orientation(orient);
-  result.Closed (BRep_Tool::IsClosed (result));
   myStatus = locStatus;
   Replace ( shape, result );
 
diff --git a/src/ShapeFix/ShapeFix_Edge.cxx b/src/ShapeFix/ShapeFix_Edge.cxx
index 231a2057cb..a6e4b044de 100644
--- a/src/ShapeFix/ShapeFix_Edge.cxx
+++ b/src/ShapeFix/ShapeFix_Edge.cxx
@@ -314,41 +314,6 @@ static Handle(Geom2d_Curve) TranslatePCurve (const Handle(Geom_Surface)& aSurf,
   return aC2d;
 }
 
-//=======================================================================
-//static : Range3d 
-//purpose  : contournement du Range de BRep_Builder pour ne pas affecter
-//           les ranges des pcurves.
-//=======================================================================
-
-static void Range3d (const TopoDS_Edge& E, 
-		     const Standard_Real First, const Standard_Real Last,
-		     const Standard_Real myPrecision) 
-{
-  //  set the range to all the representations
-  const Handle(BRep_TEdge)& TE = *((Handle(BRep_TEdge)*) &E.TShape());
-  
-  BRep_ListOfCurveRepresentation& lcr = TE->ChangeCurves();
-  BRep_ListIteratorOfListOfCurveRepresentation itcr(lcr);
-  Handle(BRep_GCurve) GC;
-  
-  while (itcr.More()) {
-    GC = Handle(BRep_GCurve)::DownCast(itcr.Value());
-    if (!GC.IsNull()) {
-      if (GC->IsCurve3D()) {
-	GC->SetRange(First,Last);
-	// Set the closedness flag to the correct value.
-	Handle(Geom_Curve) C = GC->Curve3D();
-	if ( !C.IsNull() ) {
-	  Standard_Boolean closed = C->Value(First).IsEqual(C->Value(Last),myPrecision);
-	  TE->Closed(closed);
-	}
-      }
-    }
-    itcr.Next();
-  }
-
-  TE->Modified(Standard_True);
-}
 //=======================================================================
 //function : SameRange (Temp)
 //purpose  : 
@@ -585,7 +550,7 @@ Standard_Boolean ShapeFix_Edge::FixAddPCurve (const TopoDS_Edge& edge,
       Standard_Real G3dCFirst = c3d->FirstParameter();
       Standard_Real G3dCLast  = c3d->LastParameter();
       B.UpdateEdge(edge, c3d, 0.);
-      Range3d(edge, G3dCFirst, G3dCLast, 0.);
+      B.Range(edge, G3dCFirst, G3dCLast, Standard_True);
     }
   }   // end try
   catch(Standard_Failure) {
diff --git a/src/ShapeFix/ShapeFix_Solid.cxx b/src/ShapeFix/ShapeFix_Solid.cxx
index bbe3110d35..7d14865161 100644
--- a/src/ShapeFix/ShapeFix_Solid.cxx
+++ b/src/ShapeFix/ShapeFix_Solid.cxx
@@ -432,18 +432,16 @@ Standard_Boolean ShapeFix_Solid::Perform(const Handle(Message_ProgressIndicator)
     }
       
     if(isClosed || myCreateOpenSolidMode) {
-      if(BRep_Tool::IsClosed(tmpShape)) {
-        TopoDS_Iterator itersh(tmpShape);
-        TopoDS_Shell aShell;
-        if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL)
-          aShell = TopoDS::Shell(itersh.Value());
-        if(!aShell.IsNull()) {
-          TopoDS_Solid aSol = SolidFromShell(aShell);
-          if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) {
-            SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected.
-            Context()->Replace(tmpShape,aSol);
-            tmpShape = aSol;
-          }
+      TopoDS_Iterator itersh(tmpShape);
+      TopoDS_Shell aShell;
+      if(itersh.More() && itersh.Value().ShapeType() == TopAbs_SHELL)
+        aShell = TopoDS::Shell(itersh.Value());
+      if(!aShell.IsNull()) {
+        TopoDS_Solid aSol = SolidFromShell(aShell);
+        if(ShapeExtend::DecodeStatus(myStatus,ShapeExtend_DONE2)) {
+          SendWarning (Message_Msg ("FixAdvSolid.FixOrientation.MSG20"));// Orientaion of shell was corrected.
+          Context()->Replace(tmpShape,aSol);
+          tmpShape = aSol;
         }
       }
       mySolid  = TopoDS::Solid(tmpShape);
diff --git a/src/ShapeProcess/ShapeProcess_ShapeContext.cxx b/src/ShapeProcess/ShapeProcess_ShapeContext.cxx
index 0fa6f719c2..51007d2286 100644
--- a/src/ShapeProcess/ShapeProcess_ShapeContext.cxx
+++ b/src/ShapeProcess/ShapeProcess_ShapeContext.cxx
@@ -212,7 +212,8 @@ static void RecModif (const TopoDS_Shape &S,
       }
       if ( modif )
       {
-        result.Closed (BRep_Tool::IsClosed (result));
+        if (result.ShapeType() == TopAbs_WIRE || result.ShapeType() == TopAbs_SHELL)
+          result.Closed (BRep_Tool::IsClosed (result));
         res = result;
       }
     }
diff --git a/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx b/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx
index 12ea362a5c..1b9fb6c4be 100644
--- a/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx
+++ b/src/ShapeUpgrade/ShapeUpgrade_FaceDivideArea.cxx
@@ -97,7 +97,8 @@ ShapeUpgrade_FaceDivideArea::ShapeUpgrade_FaceDivideArea(const TopoDS_Face& F)
   }
   if(isModified)
   {
-    aCopyRes.Closed (BRep_Tool::IsClosed (aCopyRes));
+    if (aCopyRes.ShapeType() == TopAbs_WIRE || aCopyRes.ShapeType() == TopAbs_SHELL)
+      aCopyRes.Closed (BRep_Tool::IsClosed (aCopyRes));
     Context()->Replace(aResult,aCopyRes);
   }
   myStatus |= aStatus;  
diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx
index c2ddae9fdc..9f3698f2ef 100644
--- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx
+++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1.cxx
@@ -1795,7 +1795,7 @@ Standard_Integer TopOpeBRepBuild_Builder1::IsSame2d (const TopTools_SequenceOfSh
   if (!(aBAS.IsUPeriodic() || aBAS.IsVPeriodic())) return 1;
 
   //we process here only fully closed edges (Vf == Vl)
-  if(!anEdgeObj.Closed() || !anEdgeTool.Closed())
+  if(!BRep_Tool::IsClosed(anEdgeObj) || !BRep_Tool::IsClosed(anEdgeTool))
     return 1;
   
   Standard_Real f = 0., l = 0., tolpc = 0. ,  
diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx
index bf0d357d4e..b4cb1b69d5 100644
--- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx
+++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_1.cxx
@@ -553,8 +553,6 @@ void TopOpeBRepBuild_Builder1::Destroy()
 	  Vl = TopoDS::Vertex(myDataStructure->Shape(iref));
 	  Vl.Orientation(TopAbs_REVERSED);
 	}
-	Standard_Boolean bitclosed = Vf.IsSame(Vl);
-	aNewEdge.Closed(bitclosed);
       
 	myBuildTool.AddEdgeVertex (aNewEdge, Vf);
 	myBuildTool.Parameter     (aNewEdge, Vf, ParF);
@@ -841,9 +839,6 @@ void TopOpeBRepBuild_Builder1::Destroy()
     // Make new edge from EdgeF
     TopoDS_Edge aNewEdge;
     myBuildTool.CopyEdge (EdgeF, aNewEdge);
-    
-    Standard_Boolean bitclosed = aV1.IsSame(aV2);
-    aNewEdge.Closed(bitclosed);
 
     myBuildTool.AddEdgeVertex (aNewEdge, aV1);
     myBuildTool.Parameter     (aNewEdge, aV1, aPar1);
diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx
index 6eb13c1a2e..086b93b6d5 100644
--- a/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx
+++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_Builder1_2.cxx
@@ -152,7 +152,6 @@ Standard_Integer TopOpeBRepBuild_Builder1::CorrectResult2d(TopoDS_Shape& aResult
     aShell.Closed (BRep_Tool::IsClosed(aShell));
     BB.Add (aSolid, aShell);
   }
-  aSolid.Closed (BRep_Tool::IsClosed(aSolid));
   aResult=aSolid;
 
   //update section curves 
diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx
index c4d86d3494..64d2070c67 100644
--- a/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx
+++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_FaceBuilder.cxx
@@ -145,7 +145,7 @@ Standard_Integer FUN_AnalyzemapVon1E(const TopTools_IndexedDataMapOfShapeShape&
   }
   else if (nV == 1) {
     const TopoDS_Shape& E = mapVon1E.FindFromIndex(1);
-    Standard_Boolean Eclosed = E.Closed();
+    Standard_Boolean Eclosed = BRep_Tool::IsClosed(E);
     Standard_Boolean dgE = BRep_Tool::Degenerated(TopoDS::Edge(E));
     if      (dgE)     res = ISVERTEX;
     else if (Eclosed) res = CLOSEDW;
@@ -319,7 +319,7 @@ void TopOpeBRepBuild_FaceBuilder::DetectUnclosedWire(TopTools_IndexedDataMapOfSh
             {
               const TopoDS_Edge &E = TopoDS::Edge (itE.Value());
               Standard_Integer I = myBlockBuilder.Element(E);
-              if (!E.Closed() && myBlockBuilder.ElementIsValid(I))
+              if (!BRep_Tool::IsClosed(E) && myBlockBuilder.ElementIsValid(I))
               {
                 TopoDS_Vertex Vf,Vl;
                 TopExp::Vertices (E, Vf, Vl);
diff --git a/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx b/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx
index 58ad7d8474..2a963cc45e 100644
--- a/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx
+++ b/src/TopOpeBRepBuild/TopOpeBRepBuild_makeedges.cxx
@@ -150,11 +150,6 @@ void TopOpeBRepBuild_Builder::GEDBUMakeEdges
     } // EDBUloop.InitVertex :  on vertices of new edge newEdge
     
     Standard_Boolean addedge = (nVF == 1 && nVR == 1);
-    Standard_Boolean bitclosed = Standard_False;
-    if (nVF == 1 && nVR == 1) {
-      bitclosed = VF.IsSame(VR);
-      newEdge.Closed(bitclosed);
-    }
     if (addedge) {
       if (tosplit) {
 	TopTools_ListOfShape loe; Standard_Boolean ok = TopOpeBRepTool_TOOL::SplitE(TopoDS::Edge(newEdge),loe);
diff --git a/src/TopoDS/TopoDS_TShape.cdl b/src/TopoDS/TopoDS_TShape.cdl
index b177a6b629..391b16197f 100644
--- a/src/TopoDS/TopoDS_TShape.cdl
+++ b/src/TopoDS/TopoDS_TShape.cdl
@@ -34,7 +34,7 @@ deferred class TShape from TopoDS inherits TShared from MMgt
 	--           - Modified   : Has been modified.
 	--           - Checked    : Has been checked.
 	--           - Orientable : Can be oriented.
-	--           - Closed     : Is closed.
+	--           - Closed     : Is closed (note that only Wires and Shells may be closed).
 	--           - Infinite   : Is infinite.
 	--           - Convex     : Is convex.
 	--       
diff --git a/tests/bugs/moddata_3/bug25202_1 b/tests/bugs/moddata_3/bug25202_1
index 7acf0ece41..eaf623bc4a 100755
--- a/tests/bugs/moddata_3/bug25202_1
+++ b/tests/bugs/moddata_3/bug25202_1
@@ -24,7 +24,7 @@ explode b f
 OCC25202 result b 1 ff1 3 ff2
 
 set info [whatis result]
-if { [regexp {Closed} ${info}] } {
+if { [regexp {Closed} ${info}] != 1 } {
     puts "OK : value of IsClosed flag is correct"
 } else {
     puts "Error : value of IsClosed flag is not correct"
diff --git a/tests/bugs/moddata_3/bug25202_3 b/tests/bugs/moddata_3/bug25202_3
index ba1cc564ab..13c6ad3d24 100755
--- a/tests/bugs/moddata_3/bug25202_3
+++ b/tests/bugs/moddata_3/bug25202_3
@@ -12,7 +12,7 @@ mkface ff pp
 prism result ff 0 0 20
 
 set info [whatis result]
-if { [regexp {Closed} ${info}] } {
+if { [regexp {Closed} ${info}] != 1 } {
     puts "OK : value of IsClosed flag is correct"
 } else {
     puts "Error : value of IsClosed flag is not correct"
diff --git a/tests/bugs/moddata_3/bug25202_4 b/tests/bugs/moddata_3/bug25202_4
index 84ff55105e..25caf8894f 100755
--- a/tests/bugs/moddata_3/bug25202_4
+++ b/tests/bugs/moddata_3/bug25202_4
@@ -13,7 +13,7 @@ mkplane ff ww
 revol result ff 0 0 0 1 0 0 90
 
 set info [whatis result]
-if { [regexp {Closed} ${info}] } {
+if { [regexp {Closed} ${info}] != 1 } {
     puts "OK : value of IsClosed flag is correct"
 } else {
     puts "Error : value of IsClosed flag is not correct"