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 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.cpp	(revision 2304)
@@ -16,17 +16,25 @@
 
 
-  void CGridClientServerRemoteConnector::computeConnector(void)
+  void CGridClientServerRemoteConnector::computeConnector(bool eliminateRedondant)
   {
-    auto workflowRemoteConnector=make_shared<CGridRemoteConnector>(srcWorkflowView_,dstView_,localComm_,remoteSize_) ;
-    workflowRemoteConnector->computeConnector() ;
-    computeViewDistribution() ;
+    if (eliminateRedondant)
+    {
+      auto workflowRemoteConnector=make_shared<CGridRemoteConnector>(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(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) ;
+      for(auto& rank : rankToRemove_)
+        if (workflowRemoteConnector->getRankToRemove().count(rank)!=0)
+          for(auto& element : elements_) element.erase(rank) ;
+    }
+    else 
+    {
+      computeViewDistribution() ;
+      computeConnectorRedundant() ;
+    }
   }
 
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 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/distribution/grid_client_server_remote_connector.hpp	(revision 2304)
@@ -13,5 +13,5 @@
 
       CGridClientServerRemoteConnector(vector<shared_ptr<CLocalView>>& srcView, vector<shared_ptr<CLocalView>>& worflowSrcView, vector<shared_ptr<CDistributedView>>& dstView, MPI_Comm localComm, int remoteSize) ;
-      void computeConnector(void) ;
+      void computeConnector(bool eliminateRedondant=true) ;
       vector<shared_ptr<CLocalView>> srcWorkflowView_ ;   
   } ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp	(revision 2304)
@@ -927,5 +927,5 @@
   }
  
-  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, 
+  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 
                                  shared_ptr<CScattererConnector> &scattererConnector, const string& axisId)
   {
@@ -935,5 +935,5 @@
     this->sendAllAttributesToServer(client, serverAxisId)  ;
 
-    auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndex) ;
+    auto scatteredElement = make_shared<CDistributedElement>(n_glo,globalIndexOut) ;
     scatteredElement->addFullView() ;
     scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
@@ -958,30 +958,64 @@
   
     // phase 2 send the mask : data index + mask2D
-    CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
-    CArray<bool,1> maskOut ;
-    auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
-    workflowToFull->computeConnector() ;
-    maskIn=true ;
-    workflowToFull->transfer(maskIn,maskOut,false) ;
-
-    // phase 3 : prepare grid scatterer connector to send data from client to server
-    map<int,CArray<size_t,1>> workflowGlobalIndex ;
-    map<int,CArray<bool,1>> maskOut2 ; 
-    scattererConnector->transfer(maskOut, maskOut2) ;
-    scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
-    scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
-    // create new workflow view for scattered element
-    auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
-    clientToServerElement->addFullView() ;
-    CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION);
-    CMessage message2 ;
-    message2<<serverAxisId<<2 ; 
-    clientToServerElement->sendToServer(client, event2, message2) ; 
-    clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
+    {
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+      //  prepare grid scatterer connector to send data from client to server
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      // create new workflow view for scattered element
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event2(getType(), EVENT_ID_AXIS_DISTRIBUTION);
+      CMessage message2 ;
+      message2<<serverAxisId<<2 ; 
+      clientToServerElement->sendToServer(client, event2, message2) ; 
+      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL), 
                                                                         context->getIntraComm(), client->getRemoteSize()) ;
-    clientToServerConnector_[client]->computeConnector() ;
-
-    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
-    clientFromServerConnector_[client]->computeConnector() ;
+      clientToServerConnector_[client]->computeConnector() ;
+    }
+
+    ////////////
+    // phase 3 : compute connector to receive from server
+    ////////////
+    {
+      auto scatteredElement = make_shared<CDistributedElement>(n_glo, globalIndexIn) ;
+      scatteredElement->addFullView() ;
+      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
+                                                                 context->getIntraComm(), client->getRemoteSize()) ;
+      scattererConnector->computeConnector() ;
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2, false) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event3(getType(), EVENT_ID_AXIS_DISTRIBUTION);
+      CMessage message3 ;
+      message3<<serverAxisId<<3 ; 
+      clientToServerElement->sendToServer(client, event3, message3) ; 
+
+      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
+      clientFromServerConnector_[client]->computeConnector() ;      
+    }
+
+//    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
+//    clientFromServerConnector_[client]->computeConnector() ;
 
 
@@ -1039,5 +1073,9 @@
 //      gathererConnector_ -> computeConnector() ;
     }
-  
+    else if (phasis==3)
+    {
+      elementTo_ = make_shared<CDistributedElement>(event) ;
+      elementTo_->addFullView() ;
+    }
   }
   CATCH
@@ -1053,5 +1091,5 @@
     serverFromClientConnector_->computeConnector() ;
       
-    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL),
+    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL),
                                                                 context->getIntraComm(), client->getRemoteSize()) ;
     serverToClientConnector_->computeConnector() ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 2304)
@@ -248,6 +248,6 @@
        public:
          void computeRemoteElement(CContextClient* client, EDistributionType) ;
-         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, shared_ptr<CScattererConnector>& scattererConnector,
-                                 const string& axisId="") ;
+         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 
+                                 shared_ptr<CScattererConnector>& scattererConnector, const string& axisId="") ;
 
          static void recvAxisDistribution(CEventServer& event) ;
@@ -277,4 +277,5 @@
        private:
          shared_ptr<CScattererConnector> serverToClientConnector_ = nullptr ;
+         shared_ptr<CDistributedElement> elementTo_ ;
        public: 
          shared_ptr<CScattererConnector> getServerToClientConnector(void) { return serverToClientConnector_ ;} 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 2304)
@@ -2003,5 +2003,5 @@
  
 
-  void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndex,
+  void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn,
                                    shared_ptr<CScattererConnector> &scattererConnector, const string& domainId)
   TRY
@@ -2012,5 +2012,5 @@
     this->sendAllAttributesToServer(client, serverDomainId)  ;
 
-    auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndex) ;
+    auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexOut) ;
     scatteredElement->addFullView() ;
     scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
@@ -2036,32 +2036,62 @@
   
     // phase 2 send the mask : data index + mask2D
-    CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
-    CArray<bool,1> maskOut ;
-    auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
-    workflowToFull->computeConnector() ;
-    maskIn=true ;
-    workflowToFull->transfer(maskIn,maskOut,false) ;
-
-
-    // phase 3 : prepare grid scatterer connector to send data from client to server
-    map<int,CArray<size_t,1>> workflowGlobalIndex ;
-    map<int,CArray<bool,1>> maskOut2 ; 
-    scattererConnector->transfer(maskOut, maskOut2, false) ;
-    scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
-    scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
-    // create new workflow view for scattered element
-    auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
-    clientToServerElement->addFullView() ;
-    CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
-    CMessage message2 ;
-    message2<<serverDomainId<<2 ; 
-    clientToServerElement->sendToServer(client, event2, message2) ; 
-    clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),
+    {
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+
+      // prepare grid scatterer connector to send data from client to server
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2, false) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      // create new workflow view for scattered element
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event2(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
+      CMessage message2 ;
+      message2<<serverDomainId<<2 ; 
+      clientToServerElement->sendToServer(client, event2, message2) ; 
+      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),
                                                                         context->getIntraComm(), client->getRemoteSize()) ;
     clientToServerConnector_[client]->computeConnector() ;
-
-    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
-    clientFromServerConnector_[client]->computeConnector() ;
-
+    }
+    ////////////
+    // phase 3 : compute connector to receive from server
+    ////////////
+    {
+      auto scatteredElement = make_shared<CDistributedElement>(ni_glo*nj_glo, globalIndexIn) ;
+      scatteredElement->addFullView() ;
+      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
+                                                                 context->getIntraComm(), client->getRemoteSize()) ;
+      scattererConnector->computeConnector() ;
+
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2, false) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event3(getType(), EVENT_ID_DOMAIN_DISTRIBUTION);
+      CMessage message3 ;
+      message3<<serverDomainId<<3 ; 
+      clientToServerElement->sendToServer(client, event3, message3) ; 
+
+      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
+      clientFromServerConnector_[client]->computeConnector() ;      
+    }
   }
   CATCH
@@ -2116,9 +2146,11 @@
     else if (phasis==2)
     {
-//      delete gathererConnector_ ;
       elementFrom_ = make_shared<CDistributedElement>(event) ;
       elementFrom_->addFullView() ;
-//      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
-//      gathererConnector_ -> computeConnector() ;
+    }
+    else if (phasis==3)
+    {
+      elementTo_ = make_shared<CDistributedElement>(event) ;
+      elementTo_->addFullView() ;
     }
   }
@@ -2137,5 +2169,5 @@
     serverFromClientConnector_->computeConnector() ;
       
-    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL),
+    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL),
                                                                 context->getIntraComm(), client->getRemoteSize()) ;
     serverToClientConnector_->computeConnector() ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 2304)
@@ -309,6 +309,6 @@
        public:
          void computeRemoteElement(CContextClient* client, EDistributionType) ;
-         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, shared_ptr<CScattererConnector> &scattererConnector,
-                                 const string& domainId="") ;
+         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn, 
+                                 shared_ptr<CScattererConnector> &scattererConnector, const string& domainId="") ;
 
          static void recvDomainDistribution(CEventServer& event) ;
@@ -340,5 +340,6 @@
 
        private:
-         shared_ptr<CScattererConnector>  serverToClientConnector_ = nullptr ;
+         shared_ptr<CScattererConnector> serverToClientConnector_ = nullptr ;
+         shared_ptr<CDistributedElement> elementTo_ ;
        public: 
          shared_ptr<CScattererConnector> getServerToClientConnector(void) { return serverToClientConnector_ ;} 
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 2304)
@@ -1418,5 +1418,5 @@
     else sendGridToCouplerOut_done_.insert(client) ;
     this->sendAllAttributesToServer(client, getCouplingAlias(fieldId));
-    distributeGridToServer(client,fieldId) ;
+    distributeGridToServer(client, fieldId) ;
   }
 
@@ -1472,5 +1472,9 @@
     // CGridClientServerRemoteConnector : workflowView is added to avoid spurious optimisation with only the fullview
     auto gridRemoteConnector = make_shared<CGridClientServerRemoteConnector>(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ;
-    gridRemoteConnector->computeConnector() ;
+    gridRemoteConnector->computeConnector(true) ;
+    
+    auto gridRemoteConnectorIn = make_shared<CGridClientServerRemoteConnector>(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ;
+    gridRemoteConnectorIn->computeConnector(false) ;
+
     
     vector<shared_ptr<CScattererConnector>> scattererConnectors ;
@@ -1481,9 +1485,10 @@
       { 
         CDomain* domain = (CDomain*) elements[i].ptr ;
-        if (isCoupling) domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector,  domain->getCouplingAlias(fieldId,i)) ;
+        if (isCoupling) domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i),
+                                                   scattererConnector,  domain->getCouplingAlias(fieldId,i)) ;
         else 
         {
           sendAddDomain(domain->getId(),client) ;
-          domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector) ;
+          domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ;
         }
         scattererConnectors.push_back(scattererConnector) ;
@@ -1492,9 +1497,10 @@
       {
         CAxis* axis = (CAxis*) elements[i].ptr ;
-        if (isCoupling) axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector,  axis->getCouplingAlias(fieldId,i)) ;
+        if (isCoupling) axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i),
+                                                 scattererConnector,  axis->getCouplingAlias(fieldId,i)) ;
         else 
         {
           sendAddAxis(axis->getId(),client) ;
-          axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector) ;
+          axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ;
         }
         scattererConnectors.push_back(scattererConnector) ;
@@ -1503,9 +1509,10 @@
       {
         CScalar* scalar = (CScalar*) elements[i].ptr ;
-        if (isCoupling) scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector,  scalar->getCouplingAlias(fieldId,i)) ;
+        if (isCoupling) scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i),
+                                                   scattererConnector,  scalar->getCouplingAlias(fieldId,i)) ;
         else 
         {
           sendAddScalar(scalar->getId(),client) ;
-          scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), scattererConnector) ;
+          scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ;
         }
         scattererConnectors.push_back(scattererConnector) ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.cpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.cpp	(revision 2304)
@@ -420,5 +420,5 @@
   }
  
-  void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, 
+  void CScalar::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut,  std::map<int, CArray<size_t,1>>& globalIndexIn, 
                                    shared_ptr<CScattererConnector> &scattererConnector, const string& scalarId)
   {
@@ -428,5 +428,5 @@
     this->sendAllAttributesToServer(client, serverScalarId)  ;
 
-    auto scatteredElement = make_shared<CDistributedElement>(1,globalIndex) ;
+    auto scatteredElement = make_shared<CDistributedElement>(1,globalIndexOut) ;
     scatteredElement->addFullView() ;
     scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
@@ -451,31 +451,62 @@
   
     // phase 2 send the mask : data index + mask2D
-    CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
-    CArray<bool,1> maskOut ;
-    auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
-    workflowToFull->computeConnector() ;
-    maskIn=true ;
-    workflowToFull->transfer(maskIn,maskOut,false) ;
-
-    // phase 3 : prepare grid scatterer connector to send data from client to server
-    map<int,CArray<size_t,1>> workflowGlobalIndex ;
-    map<int,CArray<bool,1>> maskOut2 ; 
-    scattererConnector->transfer(maskOut, maskOut2) ;
-    scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
-    scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
-    // create new workflow view for scattered element
-    auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
-    clientToServerElement->addFullView() ;
-    CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION);
-    CMessage message2 ;
-    message2<<serverScalarId<<2 ; 
-    clientToServerElement->sendToServer(client, event2, message2) ; 
-    clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),
-                                                                        context->getIntraComm(), client->getRemoteSize()) ;
-    clientToServerConnector_[client]->computeConnector() ;
-
-    clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
-    clientFromServerConnector_[client]->computeConnector() ;
-
+    {
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+      // prepare grid scatterer connector to send data from client to server
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      // create new workflow view for scattered element
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event2(getType(), EVENT_ID_SCALAR_DISTRIBUTION);
+      CMessage message2 ;
+      message2<<serverScalarId<<2 ; 
+      clientToServerElement->sendToServer(client, event2, message2) ; 
+      clientToServerConnector_[client] = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), clientToServerElement->getView(CElementView::FULL),
+                                                                          context->getIntraComm(), client->getRemoteSize()) ;
+      clientToServerConnector_[client]->computeConnector() ;
+    }
+
+    ////////////
+    // phase 3 : compute connector to receive from server
+    ////////////
+    {
+      auto scatteredElement = make_shared<CDistributedElement>(1, globalIndexIn) ;
+      scatteredElement->addFullView() ;
+      auto scattererConnector = make_shared<CScattererConnector>(localElement_->getView(CElementView::FULL), scatteredElement->getView(CElementView::FULL), 
+                                                                 context->getIntraComm(), client->getRemoteSize()) ;
+      scattererConnector->computeConnector() ;
+ 
+      CArray<bool,1> maskIn(localElement_->getView(CElementView::WORKFLOW)->getSize());
+      CArray<bool,1> maskOut ;
+      auto workflowToFull = make_shared<CLocalConnector>(localElement_->getView(CElementView::WORKFLOW), localElement_->getView(CElementView::FULL)) ;
+      workflowToFull->computeConnector() ;
+      maskIn=true ;
+      workflowToFull->transfer(maskIn,maskOut,false) ;
+
+      map<int,CArray<size_t,1>> workflowGlobalIndex ;
+      map<int,CArray<bool,1>> maskOut2 ; 
+      scattererConnector->transfer(maskOut, maskOut2, false) ;
+      scatteredElement->addView(CElementView::WORKFLOW, maskOut2) ;
+      scatteredElement->getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
+      auto clientToServerElement = make_shared<CDistributedElement>(scatteredElement->getGlobalSize(), workflowGlobalIndex) ;
+      clientToServerElement->addFullView() ;
+      CEventClient event3(getType(), EVENT_ID_SCALAR_DISTRIBUTION);
+      CMessage message3 ;
+      message3<<serverScalarId<<3 ; 
+      clientToServerElement->sendToServer(client, event3, message3) ; 
+
+      clientFromServerConnector_[client] = make_shared<CGathererConnector>(clientToServerElement->getView(CElementView::FULL), localElement_->getView(CElementView::WORKFLOW));
+      clientFromServerConnector_[client]->computeConnector() ;      
+    }
   }
   
@@ -518,4 +549,9 @@
 //      gathererConnector_ =  make_shared<CGathererConnector>(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
 //      gathererConnector_ -> computeConnector() ;
+    }
+    else if (phasis==3)
+    {
+      elementTo_ = make_shared<CDistributedElement>(event) ;
+      elementTo_->addFullView() ;
     }
   }
@@ -532,5 +568,5 @@
     serverFromClientConnector_->computeConnector() ;
       
-    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementFrom_->getView(CElementView::FULL),
+    serverToClientConnector_ = make_shared<CScattererConnector>(localElement_->getView(CElementView::WORKFLOW), elementTo_->getView(CElementView::FULL),
                                                                 context->getIntraComm(), client->getRemoteSize()) ;
     serverToClientConnector_->computeConnector() ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp	(revision 2303)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/scalar.hpp	(revision 2304)
@@ -200,6 +200,6 @@
     public:
       void computeRemoteElement(CContextClient* client, EDistributionType) ;
-      void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, shared_ptr<CScattererConnector> &scattererConnector,
-                                 const string& scalarId="") ;
+      void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndexOut, std::map<int, CArray<size_t,1>>& globalIndexIn,
+                              shared_ptr<CScattererConnector> &scattererConnector, const string& scalarId="") ;
 
       static void recvScalarDistribution(CEventServer& event) ;
@@ -231,4 +231,5 @@
     private:
      shared_ptr<CScattererConnector>  serverToClientConnector_ = nullptr ;
+     shared_ptr<CDistributedElement> elementTo_ ;
     public: 
       shared_ptr<CScattererConnector> getServerToClientConnector(void) { return serverToClientConnector_ ;} 
