Index: XIOS3/trunk/src/interface/c/iccalendar.cpp
===================================================================
--- XIOS3/trunk/src/interface/c/iccalendar.cpp	(revision 2425)
+++ XIOS3/trunk/src/interface/c/iccalendar.cpp	(revision 2426)
@@ -4,4 +4,5 @@
 #include "exception.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"
 #include "context.hpp"
 #include "context_client.hpp"
@@ -12,4 +13,5 @@
   TRY
   {
+    CMemChecker::get("XIOS update calendar").resume();
     CTimer::get("XIOS").resume();
     CTimer::get("XIOS update calendar").resume();
@@ -23,4 +25,5 @@
     CTimer::get("XIOS update calendar").suspend();
     CTimer::get("XIOS").suspend();
+    CMemChecker::get("XIOS update calendar").suspend();
   }
   CATCH_DUMP_STACK
Index: XIOS3/trunk/src/interface/c/icdata.cpp
===================================================================
--- XIOS3/trunk/src/interface/c/icdata.cpp	(revision 2425)
+++ XIOS3/trunk/src/interface/c/icdata.cpp	(revision 2426)
@@ -25,4 +25,5 @@
 #include "mpi.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"
 #include "array_new.hpp"
 
@@ -119,4 +120,6 @@
    TRY
    {
+     CMemChecker::get("XIOS close definition").resume();
+     
      CTimer::get("XIOS").resume();
      CTimer::get("XIOS close definition").resume();
@@ -125,4 +128,6 @@
      CTimer::get("XIOS close definition").suspend();
      CTimer::get("XIOS").suspend();
+
+     CMemChecker::get("XIOS close definition").suspend();
    }
    CATCH_DUMP_STACK
@@ -419,4 +424,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -428,4 +434,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -446,4 +453,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -458,4 +466,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -476,4 +485,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -488,4 +498,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -508,4 +519,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -520,4 +532,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -542,4 +555,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -554,4 +568,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -578,4 +593,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -590,4 +606,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -613,4 +630,5 @@
    {
  
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -625,4 +643,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -649,4 +668,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -661,4 +681,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -683,4 +704,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -695,4 +717,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -712,4 +735,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -726,4 +750,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -742,4 +767,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -756,4 +782,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -774,4 +801,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -788,4 +816,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -807,4 +836,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -821,4 +851,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -843,4 +874,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -857,4 +889,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -878,4 +911,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -892,4 +926,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -913,4 +948,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -927,4 +963,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -948,4 +985,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -960,4 +998,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -976,4 +1015,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -988,4 +1028,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1003,4 +1044,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1015,4 +1057,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1031,4 +1074,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1043,4 +1087,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1061,4 +1106,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1073,4 +1119,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1092,4 +1139,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1104,4 +1152,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1123,4 +1172,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1135,4 +1185,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1155,4 +1206,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1167,4 +1219,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1190,4 +1243,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1204,4 +1258,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1221,4 +1276,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1235,4 +1291,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1253,4 +1310,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1267,4 +1325,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1284,4 +1343,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1298,4 +1358,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1316,4 +1377,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1330,4 +1392,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1351,4 +1414,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1365,4 +1429,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1385,4 +1450,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1399,4 +1465,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1421,4 +1488,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1435,4 +1503,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
Index: XIOS3/trunk/src/interface/c/icmem_checker.cpp
===================================================================
--- XIOS3/trunk/src/interface/c/icmem_checker.cpp	(revision 2425)
+++ XIOS3/trunk/src/interface/c/icmem_checker.cpp	(revision 2426)
@@ -11,5 +11,13 @@
   void cxios_mem_checker_get(double* mem)
   {
-    *mem=CMemChecker::getMemRSS();
+    std::vector<double> memories = CMemChecker::getMem();
+    if (memories.size()>1)
+    {
+      *mem=memories[1]; //rss
+    }
+    else
+    {
+      *mem = 0.;
+    }
   }
 
Index: XIOS3/trunk/src/io/netCdfInterface.cpp
===================================================================
--- XIOS3/trunk/src/io/netCdfInterface.cpp	(revision 2425)
+++ XIOS3/trunk/src/io/netCdfInterface.cpp	(revision 2426)
@@ -10,4 +10,5 @@
 #include "netCdfInterface.hpp"
 #include "netCdfException.hpp"
+#include "mem_checker.hpp"
 
 namespace xios
@@ -22,4 +23,5 @@
 int CNetCdfInterface::create(const StdString& fileName, int cMode, int& ncId)
 {
+  CMemChecker::get("NetCDF create").resume();
   int status = nc_create(fileName.c_str(), cMode, &ncId);
   if (NC_NOERR != status)
@@ -34,4 +36,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF create").suspend();
 
   return status;
@@ -49,4 +52,5 @@
 int CNetCdfInterface::createPar(const StdString& fileName, int cMode, MPI_Comm comm, MPI_Info info, int& ncId)
 {
+  CMemChecker::get("NetCDF create").resume();
   int status = xios::nc_create_par(fileName.c_str(), cMode, comm, info, &ncId);
   if (NC_NOERR != status)
@@ -61,4 +65,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF create").suspend();
 
   return status;
@@ -74,4 +79,5 @@
 int CNetCdfInterface::open(const StdString& fileName, int oMode, int& ncId)
 {
+  CMemChecker::get("NetCDF open").resume();
   int status = nc_open(fileName.c_str(), oMode, &ncId);
   if (NC_NOERR != status)
@@ -86,4 +92,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF open").suspend();
 
   return status;
@@ -102,4 +109,5 @@
 int CNetCdfInterface::openPar(const StdString& fileName, int oMode, MPI_Comm comm, MPI_Info info, int& ncId)
 {
+  CMemChecker::get("NetCDF open").resume();
   int status = xios::nc_open_par(fileName.c_str(), oMode, comm, info, &ncId);
   if (NC_NOERR != status)
@@ -114,4 +122,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF open").suspend();
 
   return status;
@@ -125,4 +134,5 @@
 int CNetCdfInterface::close(int ncId)
 {
+  CMemChecker::get("NetCDF close").resume();
   int status = nc_close(ncId);
   if (NC_NOERR != status)
@@ -136,4 +146,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF close").suspend();
 
   return status;
@@ -147,4 +158,5 @@
 int CNetCdfInterface::reDef(int ncId)
 {
+  CMemChecker::get("NetCDF other").resume();
   int status = nc_redef(ncId);
   if (NC_NOERR != status)
@@ -158,4 +170,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
@@ -169,4 +182,5 @@
 int CNetCdfInterface::endDef(int ncId)
 {
+  CMemChecker::get("NetCDF other").resume();
   int status = nc_enddef(ncId);
   if (NC_NOERR != status)
@@ -181,4 +195,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
@@ -773,4 +788,5 @@
 int CNetCdfInterface::setFill(int ncid, bool fill)
 {
+  CMemChecker::get("NetCDF other").resume();
   int old_fill_mode;
   int status = nc_set_fill(ncid, fill ? NC_FILL: NC_NOFILL, &old_fill_mode);
@@ -786,4 +802,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
@@ -801,4 +818,5 @@
 int CNetCdfInterface::defVarFill(int ncid, int varId, int noFill, void* fillValue)
 {
+  CMemChecker::get("NetCDF other").resume();
   int status = nc_def_var_fill(ncid, varId, noFill, fillValue);
   if (NC_NOERR != status)
@@ -814,4 +832,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
@@ -829,4 +848,5 @@
 int CNetCdfInterface::varParAccess(int ncid, int varId, int access)
 {
+  CMemChecker::get("NetCDF other").resume();
   int status = nc_var_par_access(ncid, varId, access);
   if (NC_NOERR != status)
@@ -841,4 +861,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
@@ -852,4 +873,5 @@
 int CNetCdfInterface::sync(int ncid)
 {
+  CMemChecker::get("NetCDF other").resume();
   int status = nc_sync(ncid);
   if (NC_NOERR != status)
@@ -864,4 +886,5 @@
     throw CNetCdfException(e);
   }
+  CMemChecker::get("NetCDF other").suspend();
 
   return status;
Index: XIOS3/trunk/src/io/netCdfInterface_impl.hpp
===================================================================
--- XIOS3/trunk/src/io/netCdfInterface_impl.hpp	(revision 2425)
+++ XIOS3/trunk/src/io/netCdfInterface_impl.hpp	(revision 2426)
@@ -13,4 +13,5 @@
 #include "netCdfInterface.hpp"
 #include "netCdfException.hpp"
+#include "mem_checker.hpp"
 
 namespace xios
@@ -28,4 +29,5 @@
   int CNetCdfInterface::getAttType(int ncid, int varId, const StdString& attrName, T* data)
   {
+    CMemChecker::get("NetCDF get/put").resume();
     int status = ncGetAttType(ncid, varId, attrName.c_str(), data);
     if (NC_NOERR != status)
@@ -39,4 +41,5 @@
       throw CNetCdfException(sstr.str());
     }
+    CMemChecker::get("NetCDF get/put").suspend();
 
     return status;
@@ -57,4 +60,5 @@
                                    StdSize numVal, const T* data)
   {
+    CMemChecker::get("NetCDF get/put").resume();
     int status = ncPutAttType(ncid, varId, attrName.c_str(), numVal, data);
     if (NC_NOERR != status)
@@ -69,4 +73,5 @@
       throw CNetCdfException(sstr.str());
     }
+    CMemChecker::get("NetCDF get/put").suspend();
 
     return status;
@@ -85,4 +90,5 @@
   int CNetCdfInterface::getVaraType(int ncid, int varId, const StdSize* start, const StdSize* count, T* data)
   {
+    CMemChecker::get("NetCDF get/put").resume();
     int status = ncGetVaraType(ncid, varId, start, count, data);
     if (NC_NOERR != status)
@@ -96,4 +102,5 @@
       throw CNetCdfException(sstr.str());
     }
+    CMemChecker::get("NetCDF get/put").suspend();
 
     return status;
@@ -112,4 +119,5 @@
   int CNetCdfInterface::putVaraType(int ncid, int varId, const StdSize* start, const StdSize* count, const T* data)
   {
+    CMemChecker::get("NetCDF get/put").resume();
     int status = ncPutVaraType(ncid, varId, start, count, data);
     if (NC_NOERR != status)
@@ -123,4 +131,5 @@
       throw CNetCdfException(sstr.str());
     }
+    CMemChecker::get("NetCDF get/put").suspend();
 
     return status;
Index: XIOS3/trunk/src/mem_checker.cpp
===================================================================
--- XIOS3/trunk/src/mem_checker.cpp	(revision 2425)
+++ XIOS3/trunk/src/mem_checker.cpp	(revision 2426)
@@ -25,5 +25,5 @@
   int CMemChecker::flush_counter_=1;
   
-  CMemChecker::CMemChecker(const std::string& name) : name_(name) 
+  CMemChecker::CMemChecker(const std::string& name) : name_(name)
   { 
     if (first_) check() ;
@@ -37,8 +37,15 @@
     first_=false ;
   }
-  double CMemChecker::getMem(void)
-  {
-    if (first_) check() ;
-    if (!enabled_) return 0;
+  
+  // Return vector of memories amount :
+  //   - vector[0] : virtual memory (vsize) from /proc/self/stat
+  //   - vector[1] : resident set size (rss) from /proc/self/stat
+  std::vector<double> CMemChecker::getMem(void)
+  {
+    std::vector<double> memories(0);
+    memories.clear();
+    
+    if (first_) check() ;
+    if (!enabled_) return memories;
     std::ifstream statStream("/proc/self/stat",std::ios_base::in);
     std::string dummy ;
@@ -46,15 +53,27 @@
     unsigned long vsize; 
     statStream>>vsize ;
-    return vsize ;
-  }
-  double CMemChecker::getMemRSS(void)
-  {
-    //sleep( 1 ) ;
-    if (first_) check() ;
-    if (!enabled_) return 0;
+    memories.push_back(vsize);
+    unsigned long rss;
+    statStream>>rss ;
+    memories.push_back(rss*4096);
+    return memories ;
+  }
+  
+  // Return vector of memories amount, register values (see _init) as first call as reference :
+  //   - vector[0] : virtual memory (vsize) from /proc/self/stat
+  //   - vector[1] : resident set size (rss) from /proc/self/stat
+  //   - vector[2] : Peak resident set size (VmHWM) from /proc/self/status
+  std::vector<double> CMemChecker::getMemories(void)
+  {
+    std::vector<double> memories;
+
+    if (first_) check() ;
+    if (!enabled_) return memories;
     std::ifstream statStream("/proc/self/stat",std::ios_base::in);
     std::string dummy ;
-    for(int i=1;i<=23;i++) statStream>>dummy ;
-    double vsize; 
+    for(int i=1;i<=22;i++) statStream>>dummy ;
+
+    // 1 - Virtual
+    unsigned long vsize; 
     statStream>>vsize ;
     if (vsize_init_==0) {
@@ -63,34 +82,8 @@
     }
     vsize -= vsize_init_;
-    vsize *= 4096; //getconf("PAGE_SIZE");
-    return vsize ;
-  }
-  
-  // Return vector of memories amount :
-  //   - vector[0] : virtual memory (vsize) from /proc/self/stat
-  //   - vector[1] : resident set size (rss) from /proc/self/stat
-  //   - vector[2] : Peak resident set size (VmHWM) from /proc/self/status
-  std::vector<double> CMemChecker::getMemories(void)
-  {
-    std::vector<double> memories;
-
-    if (first_) check() ;
-    if (!enabled_) return memories;
-    std::ifstream statStream("/proc/self/stat",std::ios_base::in);
-    std::string dummy ;
-    for(int i=1;i<=22;i++) statStream>>dummy ;
-
-    // 1 - Virtual
-    double vsize; 
-    statStream>>vsize ;
-    if (vsize_init_==0) {
-      vsize_init_ = vsize;
-      time_init_=MPI_Wtime();
-    }
-    vsize -= vsize_init_;
     memories.push_back(vsize);
 
     // 2 - RSS
-    double rss;
+    unsigned long rss;
     statStream>>rss ;
     if (rss_init_==0) {
@@ -163,5 +156,13 @@
     if (first_) check() ;
     if (!enabled_) return ;
-    if (!suspended_) cumulatedMem_ += getMem() - lastMem_;
+    if (!suspended_)
+    {
+      vector<double> mem = getMem();
+      cumulatedMem_.resize( mem.size() );
+      for (int i=0;i<mem.size() ; i++)
+      {
+        cumulatedMem_[i] += mem[i] - lastMem_[i];
+      }
+    }
     suspended_ = true;
   }
@@ -171,37 +172,30 @@
     if (first_) check() ;
     if (!enabled_) return ;
-    if (suspended_) lastMem_ = getMem();
+    if (suspended_)
+    {
+      vector<double> mem = getMem();
+      lastMem_.resize( mem.size() );
+      for (int i=0;i<mem.size() ; i++)
+      {
+        lastMem_[i] = mem[i];
+      }
+    }
     suspended_ = false;
   }
 
-  void CMemChecker::suspendRSS(void)
+  void CMemChecker::reset(void)
   {
     if (first_) check() ;
     if (!enabled_) return ;
-    if (!suspended_) cumulatedMem_ += getMemRSS() - lastMem_;
+    cumulatedMem_.clear();
     suspended_ = true;
   }
   
-  void CMemChecker::resumeRSS(void)
-  {
-    if (first_) check() ;
-    if (!enabled_) return ;
-    if (suspended_) lastMem_ = getMemRSS();
-    suspended_ = false;
-  }
-  
-
-  void CMemChecker::reset(void)
-  {
-    if (first_) check() ;
-    if (!enabled_) return ;
-    cumulatedMem_ = 0.;
-    suspended_ = true;
-  }
-  
-  double CMemChecker::getCumulatedMem(void)
-  {
-    if (first_) check() ;
-    if (!enabled_) return 0;
+  std::vector<double> CMemChecker::getCumulatedMem(void)
+  {
+    std::vector<double> memories;
+    memories.clear();
+    if (first_) check() ;
+    if (!enabled_) return memories;
     return cumulatedMem_;
   }
@@ -231,11 +225,14 @@
     for(std::map<std::string,CMemChecker>::iterator it=allMemChecker_.begin();it!=allMemChecker_.end();++it)
     {  
-      strOut<<"MemChecker : "<<it->first<<"    -->   consumed memory : " ;
-      double mem=it->second.getCumulatedMem() ;
-      if (mem>=Tb) strOut<< mem / Tb<<" Tb"<<std::endl ;
-      else if (mem>=Gb) strOut<< mem / Gb<<" Gb"<<std::endl ;
-      else if (mem>=Mb) strOut<< mem / Mb<<" Mb"<<std::endl ;
-      else if (mem>=Kb) strOut<< mem / Kb<<" Kb"<<std::endl ;
-      else strOut<< mem <<" bytes"<<std::endl ;
+      vector<double> mem=it->second.getCumulatedMem() ;
+      if (mem.size()>0)
+      {
+        strOut<<"MemChecker : "<<it->first<<"    -->   consumed memory : " ;      
+        if ((fabs(mem[0])>=Tb)||(fabs(mem[1])>=Tb)) strOut<< mem[0] / Tb<<" Tb - "<<mem[1] / Tb<<" Tb"<<std::endl ;
+        else if ((fabs(mem[0])>=Gb)||(fabs(mem[1])>=Gb)) strOut<< mem[0] / Gb<<" Gb - "<<mem[1] / Gb<<" Gb"<<std::endl ;
+        else if ((fabs(mem[0])>=Mb)||(fabs(mem[1])>=Mb)) strOut<< mem[0] / Mb<<" Mb - "<<mem[1] / Mb<<" Mb"<<std::endl ;
+        else if ((fabs(mem[0])>=Kb)||(fabs(mem[1])>=Kb)) strOut<< mem[0] / Kb<<" Kb - "<<mem[1] / Kb<<" Kb"<<std::endl ;
+        else strOut<< mem[0] <<" bytes - "<<mem[1] <<" bytes"<<std::endl ;
+      }
     }
     return strOut.str() ;
Index: XIOS3/trunk/src/mem_checker.hpp
===================================================================
--- XIOS3/trunk/src/mem_checker.hpp	(revision 2425)
+++ XIOS3/trunk/src/mem_checker.hpp	(revision 2426)
@@ -15,10 +15,7 @@
       void suspend(void);
       void resume(void);
-      void suspendRSS(void);
-      void resumeRSS(void);
       void reset(void);
-      double getCumulatedMem(void);
-      static double getMem(void);
-      static double getMemRSS(void);
+      std::vector<double> getCumulatedMem(void);
+      static std::vector<double> getMem(void);
       static std::vector<double> getMemories(void);
       static void logMem( std::string id, bool finalizeLog = false );
@@ -30,6 +27,6 @@
     private:
       static void check(void) ;
-      double cumulatedMem_;
-      double lastMem_;
+      std::vector<double> cumulatedMem_;
+      std::vector<double> lastMem_;
       bool suspended_;
       std::string name_;
Index: XIOS3/trunk/src/node/context.cpp
===================================================================
--- XIOS3/trunk/src/node/context.cpp	(revision 2425)
+++ XIOS3/trunk/src/node/context.cpp	(revision 2426)
@@ -2025,5 +2025,4 @@
       if (prevStep < step)
       {
-        CMemChecker::logMem( "CContext::updateCalendar_"+std::to_string(step) );
         if (serviceType_==CServicesManager::CLIENT) // For now we only use server level 1 to read data
         {
@@ -2043,4 +2042,5 @@
           garbageCollector.invalidate(calendar->getCurrentDate());
         }
+        CMemChecker::logMem( "CContext::updateCalendar_"+std::to_string(step) );
       }
       else if (prevStep == step)
