Index: XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/attribute_enum_impl.hpp	(revision 2026)
@@ -10,5 +10,5 @@
 namespace xios
 {
-  /// ////////////////////// Dfinitions ////////////////////// ///
+  /// ////////////////////// Definitions ////////////////////// ///
   template <class T>
   CAttributeEnum<T>::CAttributeEnum(const StdString & id)
Index: XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/filter/pass_through_filter.cpp	(revision 2026)
@@ -19,5 +19,5 @@
     if(this->graphEnabled)
     {
-      if(data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId())
+      if(data[0]->graphPackage && data[0]->graphPackage->currentField->getId() == this->graphPackage->inFields[0]->getId())
       {
         std::cout<<"PASS THROUGH FILTER OMITTED "<<this<<std::endl;
@@ -31,4 +31,5 @@
         data[0]->graphPackage = new CGraphDataPackage;
         data[0]->graphPackage->fromFilter = -1;
+        data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
       }
 
@@ -52,5 +53,4 @@
       std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
       
-      
       data[0]->graphPackage->fromFilter = this->graphPackage->filterId;
         
Index: XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/filter/transform_filter.cpp	(revision 2026)
@@ -22,5 +22,4 @@
     if (packet->status == CDataPacket::NO_ERROR) 
     {
-      cout<<"transformeFilter = "<<this<<" and graphEnabled = "<<this->graphEnabled<<std::endl;
       buildWorkflowGraph(data, packet, algorithm_);
       
@@ -50,14 +49,22 @@
       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];
     
-      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());
+      int tmp_from = packet->graphPackage->fromFilter;
+      if(this->graphPackage->show)
+      {
+        packet->graphPackage->currentField = data[0]->graphPackage->currentField->getDirectFieldReference();//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_trunk_graph/src/graph_package.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/graph_package.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/graph_package.hpp	(revision 2026)
@@ -11,4 +11,7 @@
     std::vector< CField* > inFields;
     StdString contextId;
+    bool show;
+
+    CGraphPackage(): show(true) {}
   };
   struct CGraphDataPackage
@@ -20,6 +23,7 @@
     int distanceFromStart=-1;
     StdString contextId;
+    bool show;
 
-    CGraphDataPackage(): fromFilter(-1) {}
+    CGraphDataPackage(): fromFilter(-1), show(true) {}
   }; 
 } // namespace xios
Index: XIOS/dev/dev_trunk_graph/src/node/field.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/field.cpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/node/field.cpp	(revision 2026)
@@ -554,5 +554,5 @@
     {
       inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc)); 
-      if(buildGraph_)
+      /*if(buildGraph_)
       {
         std::cout<<"============== field "<<this->getId()<<" calls a pass through filter ============== "<<inputFilter<<" ***** "<<CXios::isClient<<std::endl;
@@ -560,5 +560,5 @@
         inputFilter->graphPackage = new CGraphPackage;
         inputFilter->graphPackage->inFields.push_back(this);
-      }
+      }*/
     }
      
@@ -570,5 +570,5 @@
       {
         (*fieldRef).build_workflow_graph.set(build_workflow_graph); 
-        inputFilter->label_field_id = fieldRef->getId(); 
+        //inputFilter->label_field_id = fieldRef->getId(); 
       }    
       else
@@ -642,4 +642,5 @@
         inputFilter->graphPackage = new CGraphPackage;
         inputFilter->graphPackage->inFields.push_back(this);
+        inputFilter->label_field_id = getDirectFieldReference()->getId(); 
       }
     }
Index: XIOS/dev/dev_trunk_graph/src/node/grid.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/grid.cpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/node/grid.cpp	(revision 2026)
@@ -1694,4 +1694,5 @@
   TRY
   {
+    static bool transformationGoing = false;
     registerAlgorithmTransformation() ; // needed to enable self-registration of the transformations
                                         // big mystery why it doesn't work witout that...
@@ -1700,6 +1701,6 @@
     std::shared_ptr<CFilter> inputFilter = std::shared_ptr<CPassThroughFilter>(new CPassThroughFilter(gc));
     std::shared_ptr<CFilter> outputFilter = inputFilter ;
-    /*cout<<"***************CGrid::buildTransformationGraph***************"<<field->getId()<<" CGrid::buildTransformationGraph"<<endl;
-    inputFilter->graphEnabled = true;
+    cout<<"***************CGrid::buildTransformationGraph Pass through filter ***************"<<transformationGoing<<field->getId()<<endl;
+    /*inputFilter->graphEnabled = true;
     inputFilter->graphPackage = new CGraphPackage;
     inputFilter->graphPackage->inFields.push_back(field);
@@ -1995,4 +1996,5 @@
           transformFilter->graphPackage = new CGraphPackage;
           transformFilter->graphPackage->inFields.push_back(field);
+          transformFilter->graphPackage->show = !transformationGoing;
         }
         
@@ -2012,9 +2014,12 @@
       if (hasRemainTransform)
       {
+        transformationGoing = true;
         gridSrc=newGrid ;
-        pair<shared_ptr<CFilter>, shared_ptr<CFilter> > filters = this->buildTransformationGraph(gc, isSource, gridSrc, detectMissingValues, defaultValue, newGrid) ;
+        CField *field_bis = field;
+        pair<shared_ptr<CFilter>, shared_ptr<CFilter> > filters = this->buildTransformationGraph(gc, isSource, gridSrc, detectMissingValues, defaultValue, newGrid, graphEnabled, field_bis) ;
         outputFilter->connectOutput(filters.first,0) ;
         outputFilter=filters.second ;
       }
+      transformationGoing = false;
     }
      
Index: XIOS/dev/dev_trunk_graph/src/node/grid.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/node/grid.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/node/grid.hpp	(revision 2026)
@@ -215,5 +215,5 @@
       public:
          pair<shared_ptr<CFilter>, shared_ptr<CFilter> > buildTransformationGraph(CGarbageCollector& gc, bool isSource, CGrid* gridSrc, double detectMissingValues,
-                                                                                  double defaultValue, CGrid*& newGrid, bool graphEnabled=false, CField* field=nullptr) ;
+                                                                                  double defaultValue, CGrid*& newGrid, bool graphEnabled=false, CField* field=0) ;
       private:
         CGridAlgorithm* gridAlgorithm_ = nullptr ;
Index: XIOS/dev/dev_trunk_graph/src/transformation/algorithm_transformation_transfer.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/algorithm_transformation_transfer.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/transformation/algorithm_transformation_transfer.hpp	(revision 2026)
@@ -17,5 +17,5 @@
       virtual void apply(int dimBefore, int dimAfter, const CArray<double,1>& dataIn, CArray<double,1>& dataOut);
       virtual void computeRecvElement(CLocalView* srcView, CLocalView* dstView) ;
-      virtual StdString getAlgoName() {return "CAlgorithm transformation Transfer";}
+      virtual StdString getAlgoName() {return "\\nCAlgorithm transformation Transfer";}
    
     protected:
Index: XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_expand.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_expand.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/transformation/domain_algorithm/domain_algorithm_expand.hpp	(revision 2026)
@@ -28,4 +28,5 @@
 
   static bool registerTrans();
+  virtual StdString getAlgoName() {return "\\nexpand_domain";}
 
 protected:
Index: XIOS/dev/dev_trunk_graph/src/workflow_graph.cpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/workflow_graph.cpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/workflow_graph.cpp	(revision 2026)
@@ -5,11 +5,5 @@
 {
 
-  std::unordered_map <int, graph_info_box_node> *CWorkflowGraph::mapFilters_ptr_with_info = 0;
-
-  std::unordered_map <int, graph_info_box_edge > *CWorkflowGraph::mapFieldToFilters_ptr_with_info = 0;
-
-  std::unordered_map <size_t, int> *CWorkflowGraph::mapHashFilterID_ptr = 0;
-  
-  std::unordered_map <StdString, int > *CWorkflowGraph::mapContext_ptr = 0;
+  
 
 
@@ -26,11 +20,5 @@
   bool CWorkflowGraph::serverGraphBuilt = false;
 
-  int CWorkflowGraph::filterIdGenerator = 0;
-  int CWorkflowGraph::edgeIdGenerator = 0;
-
-
-  vector <StdString> CWorkflowGraph::filters;
-  vector <StdString> CWorkflowGraph::fields;
-  vector <pair<int, int> > CWorkflowGraph::fieldsToFilters;
+
 
   bool CWorkflowGraph::build_begin = false;
@@ -43,5 +31,34 @@
 //******************************************************
 
-  
+  void CWorkflowGraph::outputWorkflowGraph_client_stdout()
+  {
+    std::cout<<"\n\nbuild workflow graph ..."<<std::endl;
+    for(int i=0; i<vectorOfNodes_->size(); i++)
+    {
+      std::cout<<"Node["<<i<<"] is "<<(*vectorOfNodes_)[i].filter_name<<std::endl;
+    }
+  
+    for(int i=0; i<vectorOfEdges_->size(); i++)
+    {
+      std::cout<<"Edge["<<i<<"] from "<<(*vectorOfEdges_)[i].from<<" to "<<(*vectorOfEdges_)[i].to<<std::endl;
+    }
+    std::cout<<"\nend workflow graph ...\n\n"<<std::endl;
+  }
+  
+  void CWorkflowGraph::outputWorkflowGraph_server_stdout()
+  {
+    std::cout<<"\n\nServer side : build workflow graph ..."<<std::endl;
+    for(int i=0; i<vectorOfNodes_srv_->size(); i++)
+    {
+      std::cout<<"Node["<<i<<"] is "<<(*vectorOfNodes_srv_)[i].filter_name<<std::endl;
+    }
+  
+    for(int i=0; i<vectorOfEdges_srv_->size(); i++)
+    {
+      std::cout<<"Edge["<<i<<"] from "<<(*vectorOfEdges_srv_)[i].from<<" to "<<(*vectorOfEdges_srv_)[i].to<<std::endl;
+    }
+    std::cout<<"\nend workflow graph ...\n\n"<<std::endl;
+  }
+
 
   void CWorkflowGraph::drawWorkFlowGraph_client()
@@ -50,16 +67,5 @@
     if(vectorOfNodes_ && vectorOfEdges_) 
     {
-      std::cout<<"\n\nbuild workflow graph ..."<<std::endl;
-      for(int i=0; i<vectorOfNodes_->size(); i++)
-      {
-        std::cout<<"Node["<<i<<"] is "<<(*vectorOfNodes_)[i].filter_name<<std::endl;
-      }
-      
-      for(int i=0; i<vectorOfEdges_->size(); i++)
-      {
-        std::cout<<"Edge["<<i<<"] from "<<(*vectorOfEdges_)[i].from<<" to "<<(*vectorOfEdges_)[i].to<<std::endl;
-      }
-      std::cout<<"\nend workflow graph ...\n\n"<<std::endl;
-      
+      //outputWorkflowGraph_client_stdout();
       outputWorkflowGraph_client();
     }
@@ -74,16 +80,5 @@
     if(vectorOfNodes_srv_ && vectorOfEdges_srv_) 
     {
-      std::cout<<"\n\nServer side : build workflow graph ..."<<std::endl;
-      for(int i=0; i<vectorOfNodes_srv_->size(); i++)
-      {
-        std::cout<<"Node["<<i<<"] is "<<(*vectorOfNodes_srv_)[i].filter_name<<std::endl;
-      }
-      
-      for(int i=0; i<vectorOfEdges_srv_->size(); i++)
-      {
-        std::cout<<"Edge["<<i<<"] from "<<(*vectorOfEdges_srv_)[i].from<<" to "<<(*vectorOfEdges_srv_)[i].to<<std::endl;
-      }
-      std::cout<<"\nend workflow graph ...\n\n"<<std::endl;
-      
+      //outputWorkflowGraph_server_stdout();
       outputWorkflowGraph_server();
     }
@@ -109,4 +104,5 @@
       edge_obj.timestamp = packet->timestamp;
       edge_obj.field = packet->graphPackage->currentField;
+      edge_obj.show = true;
       for(int i=0; i<vectorOfContexts_->size(); i++)
       {
@@ -135,4 +131,5 @@
       edge_obj.timestamp = packet->timestamp;
       edge_obj.field = packet->graphPackage->currentField;
+      edge_obj.show = true;
       for(int i=0; i<vectorOfContexts_srv_->size(); i++)
       {
@@ -276,5 +273,6 @@
       outfiles[ctx] << "\"from\":"<<vectorOfEdges_->at(i).from<<","<<std::endl;
       outfiles[ctx] << "\"to\":"<<vectorOfEdges_->at(i).to<<","<<std::endl;
-      outfiles[ctx] << "\"label\":"<<"\""<<vectorOfEdges_->at(i).field->getId()<<"\\n"<<vectorOfEdges_->at(i).date<<"\","<<std::endl;
+      if(vectorOfEdges_->at(i).show) outfiles[ctx] << "\"label\":"<<"\""<<vectorOfEdges_->at(i).field->getId()<<"\\n"<<vectorOfEdges_->at(i).date<<"\","<<std::endl;
+      else outfiles[ctx] << "\"label\":"<<"\"\\n"<<vectorOfEdges_->at(i).date<<"\","<<std::endl;
       outfiles[ctx] << "\"context\":"<<"\""<<vectorOfEdges_->at(i).context_id<<"\","<<std::endl;
       outfiles[ctx] << "\"attributes\":"<<"\""<<vectorOfEdges_->at(i).attributes<<"\","<<std::endl;
@@ -328,5 +326,6 @@
       outfiles[ctx] << "\"from\":"<<vectorOfEdges_srv_->at(i).from<<","<<std::endl;
       outfiles[ctx] << "\"to\":"<<vectorOfEdges_srv_->at(i).to<<","<<std::endl;
-      outfiles[ctx] << "\"label\":"<<"\""<<vectorOfEdges_srv_->at(i).field->getId()<<"\\n"<<vectorOfEdges_srv_->at(i).date<<"\","<<std::endl;
+      if(vectorOfEdges_srv_->at(i).show) outfiles[ctx] << "\"label\":"<<"\""<<vectorOfEdges_srv_->at(i).field->getId()<<"\\n"<<vectorOfEdges_srv_->at(i).date<<"\","<<std::endl;
+      else                               outfiles[ctx] << "\"label\":"<<"\"\\n"<<vectorOfEdges_srv_->at(i).date<<"\","<<std::endl;
       outfiles[ctx] << "\"context\":"<<"\""<<vectorOfEdges_srv_->at(i).context_id<<"\","<<std::endl;
       outfiles[ctx] << "\"attributes\":"<<"\""<<vectorOfEdges_srv_->at(i).attributes<<"\","<<std::endl;
Index: XIOS/dev/dev_trunk_graph/src/workflow_graph.hpp
===================================================================
--- XIOS/dev/dev_trunk_graph/src/workflow_graph.hpp	(revision 2023)
+++ XIOS/dev/dev_trunk_graph/src/workflow_graph.hpp	(revision 2026)
@@ -13,38 +13,4 @@
 {
   class CField;
-
-  
-  struct graph_info_box_node
-  {
-
-    StdString filter_name;
-    int filter_class;
-    bool filter_filled;
-    int expected_entry_nb;
-    CDate date;
-    Time timestamp;
-    StdString transform_type;
-    StdString attributes;
-    StdString field_id;
-    bool inputs_complete;
-    int filter_tag;
-    int clusterID;
-    int distance;
-    StdString node_context_id;
-  };
-
-  struct graph_info_box_edge
-  {
-    int from;
-    int to;
-    StdString field_id;
-    StdString field_name;
-    StdString grid_id;
-    CDate date;
-    Time timestamp;
-    CField *field;
-    StdString attributes;
-    StdString edge_context_id;
-  };
 
   struct graph_node_object
@@ -67,4 +33,9 @@
     int context;
     StdString label_field_id;
+    bool show;
+
+
+    graph_node_object():show(true){}
+
   };
 
@@ -83,4 +54,7 @@
     StdString context_id;
     int context;
+    bool show;
+    
+    graph_edge_object():show(true){}
   };
 
@@ -103,9 +77,9 @@
       static std::vector<StdString> *vectorOfContexts_srv_; 
 
+      // these variables are not yet used
       static bool clientGraphBuilt;
       static bool serverGraphBuilt;
+      static bool build_begin;
 
-      static int filterIdGenerator;
-      static int edgeIdGenerator;
 
       static void drawWorkFlowGraph_client();
@@ -115,23 +89,19 @@
       static void addNode(StdString filterName, int filter_class, bool filter_filled, int entry_nb, CDataPacketPtr packet);
       static void addEdge(int from, int to, CDataPacketPtr packet);
-      static int getNodeSize();
+      
+      // write to file the graph info
       static void outputWorkflowGraph_client();
       static void outputWorkflowGraph_server();
+      
+      // output on screen the graph info
+      static void outputWorkflowGraph_client_stdout();
+      static void outputWorkflowGraph_server_stdout();
+
+      static int  getNodeSize();
 
 
-      static std::unordered_map <int, graph_info_box_node> *mapFilters_ptr_with_info;
 
-      static std::unordered_map <int, graph_info_box_edge> *mapFieldToFilters_ptr_with_info;
+      
 
-      static std::unordered_map <size_t, int> *mapHashFilterID_ptr;
-      
-      static std::unordered_map <StdString, int> *mapContext_ptr;
-
-
-      static bool build_begin;
-
-      static void addNode2(int nodeID, StdString filterName, int filter_class, bool filter_filled, int entry_nb, CDataPacketPtr packet);
-      static void addEdge2(int from, int to, CDataPacketPtr packet);
-      static void allocNodeEdge();
 
     private:
