Index: XIOS/trunk/src/filter/file_writer_filter.cpp
===================================================================
--- XIOS/trunk/src/filter/file_writer_filter.cpp	(revision 1357)
+++ XIOS/trunk/src/filter/file_writer_filter.cpp	(revision 1358)
@@ -37,4 +37,9 @@
   }
 
+  bool CFileWriterFilter::mustAutoTrigger() const
+  {
+    return true;
+  }
+
   bool CFileWriterFilter::isDataExpected(const CDate& date) const
   {
Index: XIOS/trunk/src/filter/file_writer_filter.hpp
===================================================================
--- XIOS/trunk/src/filter/file_writer_filter.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/file_writer_filter.hpp	(revision 1358)
@@ -24,4 +24,11 @@
 
       /*!
+       * Tests if the filter must auto-trigger.
+       *
+       * \return true if the filter must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const;
+
+      /*!
        * Tests whether data is expected for the specified date.
        *
Index: XIOS/trunk/src/filter/filter.cpp
===================================================================
--- XIOS/trunk/src/filter/filter.cpp	(revision 1357)
+++ XIOS/trunk/src/filter/filter.cpp	(revision 1358)
@@ -41,4 +41,9 @@
   }
 
+  bool CFilter::mustAutoTrigger() const
+  {
+    return COutputPin::mustAutoTrigger();
+  }
+
   bool CFilter::isDataExpected(const CDate& date) const
   {
Index: XIOS/trunk/src/filter/filter.hpp
===================================================================
--- XIOS/trunk/src/filter/filter.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/filter.hpp	(revision 1358)
@@ -49,4 +49,11 @@
 
       /*!
+       * Tests if the filter must auto-trigger.
+       *
+       * \return true if the filter must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const;
+
+      /*!
        * Tests whether data is expected for the specified date.
        *
Index: XIOS/trunk/src/filter/input_pin.hpp
===================================================================
--- XIOS/trunk/src/filter/input_pin.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/input_pin.hpp	(revision 1358)
@@ -60,4 +60,11 @@
 
       /*!
+       * Tests if the pin must auto-trigger.
+       *
+       * \return true if the pin must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const = 0;
+
+      /*!
        * Tests whether data is expected for the specified date.
        *
Index: XIOS/trunk/src/filter/output_pin.cpp
===================================================================
--- XIOS/trunk/src/filter/output_pin.cpp	(revision 1357)
+++ XIOS/trunk/src/filter/output_pin.cpp	(revision 1358)
@@ -66,4 +66,16 @@
   }
 
+  bool COutputPin::mustAutoTrigger() const
+  {
+    std::vector<std::pair<boost::shared_ptr<CInputPin>, size_t> >::const_iterator it, itEnd;
+    for (it = outputs.begin(), itEnd = outputs.end(); it != itEnd; ++it)
+    {
+      if (it->first->mustAutoTrigger())
+        return true;
+    }
+
+    return false;
+  }
+
   void COutputPin::setOutputTriggers()
   {
Index: XIOS/trunk/src/filter/output_pin.hpp
===================================================================
--- XIOS/trunk/src/filter/output_pin.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/output_pin.hpp	(revision 1358)
@@ -44,4 +44,11 @@
        */
       bool virtual canBeTriggered() const;
+
+      /*!
+       * Tests if the pin must auto-trigger.
+       *
+       * \return true if the pin must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const;
 
       /*!
Index: XIOS/trunk/src/filter/store_filter.cpp
===================================================================
--- XIOS/trunk/src/filter/store_filter.cpp	(revision 1357)
+++ XIOS/trunk/src/filter/store_filter.cpp	(revision 1358)
@@ -111,4 +111,9 @@
   }
 
+  bool CStoreFilter::mustAutoTrigger() const
+  {
+    return false;
+  }
+
   bool CStoreFilter::isDataExpected(const CDate& date) const
   {
Index: XIOS/trunk/src/filter/store_filter.hpp
===================================================================
--- XIOS/trunk/src/filter/store_filter.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/store_filter.hpp	(revision 1358)
@@ -53,4 +53,11 @@
 
       /*!
+       * Tests if the filter must auto-trigger.
+       *
+       * \return true if the filter must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const;
+
+      /*!
        * Tests whether data is expected for the specified date.
        *
Index: XIOS/trunk/src/filter/temporal_filter.cpp
===================================================================
--- XIOS/trunk/src/filter/temporal_filter.cpp	(revision 1357)
+++ XIOS/trunk/src/filter/temporal_filter.cpp	(revision 1358)
@@ -76,4 +76,9 @@
   }
 
+  bool CTemporalFilter::mustAutoTrigger() const
+  {
+    return true;
+  }
+
   bool CTemporalFilter::isDataExpected(const CDate& date) const
   {
Index: XIOS/trunk/src/filter/temporal_filter.hpp
===================================================================
--- XIOS/trunk/src/filter/temporal_filter.hpp	(revision 1357)
+++ XIOS/trunk/src/filter/temporal_filter.hpp	(revision 1358)
@@ -41,4 +41,11 @@
 
       /*!
+       * Tests if the filter must auto-trigger.
+       *
+       * \return true if the filter must auto-trigger
+       */
+      bool virtual mustAutoTrigger() const;
+
+      /*!
        * Tests whether data is expected for the specified date.
        *
Index: XIOS/trunk/src/node/context.cpp
===================================================================
--- XIOS/trunk/src/node/context.cpp	(revision 1357)
+++ XIOS/trunk/src/node/context.cpp	(revision 1358)
@@ -438,4 +438,5 @@
       buildFilterGraphOfFieldsWithReadAccess();
       this->solveAllRefOfEnabledFields(true);
+      postProcessFilterGraph();
     }
 
@@ -505,4 +506,13 @@
    }
 
+   void CContext::postProcessFilterGraph()
+   {
+     int size = enabledFiles.size();
+     for (int i = 0; i < size; ++i)
+     {
+        enabledFiles[i]->postProcessFilterGraph();
+     }
+   }
+
    void CContext::startPrefetchingOfEnabledReadModeFiles()
    {
@@ -511,4 +521,13 @@
      {
         enabledReadModeFiles[i]->prefetchEnabledReadModeFields();
+     }
+   }
+
+   void CContext::doPreTimestepOperationsForEnabledReadModeFiles()
+   {
+     int size = enabledReadModeFiles.size();
+     for (int i = 0; i < size; ++i)
+     {
+        enabledReadModeFiles[i]->doPreTimestepOperationsForEnabledReadModeFields();
      }
    }
@@ -1206,4 +1225,9 @@
       if (prevStep < step)
       {
+        if (hasClient)
+        {
+          doPreTimestepOperationsForEnabledReadModeFiles();
+        }
+
         info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl;
         calendar->update(step);
Index: XIOS/trunk/src/node/context.hpp
===================================================================
--- XIOS/trunk/src/node/context.hpp	(revision 1357)
+++ XIOS/trunk/src/node/context.hpp	(revision 1358)
@@ -114,5 +114,7 @@
          void solveAllRefOfEnabledFields(bool sendToServer);
          void buildFilterGraphOfEnabledFields();
+         void postProcessFilterGraph();
          void startPrefetchingOfEnabledReadModeFiles();
+         void doPreTimestepOperationsForEnabledReadModeFiles();
          void doPostTimestepOperationsForEnabledReadModeFiles();
          void findFieldsWithReadAccess(void);
Index: XIOS/trunk/src/node/field.cpp
===================================================================
--- XIOS/trunk/src/node/field.cpp	(revision 1357)
+++ XIOS/trunk/src/node/field.cpp	(revision 1358)
@@ -40,4 +40,5 @@
       , wasDataRequestedFromServer(false)
       , wasDataAlreadyReceivedFromServer(false)
+      , mustAutoTrigger(false)
       , isEOF(false)
    { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); }
@@ -55,4 +56,5 @@
       , wasDataRequestedFromServer(false)
       , wasDataAlreadyReceivedFromServer(false)
+      , mustAutoTrigger(false)
       , isEOF(false)
    { setVirtualVariableGroup(CVariableGroup::create(getId() + "_virtual_variable_group")); }
@@ -479,5 +481,5 @@
 
     // Check if data previously requested has been received as expected
-    if (wasDataRequestedFromServer && (!isEOF || currentDate <= dateEOF))
+    if (wasDataRequestedFromServer && !isEOF)
     {
       CTimer timer("CField::checkForLateDataFromServer");
@@ -487,5 +489,5 @@
       {
         const CDate nextDataDue = wasDataAlreadyReceivedFromServer ? (lastDataReceivedFromServer + file->output_freq) : context->getCalendar()->getInitDate();
-        isDataLate = nextDataDue < currentDate;
+        isDataLate = (nextDataDue <= currentDate);
 
         if (isDataLate)
@@ -504,4 +506,15 @@
               << "Late data at timestep = " << currentDate);
     }
+  }
+
+  void CField::checkIfMustAutoTrigger(void)
+  {
+    mustAutoTrigger = serverSourceFilter ? serverSourceFilter->mustAutoTrigger() : false;
+  }
+
+  void CField::autoTriggerIfNeeded(void)
+  {
+    if (mustAutoTrigger)
+      serverSourceFilter->trigger(CContext::getCurrent()->getCalendar()->getCurrentDate());
   }
 
Index: XIOS/trunk/src/node/field.hpp
===================================================================
--- XIOS/trunk/src/node/field.hpp	(revision 1357)
+++ XIOS/trunk/src/node/field.hpp	(revision 1358)
@@ -151,4 +151,6 @@
         void recvReadDataReady(vector<int> ranks, vector<CBufferIn*> buffers);
         void checkForLateDataFromServer(void);
+        void checkIfMustAutoTrigger(void);
+        void autoTriggerIfNeeded(void);
         void outputField(CArray<double,3>& fieldOut);
         void outputField(CArray<double,2>& fieldOut);
@@ -200,4 +202,5 @@
          CDate lastDataRequestedFromServer, lastDataReceivedFromServer, dateEOF;
          bool wasDataRequestedFromServer, wasDataAlreadyReceivedFromServer;
+         bool mustAutoTrigger;
 
          map<int,boost::shared_ptr<func::CFunctor> > foperation_srv;
Index: XIOS/trunk/src/node/file.cpp
===================================================================
--- XIOS/trunk/src/node/file.cpp	(revision 1357)
+++ XIOS/trunk/src/node/file.cpp	(revision 1358)
@@ -770,4 +770,16 @@
 
    /*!
+    * Post-process the filter graph for each active field.
+    */
+   void CFile::postProcessFilterGraph()
+   {
+     int size = this->enabledFields.size();
+     for (int i = 0; i < size; ++i)
+     {
+       this->enabledFields[i]->checkIfMustAutoTrigger();
+     }
+   }
+
+   /*!
      Prefetching the data for enabled fields read from file.
    */
@@ -783,9 +795,9 @@
 
    /*!
-     Do all post timestep operations for enabled fields in read mode:
-      - Prefetch the data read from file when needed
+     Do all pre timestep operations for enabled fields in read mode:
       - Check that the data excepted from server has been received
-   */
-   void CFile::doPostTimestepOperationsForEnabledReadModeFields(void)
+      - Check if some filters must auto-trigger
+   */
+   void CFile::doPreTimestepOperationsForEnabledReadModeFields(void)
    {
      if (mode.isEmpty() || mode.getValue() != mode_attr::read)
@@ -796,4 +808,20 @@
      {
        this->enabledFields[i]->checkForLateDataFromServer();
+       this->enabledFields[i]->autoTriggerIfNeeded();
+     }
+   }
+
+   /*!
+     Do all post timestep operations for enabled fields in read mode:
+      - Prefetch the data read from file when needed
+   */
+   void CFile::doPostTimestepOperationsForEnabledReadModeFields(void)
+   {
+     if (mode.isEmpty() || mode.getValue() != mode_attr::read)
+       return;
+
+     int size = this->enabledFields.size();
+     for (int i = 0; i < size; ++i)
+     {
        this->enabledFields[i]->sendReadDataRequestIfNeeded();
      }
Index: XIOS/trunk/src/node/file.hpp
===================================================================
--- XIOS/trunk/src/node/file.hpp	(revision 1357)
+++ XIOS/trunk/src/node/file.hpp	(revision 1358)
@@ -106,5 +106,7 @@
          void solveAllRefOfEnabledFields(bool sendToServer);
          void buildFilterGraphOfEnabledFields(CGarbageCollector& gc);
+         void postProcessFilterGraph();
          void prefetchEnabledReadModeFields();
+         void doPreTimestepOperationsForEnabledReadModeFields();
          void doPostTimestepOperationsForEnabledReadModeFields();
 
