Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.cpp	(revision 2236)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.cpp	(revision 2236)
@@ -0,0 +1,32 @@
+#include "grid_client_server_remote_connector.hpp"
+
+namespace xios
+{
+  /** 
+   * \brief class constructor. 
+   * \param srcView List of sources views.
+   * \param dstView List of remotes views.
+   * \param localComm Local MPI communicator
+   * \param remoteSize Size of the remote communicator
+   */ 
+  CGridClientServerRemoteConnector::CGridClientServerRemoteConnector(vector<CLocalView*>& srcFullView, vector<CLocalView*>& srcWorkflowView, vector<CDistributedView*>& dstView, MPI_Comm localComm, int remoteSize) 
+                       : CGridRemoteConnector(srcFullView, dstView, localComm, remoteSize) , srcWorkflowView_(srcWorkflowView)
+  {}
+
+
+  void CGridClientServerRemoteConnector::computeConnector(void)
+  {
+    CGridRemoteConnector workflowRemoteConnector(srcWorkflowView_,dstView_,localComm_,remoteSize_) ;
+    workflowRemoteConnector.computeConnector() ;
+    computeViewDistribution() ;
+    
+    for(int i=0;i<srcView_.size();i++) isSrcViewDistributed_[i] =  isSrcViewDistributed_[i] || workflowRemoteConnector.getIsSrcViewDistributed()[i]  ;
+    computeConnectorMethods() ;
+    computeRedondantRanks() ;
+
+    for(auto& rank : rankToRemove_)
+      if (workflowRemoteConnector.getRankToRemove().count(rank)!=0)
+        for(auto& element : elements_) element.erase(rank) ;
+  }
+
+}
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.hpp	(revision 2236)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.hpp	(revision 2236)
@@ -0,0 +1,21 @@
+#ifndef __GRID_CLIENT_SERVER_REMOTE_CONNECTOR_HPP__
+#define __GRID_CLIENT_SERVER_REMOTE_CONNECTOR_HPP__
+
+#include "grid_remote_connector.hpp"
+
+namespace xios
+{
+ 
+  class CGridClientServerRemoteConnector : public CGridRemoteConnector
+  {
+
+    public:
+
+      CGridClientServerRemoteConnector(vector<CLocalView*>& srcView, vector<CLocalView*>& worflowSrcView, vector<CDistributedView*>& dstView, MPI_Comm localComm, int remoteSize) ;
+      void computeConnector(void) ;
+      vector<CLocalView*> srcWorkflowView_ ;   
+  } ;
+
+}
+
+#endif
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.cpp	(revision 2235)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.cpp	(revision 2236)
@@ -111,4 +111,17 @@
 /**
   * \brief Compute the connector, i.e. compute the \b elements_ attribute. 
+  * \detail Depending of the distributions of the view computed in the computeViewDistribution() call, the connector is computed in computeConnectorMethods(), and to achieve better optimisation
+  *         some redondant ranks can be removed from the elements_ map.
+  */
+  void CGridRemoteConnector::computeConnector(void)
+  {
+    computeViewDistribution() ;
+    computeConnectorMethods() ;
+    computeRedondantRanks() ; 
+    for(auto& rank : rankToRemove_)
+      for(auto& element : elements_) element.erase(rank) ;
+  }
+/**
+  * \brief Compute the connector, i.e. compute the \b elements_ attribute. 
   * \detail In order to achive better optimisation,
   *         we distingute the case when the grid is not distributed on source grid (\bcomputeSrcNonDistributed), 
@@ -120,7 +133,6 @@
   *         redondantly the the remote servers
   */
-  void CGridRemoteConnector::computeConnector(void)
-  {
-    computeViewDistribution() ;
+  void CGridRemoteConnector::computeConnectorMethods(void)
+  {
     vector<CLocalView*> srcView ;
     vector<CDistributedView*> dstView ;
@@ -129,8 +141,8 @@
     
     bool srcViewsNonDistributed=true ;
-    for(int i=0;i<srcView_.size();i++) srcViewsNonDistributed &= !isSrcViewDistributed_[i]  ;
+    for(int i=0;i<srcView_.size();i++) srcViewsNonDistributed = srcViewsNonDistributed && !isSrcViewDistributed_[i]  ;
     
     bool dstViewsNonDistributed=true ;
-    for(int i=0;i<dstView_.size();i++) dstViewsNonDistributed &= !isDstViewDistributed_[i] ;
+    for(int i=0;i<dstView_.size();i++) dstViewsNonDistributed = dstViewsNonDistributed && !isDstViewDistributed_[i] ;
     
     if (srcViewsNonDistributed) 
@@ -184,5 +196,4 @@
     }
 
-    removeRedondantRanks() ;
   }
 
@@ -570,10 +581,11 @@
 
  /**
-  * \brief Once the connector is computed (compute \b elements_), redondant data can be send to the server. 
+  * \brief Once the connector is computed (compute \b elements_), redondant data can be avoid to be sent to the server. 
+  *        This call compute the redondant rank and store them in \b rankToRemove_ attribute.
   *        The goal of this method is to make a hash of each block of indice that determine wich data to send to a 
   *        of a specific server rank using a hash method. So data to send to a rank is associated to a hash.
   *        After we compare hash between local rank and remove redondant data corresponding to the same hash.
   */
-  void CGridRemoteConnector::removeRedondantRanks(void)
+  void CGridRemoteConnector::computeRedondantRanks(void)
   {
     int commRank ;
@@ -635,12 +647,7 @@
       // only the process with the lowest rank get in charge of sendinf data to remote server
       for(int rank : ranks) if (commRank>rank) first=false ;
-      if (!first)
-      {
-        int rankToRemove=hashRank[hash] ;
-        for(auto& element : elements_) element.erase(rankToRemove) ;
-      }
-    }
-
-
-  }
+      if (!first) rankToRemove_.insert(hashRank[hash]) ;
+    }
+  }
+
 }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.hpp	(revision 2235)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_remote_connector.hpp	(revision 2236)
@@ -22,12 +22,16 @@
       void computeViewDistribution(void) ;
       void computeConnector(void) ;
+      void computeConnectorMethods(void) ;
       void computeGenericMethod(vector<CLocalView*>& srcView, vector<CDistributedView*>& dstView, vector<int>& indElements) ;
       void computeSrcDstNonDistributed(int i, map<int,bool>& ranks) ;
       void computeDstNonDistributed(int i, map<int,bool>& ranks) ;
       void computeSrcNonDistributed(int i) ;
-      void removeRedondantRanks(void) ;
+      void computeRedondantRanks(void) ;
       std::map<int, CArray<size_t,1>>& getDistributedGlobalIndex(int pos) { return elements_[pos] ;} 
-
-    private:
+      const vector<bool>& getIsSrcViewDistributed(void) { return isSrcViewDistributed_ ;}
+      const vector<bool>& getIsDstViewDistributed(void) { return isDstViewDistributed_ ;}
+      const set<int>& getRankToRemove(void) {return rankToRemove_;} 
+    
+    protected:
   
     /** 
@@ -76,4 +80,9 @@
        */
       vector<bool> isDstViewDistributed_ ;
+
+      /**
+      /* Redondant ranks of the \b elements_ are stored there by calling computeRedondantRanks(), to be removed latter or to be retrieve from elsewhere. 
+       */
+      set<int> rankToRemove_ ;
       
     
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2235)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2236)
@@ -18,5 +18,5 @@
 #include "server.hpp"
 #include "distribution_type.hpp"
-#include "grid_remote_connector.hpp"
+#include "grid_client_server_remote_connector.hpp"
 #include "grid_elements.hpp"
 #include "grid_local_view.hpp"
@@ -1429,4 +1429,5 @@
     
     vector<CLocalView*> localViews ;
+    vector<CLocalView*> workflowView ;
     vector<CDistributedView*> remoteViews ;
 
@@ -1439,4 +1440,5 @@
          remoteViews.push_back(domain->getRemoteElement(client)->getView(CElementView::FULL)) ;
          localViews.push_back(domain->getLocalView(CElementView::FULL)) ;
+         workflowView.push_back(domain->getLocalView(CElementView::WORKFLOW)) ;
       }
       else if (elements[i].type==TYPE_AXIS)
@@ -1446,4 +1448,5 @@
         remoteViews.push_back(axis->getRemoteElement(client)->getView(CElementView::FULL)) ;
         localViews.push_back(axis->getLocalView(CElementView::FULL)) ;
+        workflowView.push_back(axis->getLocalView(CElementView::WORKFLOW)) ;
       }
       else if (elements[i].type==TYPE_SCALAR)
@@ -1453,7 +1456,10 @@
         remoteViews.push_back(scalar->getRemoteElement(client)->getView(CElementView::FULL)) ;
         localViews.push_back(scalar->getLocalView(CElementView::FULL)) ;
-      }
-    }
-    CGridRemoteConnector gridRemoteConnector(localViews, remoteViews, context->getIntraComm(), client->getRemoteSize()) ;
+        workflowView.push_back(scalar->getLocalView(CElementView::WORKFLOW)) ;
+      }
+    }
+    
+    // CGridClientServerRemoteConnector : workflowView is added to avoid spurious optimisation with only the fullview
+    CGridClientServerRemoteConnector gridRemoteConnector(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ;
     gridRemoteConnector.computeConnector() ;
     
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/test/generic_testcase.f90
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/test/generic_testcase.f90	(revision 2235)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/test/generic_testcase.f90	(revision 2236)
@@ -204,4 +204,6 @@
     LOGICAL :: ok_other_field0D_W, ok_other_field2D_W, ok_other_field3D_W, ok_other_pressure_W, ok_other_field2D_sub_W, ok_other_field3D_sub_W,ok_other_field3D_recv_W, ok_other_field3D_send_W
     LOGICAL :: ok_other_field_XW, ok_other_field_YW, ok_other_field_XYW, ok_other_field_ZW, ok_other_field_XYZW, ok_other_field_XZW, ok_other_field_YZW
+
+    TYPE(xios_domain)  :: domain_handle
     
       !! XIOS Initialization (get the local communicator)
@@ -635,5 +637,5 @@
     CALL xios_close_context_definition()
     CALL xios_set_current_context(trim(model_id))
-
+!    CALL xios_get_handle("field3D::domain",domain_handle) 
     
     DO while ( cdate <= edate )
