Index: tol/btol/timeset_type/tms.cpp
===================================================================
--- tol/btol/timeset_type/tms.cpp	(revision 83cb210dd62be0e1807ec5e67fbabd0544775c7d)
+++ tol/btol/timeset_type/tms.cpp	(revision 271d71c0e168f99886d389eae6990fcf06843f06)
@@ -279,7 +279,4 @@
       if(!S)
       {
-      //Std(BText("\nTRACE GetHashBetween type=")+typeid(*this).name()+"\n");
-        if(typeid(*this).name()=="class BTmsRangeSuc")
-          printf("");
         NCThis->CalcHashBetween(hash, first, last);
         NCThis->PutCache(hash, bc, ec);
Index: tol/btol/timeset_type/tmsgrav.cpp
===================================================================
--- tol/btol/timeset_type/tmsgrav.cpp	(revision 83cb210dd62be0e1807ec5e67fbabd0544775c7d)
+++ tol/btol/timeset_type/tmsgrav.cpp	(revision 271d71c0e168f99886d389eae6990fcf06843f06)
@@ -695,6 +695,5 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcLastDate();
-  if(curLimit.IsTheEnd() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultLast(); }
+  if(!curLimit.HasValue()) { curLimit = BDate::DefaultLast(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit+((1+defaultRange)*cutRangeFactor_.Value());
@@ -702,5 +701,7 @@
   {
     dte = EnsureNotAbortedSuccessor(dte);
-    EnsureLimitsSuccessor(dte);
+    if(dte.IsUnknown()||dte.IsTheEnd()) { return(dte); }
+    if(dte>=Sup()) { return(BDate::End()); }
+
     if(curLimit<dte) 
     { 
@@ -746,13 +747,12 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcFirstDate();
-  if(curLimit.IsTheBegin() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultFirst(); }
+  if(curLimit==BDate::Begin()) { curLimit = BDate::DefaultFirst(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit-((1+defaultRange)*cutRangeFactor_.Value());
-  BDate old = dte;
   for(n=iter=0; iter<N; iter++)
   {
     dte = EnsureNotAbortedPredecessor(dte);
-    EnsureLimitsPredecessor(dte);
+    if(dte.IsUnknown()||dte.IsTheBegin()) { return(dte); }
+    if(dte<=Inf()) { return(BDate::Begin()); }
     if(curLimit>dte) 
     { 
@@ -778,9 +778,4 @@
     else if( ac &&  bc)    { BDate d = Maximum(aPred,bPred); AbortSaveInfo(dte_, d, -1); return(d); } 
     else                   { dte =  Minimum(aPred,bPred);  }
-    if(dte==old)
-    {
-      return(BDate::Begin());
-    }
-    old = dte;
   }
   AbortMessageMaxIter("BTmsIntersection::Predecessor",dte_,dte,-1);
@@ -852,6 +847,5 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcLastDate();
-  if(curLimit.IsTheEnd() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultLast(); }
+  if(!curLimit.HasValue()) { curLimit = BDate::DefaultLast(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit+((1+defaultRange)*cutRangeFactor_.Value());
@@ -861,5 +855,6 @@
     {
       dte = EnsureNotAbortedSuccessor(dte);
-      EnsureLimitsSuccessor(dte);
+      if(dte.IsUnknown()||dte.IsTheEnd()) { return(dte); }
+      if(dte>=Sup()) { return(BDate::End()); }
       if(curLimit<dte) 
       { 
@@ -906,6 +901,5 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcFirstDate();
-  if(curLimit.IsTheBegin() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultFirst(); }
+  if(curLimit==BDate::Begin()) { curLimit = BDate::DefaultFirst(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit-((1+defaultRange)*cutRangeFactor_.Value());
@@ -915,5 +909,6 @@
     {
       dte = EnsureNotAbortedPredecessor(dte);
-      EnsureLimitsPredecessor(dte);
+      if(dte.IsUnknown()||dte.IsTheBegin()) { return(dte); }
+      if(dte<=Inf()) { return(BDate::Begin()); }
       if(curLimit>dte) 
       { 
@@ -971,5 +966,5 @@
 {
   BDate d, inf;
-  for(BInt n=1; (!inf.IsTheBegin()) && (n<=NumArgs()); n++)
+  for(BInt n=1; (inf!=BDate::Begin()) && (n<=NumArgs()); n++)
   {
     d = Tms(Arg(n))->Inf();
@@ -984,5 +979,5 @@
 {
   BDate d, sup;
-  for(BInt n=1; (!sup.IsTheEnd()) && (n<=NumArgs()); n++)
+  for(BInt n=1; (sup!=BDate::End()) && (n<=NumArgs()); n++)
   {
     d = Tms(Arg(n))->Sup();
@@ -1195,6 +1190,5 @@
   BArray<BDate> D(NumArgs());
   BDate curLimit = CurrentCalcLastDate();
-  if(curLimit.IsTheEnd() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultLast(); }
+  if(!curLimit.HasValue()) { curLimit = BDate::DefaultLast(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit+((1+defaultRange)*cutRangeFactor_.Value());
@@ -1202,5 +1196,6 @@
   {
     dte = EnsureNotAbortedSuccessor(dte);
-    EnsureLimitsSuccessor(dte);
+    if(dte.IsUnknown()||dte.IsTheEnd()) { return(dte); }
+    if(dte>=Sup()) { return(BDate::End()); }
     if(curLimit<dte) 
     { 
@@ -1260,6 +1255,5 @@
   BArray<BDate> D(NumArgs());
   BDate curLimit = CurrentCalcFirstDate();
-  if(curLimit.IsTheBegin() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultFirst(); }
+  if(curLimit==BDate::Begin()) { curLimit = BDate::DefaultFirst(); }
   double defaultRange =  BDate::DefaultLast() -  BDate::DefaultFirst();
   BDate cutLimit = curLimit+((1+defaultRange)*cutRangeFactor_.Value());
@@ -1267,5 +1261,6 @@
   {
     dte = EnsureNotAbortedPredecessor(dte);
-    EnsureLimitsPredecessor(dte);
+    if(dte.IsUnknown()||dte.IsTheBegin()) { return(dte); }
+    if(dte<=Inf()) { return(BDate::Begin()); }
     if(curLimit>dte) 
     { 
@@ -2106,5 +2101,5 @@
   BDate d, inf, cInf = center_->Inf(), uInf = units_->Inf();
   if(cInf.IsTheBegin()) { return(uInf); }
-  for(int k = from_; (!inf.IsTheBegin()) && (k<=until_); k++)
+  for(int k = from_; (inf!=BDate::Begin()) && (k<=until_); k++)
   {
     if(!k) { d = icu_->Inf(); }
@@ -2125,5 +2120,5 @@
   BDate d, sup, cSup = center_->Sup(), uSup = units_->Sup();
   if(cSup.IsTheEnd()) { return(uSup); }
-  for(int k = from_; (!sup.IsTheEnd()) && (k<=until_); k++)
+  for(int k = from_; (sup!=BDate::End()) && (k<=until_); k++)
   {
     if(!k) { d = icu_->Sup(); }
@@ -2512,11 +2507,12 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcLastDate();
-  if(curLimit.IsTheEnd() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultLast(); }
+  if(!curLimit.HasValue()) { curLimit = BDate::DefaultLast(); }
 //Std(Out()+"\nBTmsOfSerie::Successor of "+ser->Identify()+" "+dte);
   for(n=iter=0; iter<N; iter++)
   {
     dte = EnsureNotAbortedSuccessor(dte);
-    EnsureLimitsSuccessor(dte);
+    if(dte.IsUnknown()||dte.IsTheEnd()) { return(dte); }
+    if(dte>=Sup()) { return(BDate::End()); }
+
     if(curLimit<dte) 
     { 
@@ -2553,10 +2549,10 @@
   int iter, n, N = (int)MaxIter().Value(), M = (int)OutOfRange().Value();
   BDate curLimit = CurrentCalcFirstDate();
-  if(curLimit.IsTheBegin() || !curLimit.HasValue()) 
-  { curLimit = BDate::DefaultFirst(); }
+  if(curLimit==BDate::Begin()) { curLimit = BDate::DefaultFirst(); }
   for(n=iter=0; iter<N; iter++)
   {
     dte = EnsureNotAbortedPredecessor(dte);
-    EnsureLimitsPredecessor(dte);
+    if(dte.IsUnknown()||dte.IsTheBegin()) { return(dte); }
+    if(dte<=Inf()) { return(BDate::Begin()); }
     if(curLimit>dte) 
     { 
