Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_client_source_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_client_source_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_client_source_filter.cpp	(revision 2143)
@@ -6,4 +6,5 @@
 #include "grid.hpp"
 #include <limits> 
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -39,4 +40,10 @@
          
     grid_->getClientFromClientConnector()->transfer(event,packet->data) ;
+
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      CWorkflowGraph::addNode("Client to Client Source filter", 1, false, 0, packet);
+    }
     onOutputReady(packet);
   }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_server_source_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_server_source_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_from_server_source_filter.cpp	(revision 2143)
@@ -10,4 +10,5 @@
 #include "tracer.hpp"
 #include <limits> 
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -56,4 +57,10 @@
       info(20)<<"lastDateReceived_ "<<lastDateReceived_<< "  date "<<packet->date<<endl;                                                                                    // make a registration at initialization once
       packet->status = CDataPacket::NO_ERROR;
+    }
+
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      CWorkflowGraph::addNode("Client from Server Source filter", 1, false, 0, packet);
     }
     onOutputReady(packet);
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.cpp	(revision 2143)
@@ -4,4 +4,5 @@
 #include "timer.hpp"
 #include "tracer.hpp"
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -9,5 +10,5 @@
   CClientToModelStoreFilter::CClientToModelStoreFilter(CGarbageCollector& gc, CField* field)
     : CInputPin(gc, 1)
-    , gc_(gc)
+    , gc_(gc), graphEnabled(false)
   {
     context_ = CContext::getCurrent() ;
@@ -107,4 +108,11 @@
     }
 
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      CWorkflowGraph::addNode("Client to Model Store filter", 5, true, 1, packet);
+    }
+
+
     packets_.insert(std::make_pair(packet->timestamp, packet));
     // The packet is always destroyed by the garbage collector
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_model_store_filter.hpp	(revision 2143)
@@ -3,4 +3,5 @@
 
 #include "input_pin.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -73,4 +74,7 @@
       void virtual invalidate(Time timestamp);
 
+      CGraphPackage * graphPackage;
+      bool graphEnabled;
+
     protected:
       /*!
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.cpp	(revision 2143)
@@ -7,4 +7,5 @@
 #include "field.hpp"
 #include "grid.hpp"
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -12,5 +13,5 @@
   CClientToServerStoreFilter::CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client)
     : CInputPin(gc, 1)
-    , field_(field), client_(client)
+    , field_(field), client_(client), graphEnabled(false)
   {
     if (!field)
@@ -21,4 +22,6 @@
   void CClientToServerStoreFilter::onInputReady(std::vector<CDataPacketPtr> data)
   {
+    buildWorkflowGraph(data);
+
     CTimer::get("Field : send data").resume();
     CEventClient event(field_->getType(), CField::EVENT_ID_UPDATE_DATA);
@@ -27,4 +30,21 @@
     field_->getSentGrid()->getClientToServerConnector(client_)->transfer(data[0]->data, client_, event, message) ;
     CTimer::get("Field : send data").suspend();
+  }
+
+  void CClientToServerStoreFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
+  {
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      if(!data[0]->graphPackage) data[0]->graphPackage = new CGraphDataPackage;
+      
+      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+      
+      CWorkflowGraph::addNode("Client to Server Store filter", 6, true, 1, data[0]);
+     
+      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
+      // flux can be redirected to other filters. So don't change the 'from' parameter
+      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+    }
   }
   
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/client_to_server_store_filter.hpp	(revision 2143)
@@ -3,4 +3,5 @@
 
 #include "input_pin.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -37,4 +38,6 @@
        */
       bool virtual mustAutoTrigger() const;
+      
+      void buildWorkflowGraph(std::vector<CDataPacketPtr> data);
 
       /*!
@@ -44,4 +47,6 @@
        */
       bool virtual isDataExpected(const CDate& date) const;
+      CGraphPackage * graphPackage;
+      bool graphEnabled;
 
     protected:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/data_packet.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/data_packet.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/data_packet.hpp	(revision 2143)
@@ -6,4 +6,5 @@
 #include "array_new.hpp"
 #include "date.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -21,4 +22,6 @@
       END_OF_STREAM //!< Last packet of the stream, does not have data
     };
+
+    CGraphDataPackage * graphPackage;
 
     CArray<double, 1> data; //!< Array containing the data
@@ -40,6 +43,11 @@
       p->timestamp = timestamp;
       p->status = status;
+      p->graphPackage = graphPackage;
       return p;
     };
+
+
+    CDataPacket() : graphPackage(nullptr) {}
+
   }; // struct CDataPacket
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_reader_source_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_reader_source_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_reader_source_filter.cpp	(revision 2143)
@@ -7,5 +7,5 @@
 #include "file.hpp"
 #include "context.hpp"
-
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -45,4 +45,10 @@
     
     info(20)<<"Read data from file : FieldId "<<field_->getId()<<"  nStep "<<nStep_<<"  date : "<<packet->date<<endl ;
+  
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      CWorkflowGraph::addNode("File Reader Source filter", 1, false, 0, packet);
+    }
            
     onOutputReady(packet);
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.cpp	(revision 2143)
@@ -4,4 +4,5 @@
 #include "file.hpp"
 #include "context.hpp"
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -9,5 +10,5 @@
   CFileWriterStoreFilter::CFileWriterStoreFilter(CGarbageCollector& gc, CField* field)
     : CInputPin(gc, 1)
-    , field_(field)
+    , field_(field), graphEnabled(false)
 
   {
@@ -67,4 +68,19 @@
       }  
       nstep_ = file_->getDataOutput()->writeFieldData(field_, fieldData, lastWrite_,currentWrite, nstep_);
+      if(this->graphEnabled)
+      {
+        
+        this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+        if(!data[0]->graphPackage) data[0]->graphPackage = new CGraphDataPackage;
+        data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+      
+        CWorkflowGraph::addNode("File Writer Store filter", 5, true, 1, data[0]);
+      
+        CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
+        data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
+
+
+      }
     }
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/file_writer_store_filter.hpp	(revision 2143)
@@ -3,4 +3,5 @@
 
 #include "input_pin.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -39,4 +40,7 @@
       bool virtual isDataExpected(const CDate& date) const;
 
+      CGraphPackage *graphPackage;
+      bool graphEnabled;
+
     protected:
       /*!
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.cpp	(revision 2143)
@@ -4,4 +4,5 @@
 #include "calendar_util.hpp"
 #include <limits> 
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -45,6 +46,25 @@
     }
     
+    buildWorkflowGraph(packet);
     onOutputReady(packet);
   }
+  
+  void CModelToClientSourceFilter::buildWorkflowGraph(CDataPacketPtr packet)
+  {
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      if(!packet->graphPackage)
+      {
+        packet->graphPackage = new CGraphDataPackage;
+      }
+      packet->graphPackage->fromFilter = this->graphPackage->filterId;
+      packet->graphPackage->currentField = this->graphPackage->inFields[0];
+      CWorkflowGraph::addNode("Model to Client Source filter", 1, false, 0, packet);
+    }
+  }
+
+
+
 
   template void CModelToClientSourceFilter::streamData<1>(CDate date, const CArray<double, 1>& data);
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/model_to_client_source_filter.hpp	(revision 2143)
@@ -37,4 +37,7 @@
       void streamData(CDate date, const CArray<double, N>& data);
 
+      void buildWorkflowGraph(CDataPacketPtr packet);
+
+
       /*!
        * Transforms the data received from the server into a packet and send it
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.cpp	(revision 2143)
@@ -6,5 +6,5 @@
   COutputPin::COutputPin(CGarbageCollector& gc, bool manualTrigger /*= false*/)
     : gc(gc)
-    , manualTrigger(manualTrigger)
+    , manualTrigger(manualTrigger), graphEnabled(false)
   { /* Nothing to do */ }
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/output_pin.hpp	(revision 2143)
@@ -4,4 +4,5 @@
 #include "garbage_collector.hpp"
 #include "input_pin.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -65,4 +66,6 @@
        */
       void virtual invalidate(Time timestamp);
+      CGraphPackage *graphPackage;
+      bool graphEnabled;
 
     protected:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.cpp	(revision 2143)
@@ -1,3 +1,5 @@
 #include "pass_through_filter.hpp"
+#include "workflow_graph.hpp"
+#include <algorithm>
 
 namespace xios
@@ -9,5 +11,50 @@
   CDataPacketPtr CPassThroughFilter::apply(std::vector<CDataPacketPtr> data)
   {
+    buildWorkflowGraph(data);
     return data[0];
   }
+
+  void CPassThroughFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
+  {
+    if(this->graphEnabled)
+    {
+      if(data[0]->graphPackage && data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId())
+      {
+        std::cout<<"PASS THROUGH FILTER OMITTED "<<this<<std::endl;
+        return;
+      }
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      
+      if(!data[0]->graphPackage) 
+      {
+        data[0]->graphPackage = new CGraphDataPackage;
+        data[0]->graphPackage->fromFilter = -1;
+        data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+      }
+
+      for(int i=0; i<this->graphPackage->filterId; i++)
+      {
+        if(CXios::isClient 
+          &&  (*CWorkflowGraph::vectorOfNodes_)[i].label_field_id == this->label_field_id  
+          && (*CWorkflowGraph::vectorOfNodes_)[i].timestamp == data[0]->timestamp
+          && (*CWorkflowGraph::vectorOfNodes_)[i].filter_name == "Pass through filter" )
+        {
+          data[0]->graphPackage->fromFilter = i;
+          return;
+        }  
+      }
+      
+      CWorkflowGraph::addNode("Pass through filter", 2, false, 1, data[0]);
+      if(CXios::isClient) (*CWorkflowGraph::vectorOfNodes_)[this->graphPackage->filterId].label_field_id = this->label_field_id;
+      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
+      
+      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+      
+      data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
+        
+    } 
+  }
+
+
 } // namespace xios
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/pass_through_filter.hpp	(revision 2143)
@@ -20,4 +20,6 @@
       CPassThroughFilter(CGarbageCollector& gc);
 
+      StdString label_field_id; //used for omitting redundant pass through filter in graph
+
     protected:
       /*!
@@ -28,4 +30,6 @@
        */
       CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
+      void buildWorkflowGraph(std::vector<CDataPacketPtr> data);
+  
   }; // class CPassThroughFilter
 } // namespace xios
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_from_client_source_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_from_client_source_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_from_client_source_filter.cpp	(revision 2143)
@@ -4,5 +4,5 @@
 #include "calendar_util.hpp"
 #include "context.hpp"
-
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -27,4 +27,12 @@
     grid_->getServerFromClientConnector()->transfer(event,packet->data) ;
 
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+      packet->graphPackage = new CGraphDataPackage;
+      packet->graphPackage->fromFilter = this->graphPackage->filterId;
+      packet->graphPackage->currentField = this->graphPackage->inFields[0];
+      CWorkflowGraph::addNode("Server from Client Source filter", 1, false, 0, packet);
+    }
     onOutputReady(packet);
   }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.cpp	(revision 2143)
@@ -5,4 +5,5 @@
 #include "utils.hpp"
 #include "context_client.hpp"
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -10,5 +11,5 @@
   CServerToClientStoreFilter::CServerToClientStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client)
     : CInputPin(gc, 1)
-    , field_(field), client_(client)
+    , field_(field), client_(client), graphEnabled(false)
   {
     if (!field) ERROR("CServerToClientFilter::CServerToClientFilter(CField* field)", "The field cannot be null.");
@@ -27,4 +28,9 @@
     CMessage msg ;
     msg<<field_->getId() ;
+
+    if(this->graphEnabled)
+    {
+      CWorkflowGraph::addNode("Server to Client Store filter", 5, true, 1, packets[0]);
+    }
 
     if (isEOF) 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/server_to_client_store_filter.hpp	(revision 2143)
@@ -3,4 +3,5 @@
 
 #include "input_pin.hpp"
+#include "graph_package.hpp"
 
 namespace xios
@@ -46,4 +47,6 @@
        */
       bool virtual isDataExpected(const CDate& date) const;
+      CGraphPackage * graphPackage;
+      bool graphEnabled;
 
     protected:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.cpp	(revision 2143)
@@ -2,4 +2,5 @@
 #include "functor_type.hpp"
 #include "calendar_util.hpp"
+#include "workflow_graph.hpp"
 
 namespace xios
@@ -28,9 +29,39 @@
 //    , nextOperationDate(initDate + opFreq + this->samplingOffset)
     , isFirstOperation(true)
+    , graphCycleCompleted(true)
   {
   }
 
+  void CTemporalFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
+  {
+    if(this->graphEnabled )
+    {
+      if(!data[0]->graphPackage)
+      {
+        data[0]->graphPackage = new CGraphDataPackage;
+      }
+      
+      if(graphCycleCompleted)
+      {  
+        this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+        CWorkflowGraph::addNode("Temporal filter", 3, false, 0, data[0]);
+        graphCycleCompleted = false;
+      }
+      
+      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+      
+      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
+      data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
+      this->graphPackage->sourceFilterIds.push_back(data[0]->graphPackage->fromFilter); 
+      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
+      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+    }
+
+  }
   CDataPacketPtr CTemporalFilter::apply(std::vector<CDataPacketPtr> data)
   {
+    buildWorkflowGraph(data);
+  
     CDataPacketPtr packet;
 
@@ -43,5 +74,4 @@
       {
         usePacket = (data[0]->date >= nextSamplingDate);
-//        outputResult = (data[0]->date + samplingFreq > nextOperationDate);
         outputResult = (data[0]->date  > initDate + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth);
         copyLess = (isInstantOperation && usePacket && outputResult);
@@ -75,4 +105,5 @@
           packet->data.resize(tmpData.numElements());
           packet->data = tmpData;
+          packet->graphPackage = data[0]->graphPackage;
         }
         else
@@ -80,6 +111,6 @@
 
         isFirstOperation = false;
-//        nextOperationDate = initDate + samplingFreq + nbOperationDates*opFreq - samplingFreq + offsetMonth + offsetAllButMonth;
-      }
+        graphCycleCompleted = true;
+     }
     }
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/temporal_filter.hpp	(revision 2143)
@@ -39,4 +39,6 @@
       CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data);
 
+      void buildWorkflowGraph(std::vector<CDataPacketPtr> data);
+
       /*!
        * Tests if the filter must auto-trigger.
@@ -52,4 +54,5 @@
        */
       bool virtual isDataExpected(const CDate& date) const;
+      bool graphCycleCompleted;
 
     private:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.cpp	(revision 2143)
@@ -1,5 +1,5 @@
 #include "transform_filter.hpp"
 #include "grid_algorithm.hpp"
-
+#include "workflow_graph.hpp"
 namespace xios
 {
@@ -22,4 +22,6 @@
     if (packet->status == CDataPacket::NO_ERROR) 
     {
+      buildWorkflowGraph(data, packet, algorithm_);
+      
       if (data.size()>1)
       {
@@ -33,5 +35,38 @@
   }
 
-
+  void CTransformFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, CGridAlgorithm* algorithm)
+  {
+    if(this->graphEnabled)
+    {
+      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
+    
+      packet->graphPackage = new CGraphDataPackage;
+      if(data[0]->graphPackage)
+      {
+        packet->graphPackage->fromFilter = data[0]->graphPackage->fromFilter;
+      }
+      packet->graphPackage->toFilter = data[0]->graphPackage->toFilter;
+      packet->graphPackage->current_filter_name = data[0]->graphPackage->current_filter_name;
+      packet->graphPackage->contextId = data[0]->graphPackage->contextId;          
+    
+      int tmp_from = packet->graphPackage->fromFilter;
+      if(this->graphPackage->show)
+      {
+        packet->graphPackage->currentField = this->graphPackage->inFields[0];
+        CWorkflowGraph::addNode("Spatial transform filter "+algorithm->getAlgoName(), 4, false, 1, packet);
+        CWorkflowGraph::addEdge(packet->graphPackage->fromFilter, this->graphPackage->filterId, packet);
+        packet->graphPackage->fromFilter = this->graphPackage->filterId;
+        packet->graphPackage->currentField = this->graphPackage->inFields[0];
+        std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
+      }
+      else
+      {
+        packet->graphPackage->currentField = this->graphPackage->inFields[0];
+        if(CXios::isClient) CWorkflowGraph::vectorOfNodes_->at(tmp_from).filter_name += algorithm->getAlgoName();
+        else                CWorkflowGraph::vectorOfNodes_srv_->at(tmp_from).filter_name += algorithm->getAlgoName();
+        
+      }     
+    }
+  }
 
 }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp	(revision 2142)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/filter/transform_filter.hpp	(revision 2143)
@@ -22,4 +22,6 @@
       */
       CDataPacketPtr virtual apply(std::vector<CDataPacketPtr> data) ;
+      void buildWorkflowGraph(std::vector<CDataPacketPtr> data, CDataPacketPtr packet, CGridAlgorithm* algorithm);
+      
 //      void apply(const CArray<double, 1>& dataSrc, CArray<double,1>& dataDest);
      
