Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp	(revision 2225)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_extract.cpp	(revision 2226)
@@ -175,13 +175,29 @@
   if (domainSrc_->hasArea) domainDest_->area.resize(niDest,njDest);
 
+
   // Set attributes required to define domainDestination->localElement_ and associated views, full and workflow)
   CArray<size_t,1> sourceGlobalIdx = domainSource->getLocalElement()->getGlobalIndex();
   int indexSize = sourceGlobalIdx.numElements();
-  domainDest_->mask_1d.resize(niDest*njDest);
+  domainDest_->data_i_index.resize(niDest*njDest);
+  domainDestination->data_i_index = -1; 
+  domainDest_->data_j_index.resize(niDest*njDest);
+  domainDestination->data_j_index = 0; 
+
   CArray<int,1> sourceWorkflowIdx = domainSource->getLocalView(CElementView::WORKFLOW)->getIndex();
-  CArray<int,1> sourceFullIdx     = domainSource->getLocalView(CElementView::FULL    )->getIndex();
+  int srcWorkflowSize = sourceWorkflowIdx.numElements();
+  for (size_t i = 0; i < srcWorkflowSize ; ++i)
+  {
+    {
+      int iIdxSrc = sourceWorkflowIdx(i)%domainSource->ni_glo-destIBegin;
+      int jIdxSrc = sourceWorkflowIdx(i)/domainSource->ni_glo-destJBegin;
+      int extractedSrcWFIdx = jIdxSrc * niDest + iIdxSrc;
+      if ((extractedSrcWFIdx>=0)&&(extractedSrcWFIdx<niDest*njDest))
+      {
+        domainDest_->data_i_index(extractedSrcWFIdx) = extractedSrcWFIdx;
+      }
+    }
+  }
   
   int countDest(0); // increment of the position in destination domain 
-  int countMasked(0); // countMasked will store the offset index between full and workflow views
   for (int countSrc = 0; countSrc < indexSize ; ++countSrc) {
     int iIdxSrc = sourceGlobalIdx(countSrc)%domainSource->ni_glo;
@@ -195,14 +211,4 @@
       domainDest_->j_index(countDest) = jIdxSrc-extractJBegin_;
       transformationMapping_[extractNi_*(jIdxSrc-extractJBegin_)+iIdxSrc-extractIBegin_]=sourceGlobalIdx(countSrc);
-      if ( ( (countSrc-countMasked) >= sourceWorkflowIdx.numElements() )
-         || ( sourceFullIdx(countSrc)!=sourceWorkflowIdx(countSrc-countMasked) ) )
-      {
-        domainDest_->mask_1d(countDest) = 0;
-        // if point masked, manage offset between full and worfklow views of domainSource
-        countMasked++;
-      }
-      else {
-        domainDest_->mask_1d(countDest) = 1;
-      }
 
       int iIdxDestLocal = countDest%niDest;
@@ -262,11 +268,4 @@
       countDest++;
     }
-    else
-      if ( ( (countSrc-countMasked) >= sourceWorkflowIdx.numElements() )
-         || ( sourceFullIdx(countSrc)!=sourceWorkflowIdx(countSrc-countMasked) ) )
-      {
-        // manage offset between full and worfklow views of domainSource even if point i is not concerned
-        countMasked++;
-      }
 
   }
Index: XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp
===================================================================
--- XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2225)
+++ XIOS/dev/dev_ym/XIOS_COUPLING/src/transformation/domain_algorithm/domain_algorithm_reorder.cpp	(revision 2226)
@@ -94,5 +94,6 @@
    domainDestination->i_index.resize( indexSize );
    domainDestination->j_index.resize( indexSize );
-   for (size_t i = 0; i < indexSize ; ++i) {
+   for (size_t i = 0; i < indexSize ; ++i)
+   {
      domainDestination->i_index(i) = sourceGlobalIdx(i)%domainSource->ni_glo;
      domainDestination->j_index(i) = sourceGlobalIdx(i)/domainSource->ni_glo;
@@ -104,18 +105,14 @@
    //   - domainDestination->j_index = 0;
 
-   // set mask_1d to enable domainMask computing (in checkMask()) 
+   // set data_i_index to enable localMask computing (in computeLocalMask()), used to compute Workflow View
    CArray<int,1> sourceWorkflowIdx = domainSource->getLocalView(CElementView::WORKFLOW)->getIndex();
-   CArray<int,1> sourceFullIdx     = domainSource->getLocalView(CElementView::FULL    )->getIndex();
-   domainDestination->mask_1d.resize( indexSize );
-   int countMasked(0); // countMasked will store the offset index between full and workflow views
-   for (size_t i = 0; i < indexSize ; ++i) {
-       if ( ( (i-countMasked) >= sourceWorkflowIdx.numElements() )
-         || ( sourceFullIdx(i)!=sourceWorkflowIdx(i-countMasked) ) ) {
-       domainDestination->mask_1d(i) = 0;
-       countMasked++;
-     }
-     else {
-       domainDestination->mask_1d(i) = 1;
-     }
+   domainDestination->data_i_index.resize( indexSize );
+   domainDestination->data_i_index = -1; 
+   domainDestination->data_j_index.resize( indexSize );
+   domainDestination->data_j_index = 0; 
+   int srcWorkflowSize = sourceWorkflowIdx.numElements();
+   for (size_t i = 0; i < srcWorkflowSize ; ++i)
+   {
+     domainDestination->data_i_index(sourceWorkflowIdx(i)) = sourceWorkflowIdx(i);
    }
 
