Index: XIOS2/trunk/src/client.cpp
===================================================================
--- XIOS2/trunk/src/client.cpp	(revision 2358)
+++ XIOS2/trunk/src/client.cpp	(revision 2428)
@@ -10,4 +10,5 @@
 #include "mpi.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"Â 
 #include "buffer_client.hpp"
 #include "string_tools.hpp"
@@ -302,4 +303,5 @@
       report(0)<< " Memory report : increasing it by a factor will increase performance, depending of the volume of data wrote in file at each time step of the file"<<endl ;
       report(100)<<CTimer::getAllCumulatedTime()<<endl ;
+      report(100)<<CMemChecker::getAllCumulatedMem()<<endl ;
    }
 
Index: XIOS2/trunk/src/cxios.cpp
===================================================================
--- XIOS2/trunk/src/cxios.cpp	(revision 2358)
+++ XIOS2/trunk/src/cxios.cpp	(revision 2428)
@@ -10,4 +10,5 @@
 #include <new>
 #include "memtrack.hpp"
+#include "mem_checker.hpp"
 #include "registry.hpp"
 
@@ -45,4 +46,5 @@
   bool CXios::checkSumRecv=false ;
   bool CXios::checkSumSend=false ;
+  bool CXios::logMemory=false ;
  
   //! Parse configuration file and create some objects from it
@@ -97,4 +99,6 @@
     checkSumSend = getin<bool>("checksum_send_fields", false);
     checkSumRecv = getin<bool>("checksum_recv_fields", false);
+
+    logMemory = getin<bool>("log_memory", false);
  
     globalComm=MPI_COMM_WORLD ;
@@ -131,4 +135,5 @@
       CClient::openErrorStream();
     }
+    CMemChecker::logMem("CXios::initClientSide");
   }
   CATCH
@@ -136,4 +141,5 @@
   void CXios::clientFinalize(void)
   {
+     CMemChecker::logMem("CXios::clientFinalize", true);
      CClient::finalize() ;
      if (CClient::getRank()==0)
@@ -206,4 +212,5 @@
       CServer::openErrorStream();
     }
+    CMemChecker::logMem( "CServer::initialize" );
 
     // Enter the loop to listen message from Client
Index: XIOS2/trunk/src/cxios.hpp
===================================================================
--- XIOS2/trunk/src/cxios.hpp	(revision 2358)
+++ XIOS2/trunk/src/cxios.hpp	(revision 2428)
@@ -60,4 +60,6 @@
      static bool checkSumRecv; //!< For debugging, compute a checksum of fields received by the model through the XIOS client
 
+     static bool logMemory; //!< Activate memory monitoring for all XIOS process
+
     public:
      //! Setting xios to use server mode
Index: XIOS2/trunk/src/filter/temporal_filter.cpp
===================================================================
--- XIOS2/trunk/src/filter/temporal_filter.cpp	(revision 2358)
+++ XIOS2/trunk/src/filter/temporal_filter.cpp	(revision 2428)
@@ -4,4 +4,5 @@
 #include "workflow_graph.hpp"
 #include "file.hpp"
+#include "mem_checker.hpp"
 
 namespace xios
@@ -130,5 +131,7 @@
           packet = data[0];
 
-        isFirstOperation = false;
+        CMemChecker::logMem( "CTemporalFilter::apply" );
+
+	isFirstOperation = false;
         
         packet->field = this->field;
Index: XIOS2/trunk/src/interface/c/iccalendar.cpp
===================================================================
--- XIOS2/trunk/src/interface/c/iccalendar.cpp	(revision 2358)
+++ XIOS2/trunk/src/interface/c/iccalendar.cpp	(revision 2428)
@@ -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();
     xios::CContext* context = CContext::getCurrent();
@@ -19,4 +21,5 @@
     context->sendUpdateCalendar(step);
     CTimer::get("XIOS").suspend();
+    CMemChecker::get("XIOS update calendar").suspend();
   }
   CATCH_DUMP_STACK
Index: XIOS2/trunk/src/interface/c/icdata.cpp
===================================================================
--- XIOS2/trunk/src/interface/c/icdata.cpp	(revision 2358)
+++ XIOS2/trunk/src/interface/c/icdata.cpp	(revision 2428)
@@ -25,4 +25,5 @@
 #include "mpi.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"
 #include "array_new.hpp"
 
@@ -117,4 +118,5 @@
    TRY
    {
+     CMemChecker::get("XIOS close definition").resume();
      CTimer::get("XIOS").resume();
      CTimer::get("XIOS close definition").resume();
@@ -123,4 +125,5 @@
      CTimer::get("XIOS close definition").suspend();
      CTimer::get("XIOS").suspend();
+     CMemChecker::get("XIOS close definition").suspend();
    }
    CATCH_DUMP_STACK
@@ -414,4 +417,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -423,4 +427,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -441,4 +446,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -453,4 +459,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -471,4 +478,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -483,4 +491,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -503,4 +512,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -515,4 +525,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -537,4 +548,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -549,4 +561,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -575,4 +588,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -587,5 +601,6 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
-   }
+      CMemChecker::get("XIOS send field").suspend();
+  }
    CATCH_DUMP_STACK
 
@@ -610,4 +625,5 @@
    {
  
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -622,4 +638,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -646,4 +663,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -658,4 +676,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -681,4 +700,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -693,4 +713,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -710,4 +731,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -724,4 +746,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -740,4 +763,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -754,4 +778,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -772,4 +797,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -786,4 +812,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -805,4 +832,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -819,4 +847,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -841,4 +870,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -855,4 +885,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -876,4 +907,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -890,4 +922,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -911,4 +944,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS send field").resume();
@@ -925,4 +959,5 @@
       CTimer::get("XIOS send field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -947,4 +982,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -959,5 +995,6 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
-   }
+       CMemChecker::get("XIOS send field").suspend();
+  }
    CATCH_DUMP_STACK
 
@@ -975,4 +1012,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -987,4 +1025,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1002,4 +1041,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1014,4 +1054,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1030,4 +1071,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1042,4 +1084,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1060,4 +1103,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1072,4 +1116,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1091,4 +1136,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1103,4 +1149,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1122,4 +1169,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1134,4 +1182,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1154,4 +1203,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1166,4 +1216,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1189,4 +1240,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1203,4 +1255,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1220,4 +1273,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1234,4 +1288,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1252,4 +1307,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1266,4 +1322,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
    }
    CATCH_DUMP_STACK
@@ -1283,4 +1340,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1297,5 +1355,6 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
-    }
+      CMemChecker::get("XIOS send field").suspend();
+   }
    CATCH_DUMP_STACK
 
@@ -1315,4 +1374,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1329,4 +1389,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1350,4 +1411,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1364,4 +1426,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1384,4 +1447,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1398,4 +1462,5 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
+      CMemChecker::get("XIOS send field").suspend();
     }
    CATCH_DUMP_STACK
@@ -1420,4 +1485,5 @@
    TRY
    {
+      CMemChecker::get("XIOS send field").resume();
       CTimer::get("XIOS").resume();
       CTimer::get("XIOS recv field").resume();
@@ -1434,5 +1500,6 @@
       CTimer::get("XIOS recv field").suspend();
       CTimer::get("XIOS").suspend();
-    }
+      CMemChecker::get("XIOS send field").suspend();
+   }
    CATCH_DUMP_STACK
  
Index: XIOS2/trunk/src/interface/fortran/ixios.F90
===================================================================
--- XIOS2/trunk/src/interface/fortran/ixios.F90	(revision 2358)
+++ XIOS2/trunk/src/interface/fortran/ixios.F90	(revision 2428)
@@ -38,4 +38,5 @@
                   ASSIGNMENT(=)
 USE itimer, ONLY : xios(timer_resume), xios(timer_suspend), xios(timer_reset), xios(timer_get_time)
+USE imem_checker, ONLY : xios(mem_checker_get), xios(mem_checker_log)Â 
 
 USE ifield, ONLY : txios(field), txios(fieldgroup), xios(is_valid_field), xios(is_valid_fieldgroup)
Index: XIOS2/trunk/src/io/netCdfInterface.cpp
===================================================================
--- XIOS2/trunk/src/io/netCdfInterface.cpp	(revision 2358)
+++ XIOS2/trunk/src/io/netCdfInterface.cpp	(revision 2428)
@@ -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,5 +36,6 @@
     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,5 +92,6 @@
     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,5 +146,6 @@
     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: XIOS2/trunk/src/io/netCdfInterface_impl.hpp
===================================================================
--- XIOS2/trunk/src/io/netCdfInterface_impl.hpp	(revision 2358)
+++ XIOS2/trunk/src/io/netCdfInterface_impl.hpp	(revision 2428)
@@ -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,5 +131,6 @@
       throw CNetCdfException(sstr.str());
     }
-
+    CMemChecker::get("NetCDF get/put").suspend();
+    
     return status;
   }
Index: XIOS2/trunk/src/node/context.cpp
===================================================================
--- XIOS2/trunk/src/node/context.cpp	(revision 2358)
+++ XIOS2/trunk/src/node/context.cpp	(revision 2428)
@@ -15,4 +15,5 @@
 #include "xios_spl.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"
 #include "memtrack.hpp"
 #include <limits>
@@ -701,4 +702,5 @@
    TRY
    {
+    CMemChecker::logMem( "CContext::closeDefinition" );
     CTimer::get("Context : close definition").resume() ;
     postProcessingGlobalAttributes();
@@ -729,4 +731,5 @@
     }
     CTimer::get("Context : close definition").suspend() ;
+    CMemChecker::logMem( "CContext::closeDefinition_END" );
    }
    CATCH_DUMP_ATTR
@@ -1976,4 +1979,5 @@
           garbageCollector.invalidate(calendar->getCurrentDate());
         }
+	CMemChecker::logMem( "CContext::updateCalendar_"+std::to_string(step) );
       }
       else if (prevStep == step)
Index: XIOS2/trunk/src/server.cpp
===================================================================
--- XIOS2/trunk/src/server.cpp	(revision 2358)
+++ XIOS2/trunk/src/server.cpp	(revision 2428)
@@ -13,4 +13,5 @@
 #include "tracer.hpp"
 #include "timer.hpp"
+#include "mem_checker.hpp"
 #include "event_scheduler.hpp"
 #include "string_tools.hpp"
@@ -423,4 +424,5 @@
       MPI_Comm_free(&intraComm);
 
+      CMemChecker::logMem( "CServer::finalize", true );
       if (!is_MPI_Initialized)
       {
@@ -432,4 +434,5 @@
       report(0)<<"Performance report : Ratio : "<<CTimer::get("Process events").getCumulatedTime()/CTimer::get("XIOS server").getCumulatedTime()*100.<<"%"<<endl  ;
       report(100)<<CTimer::getAllCumulatedTime()<<endl ;
+      report(100)<<CMemChecker::getAllCumulatedMem()<<endl ;
     }
 
