Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.cpp	(revision 1956)
@@ -99,12 +99,19 @@
 
    /*!
-    * Test whether the data defined on the axis can be outputted in a compressed way.
-    *
-    * \return true if and only if a mask was defined for this axis
+    * Compute if the axis can be ouput in a compressed way.
+    * In this case the workflow view on server side must be the same
+    * than the full view for all context rank. The result is stored on
+    * internal isCompressible_ attribute.
     */
-   bool CAxis::isCompressible(void) const
-   TRY
-   {
-      return isCompressible_;
+   void CAxis::computeIsCompressible(void)
+   TRY
+   {
+     // mesh is compressible contains some masked or indexed value, ie if full view is different of workflow view.
+     // But now assume that the size of the 2 view must be equal for everybody. True on server side
+     int isSameView = getLocalView(CElementView::FULL)->getSize() ==  getLocalView(CElementView::WORKFLOW)->getSize();
+     MPI_Allreduce(MPI_IN_PLACE, &isSameView, 1, MPI_INT, MPI_LAND, CContext::getCurrent()->getIntraComm()) ;
+     if (isSameView) isCompressible_ = false ;
+     else isCompressible_ = true ;
+     isCompressibleComputed_=true ;
    }
    CATCH
@@ -462,15 +469,5 @@
   CATCH_DUMP_ATTR
 
-  /*!
-    Check whether we can do compressed output
-  */
-  void CAxis::checkEligibilityForCompressedOutput()
-  TRY
-  {
-    // We don't check if the mask is valid here, just if a mask has been defined at this point.
-    isCompressible_ = !mask.isEmpty();
-  }
-  CATCH_DUMP_ATTR
-
+ 
   /*!
     Dispatch event from the lower communication layer then process event according to its type
@@ -1647,5 +1644,6 @@
   }
  
-  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, const string& axisId)
+  void CAxis::distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, 
+                                 CScattererConnector* &scattererConnector, const string& axisId)
   {
     string serverAxisId = axisId.empty() ? this->getId() : axisId ;
@@ -1656,7 +1654,7 @@
     CDistributedElement scatteredElement(n_glo,globalIndex) ;
     scatteredElement.addFullView() ;
-    CScattererConnector scattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), 
-                                           context->getIntraComm(), client->getRemoteSize()) ;
-    scattererConnector.computeConnector() ;
+    scattererConnector = new CScattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), 
+                                                 context->getIntraComm(), client->getRemoteSize()) ;
+    scattererConnector->computeConnector() ;
     
     // phase 0
@@ -1672,7 +1670,7 @@
     CMessage message1 ;
     message1<<serverAxisId<<1<<localElement_->getView(CElementView::FULL)->getGlobalSize() ; 
-    scattererConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ;
-
-    sendDistributedAttributes(client, scattererConnector, axisId) ;
+    scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ;
+
+    sendDistributedAttributes(client, *scattererConnector, axisId) ;
   
     // phase 2 send the mask : data index + mask2D
@@ -1687,5 +1685,5 @@
     map<int,CArray<size_t,1>> workflowGlobalIndex ;
     map<int,CArray<bool,1>> maskOut2 ; 
-    scattererConnector.transfer(maskOut, maskOut2) ;
+    scattererConnector->transfer(maskOut, maskOut2) ;
     scatteredElement.addView(CElementView::WORKFLOW, maskOut2) ;
     scatteredElement.getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
@@ -1752,9 +1750,9 @@
     else if (phasis==2)
     {
-      delete gathererConnector_ ;
+//      delete gathererConnector_ ;
       elementFrom_ = new  CDistributedElement(event) ;
       elementFrom_->addFullView() ;
-      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
-      gathererConnector_ -> computeConnector() ;
+//      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
+//      gathererConnector_ -> computeConnector() ;
     }
   
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/axis.hpp	(revision 1956)
@@ -88,5 +88,18 @@
          bool isWrittenCompressed(const StdString& filename) const;
          bool isDistributed(void) const;
-         bool isCompressible(void) const;
+        
+        public:
+        /*!
+            \brief return if the axis can be written or not in a compressed way.
+            ie if there are some masked or indexed point on the domain. Valid only on server side.
+            \return true if domain can be writtedn in a compressed way
+         */ 
+         bool isCompressible(void) { if (!isCompressibleComputed_) computeIsCompressible() ; return isCompressible_ ;} 
+        private:
+         bool isCompressible_ ; /** specify if the domain can be written in a compressed way */ 
+         bool isCompressibleComputed_=false ; /** Indicate if compressability has been computed*/
+         void computeIsCompressible() ;
+        
+        public:
 
          /// Mutateur ///
@@ -120,5 +133,4 @@
                                     CServerDistributionDescription::ServerDistributionType disType = CServerDistributionDescription::BAND_DISTRIBUTION);
 
-         void checkEligibilityForCompressedOutput();
          size_t getGlobalWrittenSize(void) ;
 
@@ -213,6 +225,4 @@
          std::set<StdString> relFiles, relFilesCompressed;
          TransMapTypes transformationMap_;         
-         //! True if and only if the data defined on the axis can be outputted in a compressed way
-         bool isCompressible_;
 
          std::map<int, map<int,int> > nbSenders; // Mapping of number of communicating client to a server
@@ -254,5 +264,6 @@
        public:
          void computeRemoteElement(CContextClient* client, EDistributionType) ;
-         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, const string& axisId="") ;
+         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, CScattererConnector* &scattererConnector,
+                                 const string& axisId="") ;
 
          static void recvAxisDistribution(CEventServer& event) ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1956)
@@ -2403,5 +2403,5 @@
       // Check if some axis, domains or grids are eligible to for compressed indexed output.
       // Warning: This must be done after solving the inheritance and before the rest of post-processing
-      checkAxisDomainsGridsEligibilityForCompressedOutput();      // only for field written on IO_SERVER service ????
+      //checkAxisDomainsGridsEligibilityForCompressedOutput();      // only for field written on IO_SERVER service ????
 
       // Check if some automatic time series should be generated
@@ -2539,24 +2539,5 @@
    CATCH_DUMP_ATTR
 
-   //! Client side: Check if the defined axis, domains and grids are eligible for compressed indexed output
-   void CContext::checkAxisDomainsGridsEligibilityForCompressedOutput()
-   TRY
-   {
-     if (!(serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER)) return;
-
-     const vector<CAxis*> allAxis = CAxis::getAll();
-     for (vector<CAxis*>::const_iterator it = allAxis.begin(); it != allAxis.end(); it++)
-       (*it)->checkEligibilityForCompressedOutput();
-
-     const vector<CDomain*> allDomains = CDomain::getAll();
-     for (vector<CDomain*>::const_iterator it = allDomains.begin(); it != allDomains.end(); it++)
-       (*it)->checkEligibilityForCompressedOutput();
-
-     const vector<CGrid*> allGrids = CGrid::getAll();
-     for (vector<CGrid*>::const_iterator it = allGrids.begin(); it != allGrids.end(); it++)
-       (*it)->checkEligibilityForCompressedOutput();
-   }
-   CATCH_DUMP_ATTR
-
+  
    //! Client side: Prepare the timeseries by adding the necessary files
    void CContext::prepareTimeseries()
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1956)
@@ -140,6 +140,5 @@
          void createFileHeader(void);
          void initReadFiles(void);
-         void checkAxisDomainsGridsEligibilityForCompressedOutput();
-         void prepareTimeseries(void);
+        void prepareTimeseries(void);
          void solveOnlyRefOfEnabledFields(void);         
          void buildFilterGraphOfEnabledFields();
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.cpp	(revision 1956)
@@ -246,12 +246,19 @@
 
    /*!
-    * Test whether the data defined on the domain can be outputted in a compressed way.
-    *
-    * \return true if and only if a mask was defined for this domain
+    * Compute if the domain can be ouput in a compressed way.
+    * In this case the workflow view on server side must be the same
+    * than the full view for all context rank. The result is stored on
+    * internal isCompressible_ attribute.
     */
-   bool CDomain::isCompressible(void) const
-   TRY
-   {
-      return isCompressible_;
+   void CDomain::computeIsCompressible(void)
+   TRY
+   {
+     // mesh is compressible contains some masked or indexed value, ie if full view is different of workflow view.
+     // But now assume that the size of the 2 view must be equal for everybody. True on server side
+     int isSameView = getLocalView(CElementView::FULL)->getSize() ==  getLocalView(CElementView::WORKFLOW)->getSize();
+     MPI_Allreduce(MPI_IN_PLACE, &isSameView, 1, MPI_INT, MPI_LAND, CContext::getCurrent()->getIntraComm()) ;
+     if (isSameView) isCompressible_ = false ;
+     else isCompressible_ = true ;
+     isCompressibleComputed_=true ;
    }
    CATCH
@@ -1307,11 +1314,4 @@
    CATCH_DUMP_ATTR
 
-   void CDomain::checkEligibilityForCompressedOutput(void)
-   TRY
-   {
-     // We don't check if the mask or the indexes are valid here, just if they have been defined at this point.
-     isCompressible_ = !mask_1d.isEmpty() || !mask_2d.isEmpty() || !data_i_index.isEmpty();
-   }
-   CATCH_DUMP_ATTR
 
    //----------------------------------------------------------------
@@ -2295,5 +2295,6 @@
  
 
-  void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndex, const string& domainId)
+  void CDomain::distributeToServer(CContextClient* client, map<int, CArray<size_t,1>>& globalIndex,
+                                   CScattererConnector* &scattererConnector, const string& domainId)
   TRY
   {
@@ -2305,7 +2306,7 @@
     CDistributedElement scatteredElement(ni_glo*nj_glo, globalIndex) ;
     scatteredElement.addFullView() ;
-    CScattererConnector scattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), 
+    scattererConnector = new CScattererConnector(localElement_->getView(CElementView::FULL), scatteredElement.getView(CElementView::FULL), 
                                            context->getIntraComm(), client->getRemoteSize()) ;
-    scattererConnector.computeConnector() ;
+    scattererConnector->computeConnector() ;
 
     // phase 0
@@ -2321,7 +2322,7 @@
     CMessage message1 ;
     message1<<serverDomainId<<1<<localElement_->getView(CElementView::FULL)->getGlobalSize() ; 
-    scattererConnector.transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ;
+    scattererConnector->transfer(localElement_->getView(CElementView::FULL)->getGlobalIndex(),client,event1,message1) ;
     
-    sendDistributedAttributes(client, scattererConnector, domainId) ;
+    sendDistributedAttributes(client, *scattererConnector, domainId) ;
 
   
@@ -2338,5 +2339,5 @@
     map<int,CArray<size_t,1>> workflowGlobalIndex ;
     map<int,CArray<bool,1>> maskOut2 ; 
-    scattererConnector.transfer(maskOut, maskOut2, false) ;
+    scattererConnector->transfer(maskOut, maskOut2, false) ;
     scatteredElement.addView(CElementView::WORKFLOW, maskOut2) ;
     scatteredElement.getView(CElementView::WORKFLOW)->getGlobalIndexView(workflowGlobalIndex) ;
@@ -2407,9 +2408,9 @@
     else if (phasis==2)
     {
-      delete gathererConnector_ ;
+//      delete gathererConnector_ ;
       elementFrom_ = new  CDistributedElement(event) ;
       elementFrom_->addFullView() ;
-      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
-      gathererConnector_ -> computeConnector() ;
+//      gathererConnector_ =  new CGathererConnector(elementFrom_->getView(CElementView::FULL), localElement_->getView(CElementView::FULL)) ;
+//      gathererConnector_ -> computeConnector() ;
     }
   }
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/domain.hpp	(revision 1956)
@@ -87,5 +87,4 @@
          void checkAttributesOnClient();
          void checkAttributesOnClientAfterTransformation();
-         void checkEligibilityForCompressedOutput(void);
 
          void sendCheckedAttributes();
@@ -112,6 +111,18 @@
          bool isEmpty(void) const;
          bool isDistributed(void) const;
-         bool isCompressible(void) const; 
- 
+
+        public :
+         /*!
+            \brief return if the domain can be written or not in a compressed way.
+            ie if there are some masked or indexed point on the domain. Valid only on server side.
+            \return true if domain can be writtedn in a compressed way
+         */ 
+         bool isCompressible(void) { if (!isCompressibleComputed_) computeIsCompressible() ; return isCompressible_ ;} 
+        private :
+         bool isCompressible_ ; /** specify if the domain can be written in a compressed way */ 
+         bool isCompressibleComputed_=false ; /** Indicate if compressability has been computed*/
+         void computeIsCompressible() ;
+
+      public :
          std::vector<int> getNbGlob();
          bool isEqual(CDomain* domain);
@@ -296,6 +307,4 @@
          std::map<int, std::vector<int> > connectedServerRank_;
 
-         //! True if and only if the data defined on the domain can be outputted in a compressed way
-         bool isCompressible_;
          bool isRedistributed_;
          TransMapTypes transformationMap_;         
@@ -332,5 +341,6 @@
        public:
          void computeRemoteElement(CContextClient* client, EDistributionType) ;
-         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, const string& domainId="") ;
+         void distributeToServer(CContextClient* client, std::map<int, CArray<size_t,1>>& globalIndex, CScattererConnector* &scattererConnector,
+                                 const string& domainId="") ;
 
          static void recvDomainDistribution(CEventServer& event) ;
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 1950)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/node/grid.cpp	(revision 1956)
@@ -2681,4 +2681,5 @@
     
     vector<CScattererConnector*> scattererConnectors ;
+    CScattererConnector* scattererConnector;
     for(int i=0 ; i<elements.size() ; i++)
     {
@@ -2687,6 +2688,6 @@
          CDomain* domain = (CDomain*) elements[i].ptr ;
          sendAddDomain(domain->getId(),client) ;
-         domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ;
-         scattererConnectors.push_back(domain->getClientToServerConnector(client)) ;
+         domain->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ;
+         scattererConnectors.push_back(scattererConnector) ;
       }
       else if (elements[i].type==TYPE_AXIS)
@@ -2694,6 +2695,6 @@
         CAxis* axis = (CAxis*) elements[i].ptr ;
         sendAddAxis(axis->getId(),client) ;
-        axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ;
-        scattererConnectors.push_back(axis->getClientToServerConnector(client)) ;
+        axis->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ;
+        scattererConnectors.push_back(scattererConnector) ;
       }
       else if (elements[i].type==TYPE_SCALAR)
@@ -2701,6 +2702,6 @@
         CScalar* scalar = (CScalar*) elements[i].ptr ;
         sendAddScalar(scalar->getId(),client) ;
-        scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i)) ;
-        scattererConnectors.push_back(scalar->getClientToServerConnector(client)) ;
+        scalar->distributeToServer(client, gridRemoteConnector.getDistributedGlobalIndex(i), scattererConnector) ;
+        scattererConnectors.push_back(scattererConnector) ;
       }
     }
@@ -2717,5 +2718,5 @@
     message<<getId() ; 
     gridScattererConnector.transfer(maskOut, client, event, message) ;
-
+    for(auto& it : scattererConnectors) delete it ;
 
     vector<CScattererConnector*> clientToServerConnectors ;
@@ -2800,5 +2801,5 @@
   void CGrid::sendGridToCouplerOut(CContextClient* client, const string& fieldId)
   {
-    if (sendGridToCouplerOut_done_.count(client)!=0) return ;
+/*    if (sendGridToCouplerOut_done_.count(client)!=0) return ;
     else sendGridToCouplerOut_done_.insert(client) ;
  
@@ -2872,5 +2873,5 @@
     
     // compute the grid clientToServerConnector to send flux from client to servers
-    clientToClientConnector_[client] = new CGridScattererConnector(clientToClientConnectors) ;
+    clientToClientConnector_[client] = new CGridScattererConnector(clientToClientConnectors) ;*/
   }
 
