TopLoc_Location L;
       Standard_Integer nbpmin = 2;
-      if (cons.GetType() == GeomAbs_Circle) nbpmin = 4; //OCC287
-      BRepMesh_GeomTool GT(cons, wFirst, wLast, 0.5*myAngle, otherdefedge, nbpmin);
+      const GeomAbs_CurveType aCurveType = cons.GetType();
+      if ( aCurveType == GeomAbs_Circle )
+        nbpmin = 4; //OCC287
+
+      BRepMesh_GeomTool GT(cons, wFirst, wLast, 0.5 * myAngle, otherdefedge, nbpmin);
+
+      if ( aCurveType == GeomAbs_BSplineCurve )
+      {
+        const Standard_Integer aNbInt = cons.NbIntervals( GeomAbs_C1 );
+        if ( aNbInt > 0 )
+        {
+          TColStd_Array1OfReal anIntervals( 1, aNbInt + 1 );
+          cons.Intervals( anIntervals, GeomAbs_C1 );
+          for ( Standard_Integer aIntIt = 1; aIntIt <= aNbInt; ++aIntIt )
+          {
+            const Standard_Real& aStartInt = anIntervals.Value( aIntIt );
+            const Standard_Real& anEndInt  = anIntervals.Value( aIntIt + 1 );
+
+            BRepMesh_GeomTool aDetalizator( cons, aStartInt, anEndInt,
+              0.5 * myAngle, otherdefedge, nbpmin );
+
+            Standard_Integer aNbAddNodes = aDetalizator.NbPoints();
+            for ( Standard_Integer aNodeIt = 1; aNodeIt <= aNbAddNodes; ++aNodeIt )
+            {
+              Standard_Real aParam;
+              gp_Pnt        aPoint3d;
+              gp_Pnt2d      aPoint2d;
+              aDetalizator.Value( cons, theGFace, aNodeIt, aParam, aPoint3d, aPoint2d );
+              GT.AddPoint( aPoint3d, aParam, Standard_False );
+            }
+          }
+        }
+      }
 
       // PTv, chl/922/G9, Take into account internal vertices
       // it is necessary for internal edges, which do not split other edges, by their vertex
 
--- /dev/null
+puts "========================"
+puts "CR23184"
+puts "========================"
+puts ""
+#######################################################################
+# Bad face tessellation result
+#######################################################################
+
+brestore [locate_data_file bug23184_tessface2.brep] result
+
+checkshape result
+
+tclean result
+
+set Deflection 0.045
+
+incmesh result ${Deflection}
+
+vinit
+vsetdispmode 1
+vdisplay result
+vfit
+
+set only_screen 1
 
--- /dev/null
+puts "========================"
+puts "CR23184"
+puts "========================"
+puts ""
+#######################################################################
+# Bad face tessellation result
+#######################################################################
+
+brestore [locate_data_file bug23184_tessface.brep] result
+
+checkshape result
+
+tclean result
+
+set Deflection 0.045
+
+incmesh result ${Deflection}
+
+vinit
+vsetdispmode 1
+vdisplay result
+vfit
+
+set only_screen 1