Index: XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp	(revision 2020)
+++ XIOS/dev/dev_trunk_graph/src/filter/client_to_server_store_filter.cpp	(revision 2021)
@@ -38,11 +38,13 @@
       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("Client to Server Store filter", 5, true, 1, data[0]);
-      
+      CWorkflowGraph::addNode("Client to Server Store filter", 6, true, 1, data[0]);
+     
       CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
-      data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
+      // flux can be redirected to other filters. So don't change the 'from' parameter
+      //data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
+      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
     }
   }
Index: XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2020)
+++ XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2021)
@@ -19,4 +19,10 @@
     if(this->graphEnabled)
     {
+      if(data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId())
+      {
+        std::cout<<"PASS THROUGH FILTER OMITTED "<<this<<std::endl;
+        std::cout<<data[0]->graphPackage->currentField->getId()<< "-------"<< this->graphPackage->inFields[0]->getId()<<std::endl;
+        return;
+      }
       this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
       
@@ -26,9 +32,9 @@
         data[0]->graphPackage->fromFilter = -1;
       }
-          
+      
+      CWorkflowGraph::addNode("Pass through filter", 2, false, 1, 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());
       
-      CWorkflowGraph::addNode("Pass through filter", 2, false, 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_trunk_graph/src/filter/temporal_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp	(revision 2020)
+++ XIOS/dev/dev_trunk_graph/src/filter/temporal_filter.cpp	(revision 2021)
@@ -34,7 +34,8 @@
     if(this->graphEnabled)
     {
-      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());
+      if(!data[0]->graphPackage)
+      {
+        data[0]->graphPackage = new CGraphDataPackage;
+      }
       
       if(this->graphPackage->sourceFilterIds.size()==0)
@@ -46,5 +47,7 @@
       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);    
+      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());
     }
 
Index: XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2020)
+++ XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2021)
@@ -1,5 +1,5 @@
 #include "transform_filter.hpp"
 #include "grid_algorithm.hpp"
-
+#include "workflow_graph.hpp"
 namespace xios
 {
@@ -19,7 +19,10 @@
     packet->timestamp = data[0]->timestamp;
     packet->status = data[0]->status;
-
+    
     if (packet->status == CDataPacket::NO_ERROR) 
     {
+      cout<<"transformeFilter = "<<this<<" and graphEnabled = "<<this->graphEnabled<<std::endl;
+      buildWorkflowGraph(data, packet, algorithm_);
+      
       if (data.size()>1)
       {
@@ -33,5 +36,27 @@
   }
 
-
+  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;          
+      packet->graphPackage->currentField = 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("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];
+    }
+  }
 
 }
Index: XIOS/dev/dev_trunk_graph/src/filter/transform_filter.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/transform_filter.hpp	(revision 2020)
+++ XIOS/dev/dev_trunk_graph/src/filter/transform_filter.hpp	(revision 2021)
@@ -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);
      
