Index: XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.cpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.cpp	(revision 206)
@@ -16,5 +16,19 @@
       
       ///--------------------------------------------------------------
-      
+
+      void CAttributeMap::clearAllAttributes(void)
+      {
+         typedef std::pair<StdString, CAttribute*> StdStrAttPair;
+         SuperClassMap::const_iterator it = SuperClassMap::begin(), end = SuperClassMap::end();
+         for (; it != end; it++)
+         {
+            const StdStrAttPair & att = *it;
+            if (!att.second->isEmpty())
+               att.second->clear();
+         }
+      }
+
+      //---------------------------------------------------------------
+
       bool CAttributeMap::hasAttribute(const StdString & key) const
       { 
Index: XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.hpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/attribute_map.hpp	(revision 206)
@@ -33,4 +33,6 @@
             void setAttributes(const CAttributeMap * const _parent);
 
+            void clearAllAttributes(void);
+
             /// Destructeur ///
             virtual ~CAttributeMap(void);
Index: XMLIO_V2/dev/dev_rv/src/xmlio/data_treatment.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/data_treatment.cpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/data_treatment.cpp	(revision 206)
@@ -59,4 +59,7 @@
          this->solveAllOperation();
 
+         // Nettoyage de l'arborescence
+         CContext::CleanTree();
+
          //std::cout << "(Message temporaire) fin traitement sorties ..." << std::endl;
       }
Index: XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/node/context.cpp	(revision 206)
@@ -277,4 +277,12 @@
    }
 
+   //----------------------------------------------------------------
+
+   void CContext::CleanTree(void)
+   {
+#define DECLARE_NODE(Name_, name_) C##Name_##Group::ClearAllAttributes();
+#define DECLARE_NODE_PAR(Name_, name_)
+#include "node_type.conf"
+   }
    ///---------------------------------------------------------------
 
Index: XMLIO_V2/dev/dev_rv/src/xmlio/node/context.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/node/context.hpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/node/context.hpp	(revision 206)
@@ -86,4 +86,5 @@
          /// Autres mÃ©thodes statiques ///
          static void ShowTree(StdOStream & out = std::clog);
+         static void CleanTree(void);
 
          /// Test ///
Index: XMLIO_V2/dev/dev_rv/src/xmlio/node/field.cpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/node/field.cpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/node/field.cpp	(revision 206)
@@ -6,5 +6,5 @@
 
 #include "node_type.hpp"
-
+#include "calendar_util.hpp"
 #include "xios_manager.hpp"
 
@@ -19,4 +19,5 @@
       , grid(), file()
       , freq_operation(), freq_write()
+      , last_Write(), last_operation()
       , foperation()
       , data()
@@ -28,4 +29,5 @@
       , grid(), file()
       , freq_operation(), freq_write()
+      , last_Write(), last_operation()
       , foperation()
       , data()
@@ -42,4 +44,25 @@
    //----------------------------------------------------------------
 
+   bool CField::updateDataServer
+      (const date::CDate & currDate, const std::deque<ARRAY(double, 1)> storedClient)
+   {
+      if ((*last_operation + freq_operation) >= currDate)
+      {
+         ARRAY_CREATE(input, double, 1, [0]);
+         this->grid->inputFieldServer(storedClient, input);
+         (*this->foperation)(input);
+         *last_operation = currDate;
+      }
+
+      if ((*last_Write + freq_write) >= currDate)
+      {
+         *last_Write = currDate;
+         return (true);
+      }
+      return (false);
+   }
+
+   //----------------------------------------------------------------
+
    void CField::setRelFile(const boost::shared_ptr<CFile> _file)
    { 
@@ -132,7 +155,21 @@
    //----------------------------------------------------------------
    
-   ARRAY(double, 1)  CField::getData(void) const
+   ARRAY(double, 1) CField::getData(void) const
    {
       return(this->data);
+   }
+
+   //----------------------------------------------------------------
+
+   boost::shared_ptr<date::CDate> CField::getLastWriteDate(void) const
+   {
+      return(this->last_Write);
+   }
+
+   //----------------------------------------------------------------
+
+   boost::shared_ptr<date::CDate> CField::getLastOperationDate(void) const
+   {
+      return(this->last_operation);
    }
 
@@ -173,5 +210,8 @@
       using namespace date;
        
-      StdString id = this->getBaseFieldReference()->getId();      
+      StdString id = this->getBaseFieldReference()->getId();
+      boost::shared_ptr<CContext> _context =
+         CObjectFactory::GetObject<CContext>(CObjectFactory::GetCurrentContextId());
+
       if (operation.isEmpty() || freq_op.isEmpty() || this->file->output_freq.isEmpty())
       {
@@ -187,4 +227,8 @@
          this->freq_write     =
              CDuration::FromString(this->file->output_freq.getValue());
+         this->last_Write     = boost::shared_ptr<xmlioserver::date::CDate>
+                        (new date::CDate(_context->getCalendar()->getInitDate()));
+         this->last_operation = boost::shared_ptr<xmlioserver::date::CDate>
+                        (new date::CDate(_context->getCalendar()->getInitDate()));
          this->foperation     =
              boost::shared_ptr<func::CFunctor>(new CInstant(this->data));
@@ -194,4 +238,8 @@
          this->freq_operation = CDuration::FromString(freq_op.getValue());
          this->freq_write     = CDuration::FromString(this->file->output_freq.getValue());
+         this->last_Write     = boost::shared_ptr<xmlioserver::date::CDate>
+                        (new date::CDate(_context->getCalendar()->getInitDate()));
+         this->last_operation = boost::shared_ptr<xmlioserver::date::CDate>
+                        (new date::CDate(_context->getCalendar()->getInitDate()));
          
 #define DECLARE_FUNCTOR(MType, mtype)              \
Index: XMLIO_V2/dev/dev_rv/src/xmlio/node/field.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/node/field.hpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/node/field.hpp	(revision 206)
@@ -8,4 +8,5 @@
 #include "functor_type.hpp"
 #include "duration.hpp"
+#include "date.hpp"
 #include "declare_group.hpp"
 
@@ -62,5 +63,8 @@
          const date::CDuration & getFreqOperation(void) const;
          const date::CDuration & getFreqWrite(void) const;
-         
+
+         boost::shared_ptr<date::CDate> getLastWriteDate(void) const;
+         boost::shared_ptr<date::CDate> getLastOperationDate(void) const;
+
          boost::shared_ptr<func::CFunctor> getFieldOperation(void) const;
          
@@ -71,4 +75,11 @@
          /// Mutateur ///
          void setRelFile(const boost::shared_ptr<CFile> _file);
+
+         template <StdSize N>
+            inline bool updateData
+               (const date::CDate & currDate, const ARRAY(double, N) data);
+
+         bool updateDataServer
+               (const date::CDate & currDate, const std::deque<ARRAY(double, 1)> storedClient);
 
       public :
@@ -103,4 +114,6 @@
 
          date::CDuration freq_operation, freq_write;
+
+         boost::shared_ptr<date::CDate>    last_Write, last_operation;
          boost::shared_ptr<func::CFunctor> foperation;
          
@@ -121,4 +134,33 @@
       void CGroupTemplate<CField, CFieldGroup, CFieldAttributes>::solveRefInheritance(void);
 
+   ///-----------------------------------------------------------------
+} // namespace xmlioserver
+
+#include "grid.hpp"
+
+namespace xmlioserver {
+namespace tree {
+
+   template <StdSize N>
+      bool CField::updateData(const date::CDate & currDate, const ARRAY(double, N) data)
+   {
+      if ((*last_operation + freq_operation) >= currDate)
+      {
+         ARRAY_CREATE(input, double, 1, [0]);
+         input->resize(boost::extents[data->size()]);
+         this->grid->inputField(data, input);
+         (*this->foperation)(input);
+         *last_operation = currDate;
+      }
+      
+      if ((*last_Write + freq_write) >= currDate)
+      {
+         *last_Write = currDate;
+         return (true);
+      }
+      return (false);
+   };
+
+} // namespace tree
 } // namespace xmlioserver
 
Index: XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/object_template.hpp	(revision 206)
@@ -44,4 +44,7 @@
          virtual void solveDescInheritance(const CAttributeMap * const parent = 0);
 
+         /// Traitement statique ///
+         static void ClearAllAttributes(void);
+
          /// Accesseur statique ///
          static std::vector<boost::shared_ptr<DerivedType> > &
Index: XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp
===================================================================
--- XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp	(revision 205)
+++ XMLIO_V2/dev/dev_rv/src/xmlio/object_template_impl.hpp	(revision 206)
@@ -117,4 +117,21 @@
    }
 
+   //---------------------------------------------------------------
+
+   template <class T>
+      void CObjectTemplate<T>::ClearAllAttributes(void)
+   {
+      std::vector<boost::shared_ptr<T> > & avect =
+         CObjectTemplate<T>::GetAllVectobject(CObjectFactory::GetCurrentContextId());
+      typename std::vector<boost::shared_ptr<T> >::iterator
+            it = avect.begin(), end = avect.end();
+
+      for (;it != end; it++)
+      {
+         CAttributeMap & amap = **it;
+         amap.clearAllAttributes();
+      }
+   }
+
    ///--------------------------------------------------------------
 
