Index: tol/OIS/ois.cpp
===================================================================
--- tol/OIS/ois.cpp	(revision a9c6a361cdd2e08c8d542ca4e492d32c87967bbc)
+++ tol/OIS/ois.cpp	(revision cb991cffeea06dd202fe0db343d5b5e0ab5bcf7a)
@@ -65,4 +65,6 @@
 size_t BOis::_MaxBlockLength_    = 1024*1024;
 int    BOis::_NumAuxiliarBuffer_ = 9;
+
+BDat BOis::forceStoredTimeSet_ = 0;
 
 #ifdef TRACE_OIS_FILE
Index: tol/OIS/oisapitol.cpp
===================================================================
--- tol/OIS/oisapitol.cpp	(revision a9c6a361cdd2e08c8d542ca4e492d32c87967bbc)
+++ tol/OIS/oisapitol.cpp	(revision cb991cffeea06dd202fe0db343d5b5e0ab5bcf7a)
@@ -216,4 +216,14 @@
   );
   OIS_def_BAE_->PutConstant();
+
+  BParamDat* ois_forceStoredTimeSet_= new BParamDat
+  (
+    "Ois.ForceStoredTimeSet",
+    forceStoredTimeSet_,
+    I2("If true then internally stored TimeSet's will be used even if a "
+       "TimeSet with the same name is available.",
+       "Si es cierto se usarán siempre los TimeSet alamcenados localmente "
+       "incluso si está accesible otro con el mismo nombre.")
+  );
 
   loadModeOptions_.AllocBuffer(3);
Index: tol/OIS/oisloader.cpp
===================================================================
--- tol/OIS/oisloader.cpp	(revision a9c6a361cdd2e08c8d542ca4e492d32c87967bbc)
+++ tol/OIS/oisloader.cpp	(revision cb991cffeea06dd202fe0db343d5b5e0ab5bcf7a)
@@ -59,7 +59,10 @@
     if(obj->OisOffset() && (obj->OisOffset()!=offset_))
     {
-      ::Warning(I2("OIS Object already has assigned offset",
-                   "El objecto OIS ya tiene offset asignado")+
-                ": "+obj->Identify());
+      if(obj->Grammar()!=GraTimeSet() || forceStoredTimeSet_)
+      {
+        ::Warning(I2("OIS Object already has assigned offset",
+                     "El objecto OIS ya tiene offset asignado")+
+                  ": "+obj->Identify());
+      }
       return(obj);
     } 
@@ -1310,4 +1313,7 @@
           BUserTimeSerie* x = NULL;  
           List* tree = NULL;
+          BText expr = "";
+          BUserTimeSet* dating = NULL;
+          BDate first, last, beginCache, endCache;
           if(!offset)
           {
@@ -1320,5 +1326,4 @@
             object_->SetPos(offset);
             //CALL ReadNextObject
-            BUserTimeSet* dating = NULL;
             {
               BINT64 offset_tms = object_->Offset();
@@ -1328,16 +1333,22 @@
                 return(NullError("FATAL cannot built dating of serie")); 
               }
-              dating = (BUserTimeSet*)GraTimeSet()->FindOperand(r->Name(), false);
-              if(!dating) { dating = (BUserTimeSet*)r; }
-              else if(dating!=r)       
+              if(forceStoredTimeSet_!=0)
+              {
+                dating = (BUserTimeSet*)r;
+              } 
+              else
               { 
-                static BOffsetObject ofob_tms;
-                ofob_tms.PutOffset(offset_tms);
-                int found_tms = readed_.FindSorted(ofob_tms, CompareOffset);
-                readed_[found_tms].ReplaceObject(dating);
-                DESTROY(r);
-              }  
-            }
-            BDate first, last, beginCache, endCache;
+                dating = (BUserTimeSet*)GraTimeSet()->FindOperand(r->Name(), false);
+                if(!dating) { dating = (BUserTimeSet*)r; }
+                else if(dating!=r)       
+                { 
+                  static BOffsetObject ofob_tms;
+                  ofob_tms.PutOffset(offset_tms);
+                  int found_tms = readed_.FindSorted(ofob_tms, CompareOffset);
+                  readed_[found_tms].ReplaceObject(dating);
+                  DESTROY(r);
+                }  
+              }
+            }
             ERead(first, serie_);
             ERead(last,  serie_);
@@ -1358,6 +1369,9 @@
                        name+"' description='"+description+"')")); 
               }
+              expr = BParser::Unparse(tree,"  ","\n");
               bool oldEnabled = BOut::Disable();
+              BGrammar::IncLevel();
               x = (BUserTimeSerie*)GraSerie()->EvaluateTree(tree); 
+              BGrammar::DecLevel();
               if(oldEnabled) { BOut::Enable(); }
               if(x) 
@@ -1368,5 +1382,4 @@
               else 
               {
-                BText expr = BParser::Unparse(tree,"  ","\n");
                 expr = Compact(expr); 
                #ifndef NDEBUG
@@ -1393,4 +1406,19 @@
           else                
           { result = x; }
+          BUserTimeSerie* ser = (BUserTimeSerie*)result;
+          if(dating!=ser->Dating())
+          {
+            if(forceStoredTimeSet_!=0)
+            {
+              ser->PutDating(dating);
+            }
+            if(!dating->IsCompatibleWith(*(ser->Dating()),beginCache,endCache))
+            {
+              Warning(BText("Dating of loaded Serie ")+name+"="+expr+
+                            "is not compatible with original dating "+
+                            dating->Identify()+"="+dating->Expression()+" "+
+                            "between ["+beginCache+","+endCache+"]"); 
+            }  
+          }  
           if(tree) 
           {
@@ -1413,11 +1441,14 @@
           BHash h(s);
           Ensure(Read(h.GetBuffer(),sizeof(double),h.Size(),timeset_));
+          BUserTimeSet* x_old = (BUserTimeSet*)GraTimeSet()->FindOperand(name,true);
           BUserTimeSet* x = NULL;
           char loadTree;
           ERead(loadTree,timeset_);
           List* tree = NULL;
+          BText expr;
           if(loadTree)
           {
             tree = ReadTree(timeset_);
+            expr = Compact(BParser::Unparse(tree,"  ","\n"));
             if(!tree) 
             { 
@@ -1425,7 +1456,16 @@
                      name+"' description='"+description+"')")); 
             }
+          }
+          if(!forceStoredTimeSet_ && x_old)
+          {
+            x = x_old;
+          }
+          else if(tree)
+          {
             bool oldEnabled = BOut::Disable();
             BDat numErr0 = TOLErrorTryNumber();
+            BGrammar::IncLevel();
             x = (BUserTimeSet*)GraTimeSet()->EvaluateTree(tree); 
+            BGrammar::DecLevel();
             BDat numErr1 = TOLErrorTryNumber();
             if(numErr0<numErr1) { DESTROY(x); }
@@ -1442,18 +1482,13 @@
               }
             }
-            else 
-            {
-              x = (BUserTimeSet*)GraTimeSet()->FindOperand(name,true);
-              if(!x)
-              {
-                BText expr = Compact(BParser::Unparse(tree,"  ","\n"));
-                if(name.HasName()) { expr = name+" = "+expr; }
-                Warning(BText("Cannot rebuild virtual expression of non "
-                        "bounded TimeSet ")+expr+ "\nOnly cached "
-                        "dates will be accessible between ["+beginCache+","+
-                        endCache+"]\nTo avoid this problem save just "
-                        "bounded time sets or use expressions that could "
-                        "be evaluated at OIS loading time." );
-              }
+            else
+            {
+              if(name.HasName()) { expr = name+" = "+expr; }
+              Warning(BText("Cannot rebuild virtual expression of non "
+                      "bounded TimeSet ")+expr+ "\nOnly cached "
+                      "dates will be accessible between ["+beginCache+","+
+                      endCache+"]\nTo avoid this problem save just "
+                      "bounded time sets or use expressions that could "
+                      "be evaluated at OIS loading time." );
             } 
           }
@@ -1473,5 +1508,8 @@
           if(tree) 
           {
-            if(result && !result->GetOisTree()) { result->PutOisTree(tree); }
+            if(result && (x!=x_old) && !result->GetOisTree()) 
+            { 
+              result->PutOisTree(tree); 
+            }
             tree->Destroy(); 
           }
Index: tol/OIS/tol_ois.h
===================================================================
--- tol/OIS/tol_ois.h	(revision a9c6a361cdd2e08c8d542ca4e492d32c87967bbc)
+++ tol/OIS/tol_ois.h	(revision cb991cffeea06dd202fe0db343d5b5e0ab5bcf7a)
@@ -565,4 +565,7 @@
   static bool isLittleEndian_;
 
+//Default for forcing stored TimeSet
+  static BDat forceStoredTimeSet_;
+
   static BStruct*  addressStr_;
   static BStruct*  docStr_;
