Index: XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.cpp	(revision 1301)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.cpp	(revision 1302)
@@ -17,6 +17,12 @@
     , samplingOffset(samplingOffset)
     , opFreq(opFreq)
+    , offsetMonth({0, this->samplingOffset.month, 0, 0, 0, 0, 0})
+    , offsetAllButMonth({this->samplingOffset.year, 0 , this->samplingOffset.day,
+                       this->samplingOffset.hour, this->samplingOffset.minute,
+                       this->samplingOffset.second, this->samplingOffset.timestep})
+    , initDate(initDate)
     , nextSamplingDate(initDate + this->samplingOffset + initDate.getRelCalendar().getTimeStep())
-    , nextOperationDate(initDate + opFreq + this->samplingOffset)
+    , nbOperationDates(1)
+//    , nextOperationDate(initDate + opFreq + this->samplingOffset)
     , isFirstOperation(true)
   {
@@ -35,5 +41,6 @@
       {
         usePacket = (data[0]->date >= nextSamplingDate);
-        outputResult = (data[0]->date + samplingFreq > nextOperationDate);
+//        outputResult = (data[0]->date + samplingFreq > nextOperationDate);
+        outputResult = (data[0]->date  > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth);
         copyLess = (isInstantOperation && usePacket && outputResult);
       }
@@ -54,4 +61,5 @@
       if (outputResult)
       {
+        nbOperationDates ++;
         if (!copyLess)
         {
@@ -69,5 +77,5 @@
 
         isFirstOperation = false;
-        nextOperationDate = nextOperationDate + samplingFreq + opFreq - samplingFreq;
+//        nextOperationDate = initDate + samplingFreq + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth;
       }
     }
@@ -78,5 +86,6 @@
   bool CTemporalFilter::isDataExpected(const CDate& date) const
   {
-    return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date + samplingFreq > nextOperationDate);
+//    return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date + samplingFreq > nextOperationDate);
+    return isOnceOperation ? isFirstOperation : (date >= nextSamplingDate || date > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth);
   }
 
Index: XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.hpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.hpp	(revision 1301)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/filter/temporal_filter.hpp	(revision 1302)
@@ -56,6 +56,10 @@
       const CDuration samplingOffset; //!< The sampling offset, i.e. the offset after which the input data will be used
       const CDuration opFreq; //!< The operation frequency, i.e. the frequency at which the output data will be computed
+      const CDuration offsetMonth; //!< The month duration of samplingOffset
+      CDuration offsetAllButMonth; //!< All but the month duration of samplingOffset
+      const CDate initDate;
       CDate nextSamplingDate; //!< The date of the next sampling
-      CDate nextOperationDate; //!< The date of the next operation
+      int nbOperationDates; //!< The number of times an operation is performed
+//      CDate nextOperationDate; //!< The date of the next operation
       bool isFirstOperation; //!< True before the first operation was been computed
   }; // class CTemporalFilter
Index: XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp
===================================================================
--- XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp	(revision 1301)
+++ XIOS/dev/XIOS_DEV_CMIP6/src/node/field.cpp	(revision 1302)
@@ -951,6 +951,4 @@
      {
         if (!instantDataFilter)
-//          instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false,
-//                                                                                                      detectMissingValues, defaultValue));
           instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid,true));
 
@@ -969,6 +967,4 @@
      {
        if (!instantDataFilter)
-//         instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, false, NoneDu, false,
-//                                                                                                     detectMissingValues, defaultValue));
          instantDataFilter = clientSourceFilter = boost::shared_ptr<CSourceFilter>(new CSourceFilter(gc, grid, true));
 
