Index: XIOS/dev/branch_openmp/src/interface/c/icaxis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icaxis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icaxis.cpp	(revision 1642)
@@ -28,4 +28,5 @@
    
    void cxios_axis_handle_create (XAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_axisgroup_handle_create (XAxisGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_axis_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,6 +61,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_axisgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,4 +74,5 @@
 
    }
+   CATCH_DUMP_STACK
    
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/iccalendar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/iccalendar.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/iccalendar.cpp	(revision 1642)
@@ -10,4 +10,5 @@
 {
   void cxios_update_calendar(int step)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -19,6 +20,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_current_date(cxios_date* current_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -37,6 +40,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   int cxios_get_year_length_in_seconds(int year)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -50,6 +55,8 @@
     return length;
   }
+  CATCH_DUMP_STACK
 
   int cxios_get_day_length_in_seconds()
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -63,3 +70,4 @@
     return length;
   }
+  CATCH_DUMP_STACK
 }
Index: XIOS/dev/branch_openmp/src/interface/c/iccalendar_wrapper.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/iccalendar_wrapper.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/iccalendar_wrapper.cpp	(revision 1642)
@@ -29,4 +29,5 @@
 
   void cxios_calendar_wrapper_handle_create(XCalendarWrapperPtr* _ret, const char* _id, int _id_len)
+  TRY
   {
     std::string id;
@@ -36,6 +37,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_current_calendar_wrapper(XCalendarWrapperPtr* _ret)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -43,8 +46,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // -------------------- VÃ©rification des identifiants -----------------------
 
   void cxios_calendar_wrapper_valid_id(bool* _ret, const char* _id, int _id_len)
+  TRY
   {
     std::string id;
@@ -54,8 +59,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // ----------------------- Custom getters and setters -----------------------
 
   void cxios_set_calendar_wrapper_date_start_date(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date start_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -70,6 +77,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_calendar_wrapper_date_start_date(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date* start_date_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -83,6 +92,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_set_calendar_wrapper_date_time_origin(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date time_origin_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -97,6 +108,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_get_calendar_wrapper_date_time_origin(XCalendarWrapperPtr calendarWrapper_hdl, cxios_date* time_origin_c)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -110,8 +123,10 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   // ----------------------- Calendar creation and update ----------------------
 
   void cxios_create_calendar(XCalendarWrapperPtr calendarWrapper_hdl)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -119,6 +134,8 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_update_calendar_timestep(XCalendarWrapperPtr calendarWrapper_hdl)
+  TRY
   {
     CTimer::get("XIOS").resume();
@@ -126,3 +143,4 @@
     CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/iccompute_connectivity_domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/iccompute_connectivity_domain.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/iccompute_connectivity_domain.cpp	(revision 1642)
@@ -25,4 +25,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_compute_connectivity_domain_handle_create(XComConDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -32,7 +33,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_compute_connectivity_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -43,3 +46,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/iccontext.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/iccontext.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/iccontext.cpp	(revision 1642)
@@ -32,4 +32,5 @@
 
    void cxios_context_handle_create (XContextPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,8 +55,10 @@
       // Lever une exeception ici
    }
+   CATCH_DUMP_STACK
 
    // ------------------------ Changements de contextes ------------------------
 
    void cxios_context_get_current(XContextPtr* context)
+   TRY
    {
       CTimer::get("XIOS").resume();
@@ -63,6 +66,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_set_current(XContextPtr context, bool withswap)
+   TRY
    {
       CTimer::get("XIOS").resume() ;
@@ -70,8 +75,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_context_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -93,3 +100,4 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icdata.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icdata.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icdata.cpp	(revision 1642)
@@ -9,7 +9,7 @@
 #include <iostream>
 
-#include "mpi_std.hpp"
+
 #include "xios.hpp"
-//#include "oasis_cinterface.hpp"
+#include "oasis_cinterface.hpp"
 
 #include "attribute_template.hpp"
@@ -23,5 +23,5 @@
 #include "context.hpp"
 #include "context_client.hpp"
-
+#include "mpi.hpp"
 #include "timer.hpp"
 #include "array_new.hpp"
@@ -43,14 +43,19 @@
    // it is only used from the parse_xml.exe standalone test tool.
    void cxios_init(void)
+   TRY
    {
      CXios::initialize();
    }
+   CATCH_DUMP_STACK
 
    void cxios_init_server(void)
+   TRY
    {
      CXios::initServerSide();
    }
+   CATCH_DUMP_STACK
 
    void cxios_init_client(const char* client_id , int len_client_id, MPI_Fint* f_local_comm, MPI_Fint* f_return_comm )
+   TRY
    {
       std::string str;
@@ -61,27 +66,25 @@
 
       int initialized;
-      MPI_Initialized(&initialized);
+      ep_lib::MPI_Initialized(&initialized);
       #ifdef _usingMPI
       if (initialized) local_comm=MPI_Comm_f2c(*f_local_comm);
       else local_comm=MPI_COMM_NULL;
       #elif _usingEP
-      ep_lib::fc_comm_map.clear();
-      if (initialized) local_comm=ep_lib::EP_Comm_f2c((f_local_comm));
-      else local_comm=MPI_COMM_NULL;
+      if (initialized) local_comm=EP_Comm_f2c(f_local_comm);
+      else local_comm=EP_COMM_NULL;
       #endif
-      
-
-
       CXios::initClientSide(str, local_comm, return_comm);
       #ifdef _usingMPI
       *f_return_comm=MPI_Comm_c2f(return_comm);
       #elif _usingEP
-      *f_return_comm=*static_cast<MPI_Fint*>(ep_lib::EP_Comm_c2f(return_comm));
+      *f_return_comm=*static_cast<MPI_Fint* >(EP_Comm_c2f(return_comm));
       #endif
       CTimer::get("XIOS init").suspend();
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_initialize(const char* context_id , int len_context_id, MPI_Fint* f_comm)
+   TRY
    {
      std::string str;
@@ -94,5 +97,5 @@
      comm=MPI_Comm_f2c(*f_comm);
      #elif _usingEP
-     comm = ep_lib::EP_Comm_f2c(f_comm);
+     comm=EP_Comm_f2c(f_comm);
      #endif
      CClient::registerContext(str, comm);
@@ -100,6 +103,17 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
+
+   void cxios_oasis_enddef()
+   TRY
+   {
+     CTimer::get("XIOS").resume();
+     CClient::callOasisEnddef();
+     CTimer::get("XIOS").suspend();
+   }
+   CATCH_DUMP_STACK
 
    void cxios_context_is_initialized(const char* context_id , int len_context_id, bool* initialized)
+   TRY
    {
      std::string str;
@@ -111,6 +125,8 @@
      CTimer::get("XIOS").suspend();
    }
-
-    void cxios_context_close_definition()
+   CATCH_DUMP_STACK
+
+   void cxios_context_close_definition()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -121,6 +137,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_context_finalize()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -131,6 +149,8 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_finalize()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -138,6 +158,8 @@
      CXios::clientFinalize();
    }
+   CATCH_DUMP_STACK
 
    void cxios_solve_inheritance()
+   TRY
    {
      CTimer::get("XIOS").resume();
@@ -146,4 +168,5 @@
      CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    /*! \brief This group of functions retrieve variable information from the configuration file (.xml)
@@ -158,4 +181,5 @@
    */
    void cxios_get_variable_data_k8(const char* varId, int varIdSize, double* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -176,6 +200,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_k4(const char* varId, int varIdSize, float* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -196,6 +222,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_int(const char* varId, int varIdSize, int* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -216,6 +244,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_logic(const char* varId, int varIdSize, bool* data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -236,6 +266,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_get_variable_data_char(const char* varId, int varIdSize, char* data, int dataSizeIn, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -257,4 +289,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    /*! \brief This group of functions write information into existing variable in the configuration file (.xml)
@@ -269,5 +302,6 @@
    */
    void cxios_set_variable_data_k8(const char* varId, int varIdSize, double data, bool* isVarExisted)
-   {
+   TRY
+  {
       std::string varIdStr;
       if (!cstr2string(varId, varIdSize, varIdStr)) return;
@@ -288,6 +322,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_k4(const char* varId, int varIdSize, float data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -309,6 +345,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_int(const char* varId, int varIdSize, int data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -331,6 +369,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_logic(const char* varId, int varIdSize, bool data, bool* isVarExisted)
+   TRY
    {
       std::string varIdStr;
@@ -352,7 +392,9 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_set_variable_data_char(const char* varId, int varIdSize, const char* data, int dataSizeIn, bool* isVarExisted)
-   {
+   TRY
+  {
       std::string varIdStr, dataStr;
       if (!cstr2string(varId, varIdSize, varIdStr)) return;
@@ -378,9 +420,10 @@
       CTimer::get("XIOS").suspend();
    }
-
+   CATCH_DUMP_STACK
 
    // ---------------------- Ecriture des donnÃ©es ------------------------------
 
    void cxios_write_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -397,6 +440,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -416,6 +461,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -435,6 +482,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -454,6 +503,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k84(const char* fieldid, int fieldid_size, double* data_k8, int data_0size, int data_1size, int data_2size, int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -473,8 +524,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -494,8 +547,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -515,4 +570,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
@@ -520,4 +576,5 @@
                              int data_3size, int data_4size, int data_5size,
                              int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -537,6 +594,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -556,6 +615,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -577,6 +638,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -598,6 +661,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -619,8 +684,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -642,8 +709,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -665,8 +734,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
                              int data_0size, int data_1size, int data_2size,
                              int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -688,4 +759,5 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_write_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
@@ -693,4 +765,5 @@
                              int data_3size, int data_4size, int data_5size,
                              int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -712,8 +785,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    // ---------------------- Lecture des donnÃ©es ------------------------------
 
    void cxios_read_data_k80(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -733,6 +808,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k81(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -752,6 +829,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k82(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -771,6 +850,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k83(const char* fieldid, int fieldid_size, double* data_k8, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -790,8 +871,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k84(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -811,8 +894,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k85(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -832,8 +917,10 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k86(const char* fieldid, int fieldid_size, double* data_k8,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -853,4 +940,5 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k87(const char* fieldid, int fieldid_size, double* data_k8,
@@ -858,4 +946,5 @@
                             int data_3size, int data_4size, int data_5size,
                             int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -875,6 +964,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k40(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -896,6 +987,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k41(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize)
+   TRY
    {
       std::string fieldid_str;
@@ -917,6 +1010,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k42(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize)
+   TRY
    {
       std::string fieldid_str;
@@ -938,6 +1033,8 @@
       CTimer::get("XIOS").suspend();
    }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k43(const char* fieldid, int fieldid_size, float* data_k4, int data_Xsize, int data_Ysize, int data_Zsize)
+   TRY
    {
       std::string fieldid_str;
@@ -959,8 +1056,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k44(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size)
+   TRY
    {
       std::string fieldid_str;
@@ -982,8 +1081,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k45(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size)
+   TRY
    {
       std::string fieldid_str;
@@ -1005,8 +1106,10 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k46(const char* fieldid, int fieldid_size, float* data_k4,
                             int data_0size, int data_1size, int data_2size,
                             int data_3size, int data_4size, int data_5size)
+   TRY
    {
       std::string fieldid_str;
@@ -1028,4 +1131,5 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 
    void cxios_read_data_k47(const char* fieldid, int fieldid_size, float* data_k4,
@@ -1033,4 +1137,5 @@
                             int data_3size, int data_4size, int data_5size,
                             int data_6size)
+   TRY
    {
       std::string fieldid_str;
@@ -1052,3 +1157,4 @@
       CTimer::get("XIOS").suspend();
     }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icdate.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icdate.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icdate.cpp	(revision 1642)
@@ -35,4 +35,5 @@
 {
   long long int cxios_date_convert_to_seconds(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("long long int cxios_date_convert_to_seconds(cxios_date date_c)"),
@@ -41,6 +42,8 @@
     return date;
   }
+  CATCH_DUMP_STACK
 
   void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)"),
@@ -51,6 +54,8 @@
       ERROR("void cxios_date_convert_to_string(cxios_date date_c, char* str, int str_size)", << "Input string is too short");
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_convert_from_string(const char* str, int str_size)
+  TRY
   {
     std::string date_str;
@@ -63,17 +68,20 @@
     return { date.getYear(), date.getMonth(), date.getDay(), date.getHour(), date.getMinute(), date.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_add_duration(cxios_date date_c, cxios_duration dur_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("cxios_date cxios_date_add_duration(cxios_date date_c, cxios_duration dur_c)"),
                                    date_c.year, date_c.month, date_c.day,
                                    date_c.hour, date_c.minute, date_c.second);
-
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
     xios::CDate res = date + dur;
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_date cxios_date_sub_duration(cxios_date date_c, cxios_duration dur_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("cxios_date cxios_date_sub_duration(cxios_date date_c, cxios_duration dur_c)"),
@@ -85,6 +93,8 @@
     return { res.getYear(), res.getMonth(), res.getDay(), res.getHour(), res.getMinute(), res.getSecond() };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_date_sub(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("cxios_duration cxios_date_sub(cxios_date date1_c, cxios_date date2_c)"),
@@ -97,6 +107,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -108,6 +120,8 @@
     return (date1 == date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_neq(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -119,6 +133,8 @@
     return (date1 != date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_lt(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -130,6 +146,8 @@
     return (date1 < date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_le(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -141,6 +159,8 @@
     return (date1 <= date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_gt(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -152,6 +172,8 @@
     return (date1 > date2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_date_ge(cxios_date date1_c, cxios_date date2_c)
+  TRY
   {
     xios::CDate date1 = xios::CDate(getCalendar("bool cxios_date_eq(cxios_date date1_c, cxios_date date2_c)"),
@@ -163,6 +185,8 @@
     return (date1 >= date2);
   }
+  CATCH_DUMP_STACK
 
   int cxios_date_get_second_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_second_of_year(cxios_date date_c)"),
@@ -171,6 +195,8 @@
     return date.getSecondOfYear();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_day_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_day_of_year(cxios_date date_c)"),
@@ -179,6 +205,8 @@
     return date.getDayOfYear();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_fraction_of_year(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_fraction_of_year(cxios_date date_c)"),
@@ -187,6 +215,8 @@
     return date.getFractionOfYear();
   }
+  CATCH_DUMP_STACK
 
   int cxios_date_get_second_of_day(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_second_of_day(cxios_date date_c)"),
@@ -195,6 +225,8 @@
     return date.getSecondOfDay();
   }
+  CATCH_DUMP_STACK
 
   double cxios_date_get_fraction_of_day(cxios_date date_c)
+  TRY
   {
     xios::CDate date = xios::CDate(getCalendar("int cxios_date_get_fraction_of_day(cxios_date date_c)"),
@@ -203,3 +235,4 @@
     return date.getFractionOfDay();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icdomain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icdomain.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icdomain.cpp	(revision 1642)
@@ -29,4 +29,5 @@
    
    void cxios_domain_handle_create (XDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -36,6 +37,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_domaingroup_handle_create (XDomainGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -46,8 +49,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_domain_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -58,6 +63,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_domaingroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,3 +74,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icduplicate_scalar_to_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icduplicate_scalar_to_axis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icduplicate_scalar_to_axis.cpp	(revision 1642)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_duplicate_scalar_to_axis_handle_create(XDuplicateScalarToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_duplicate_scalar_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icduration.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icduration.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icduration.cpp	(revision 1642)
@@ -1,2 +1,4 @@
+#include "xios.hpp"
+
 #include "icutil.hpp"
 #include "icdate.hpp"
@@ -6,4 +8,5 @@
 {
   void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -12,6 +15,8 @@
       ERROR("void cxios_duration_convert_to_string(cxios_duration dur_c, char* str, int str_size)", << "Input string is too short");
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_convert_from_string(const char* str, int str_size)
+  TRY
   {
     std::string dur_str;
@@ -23,6 +28,8 @@
     return { dur.year, dur.month, dur.day, dur.hour, dur.minute, dur.second, dur.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_add(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -32,6 +39,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_sub(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -41,6 +50,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_mult(double val, cxios_duration dur_c)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -48,6 +59,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   cxios_duration cxios_duration_neg(cxios_duration dur_c)
+  TRY
   {
     xios::CDuration dur( dur_c.year, dur_c.month, dur_c.day, dur_c.hour, dur_c.minute, dur_c.second, dur_c.timestep );
@@ -55,6 +68,8 @@
     return { res.year, res.month, res.day, res.hour, res.minute, res.second, res.timestep };
   }
+  CATCH_DUMP_STACK
 
   bool cxios_duration_eq(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -62,6 +77,8 @@
     return (dur1 == dur2);
   }
+  CATCH_DUMP_STACK
 
   bool cxios_duration_neq(cxios_duration dur1_c, cxios_duration dur2_c)
+  TRY
   {
     xios::CDuration dur1( dur1_c.year, dur1_c.month, dur1_c.day, dur1_c.hour, dur1_c.minute, dur1_c.second, dur1_c.timestep );
@@ -69,3 +86,4 @@
     return (dur1 != dur2);
   }
+  CATCH_DUMP_STACK
 }
Index: XIOS/dev/branch_openmp/src/interface/c/icexpand_domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icexpand_domain.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icexpand_domain.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_expand_domain_handle_create(XExpandDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_expand_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icextract_to_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icextract_to_axis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icextract_to_axis.cpp	(revision 1642)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_extract_domain_to_axis_handle_create(XExtractDomainToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_extract_domain_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icextract_to_scalar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icextract_to_scalar.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icextract_to_scalar.cpp	(revision 1642)
@@ -26,4 +26,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_extract_axis_to_scalar_handle_create(XExtractAxisToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -33,7 +34,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_extract_axis_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,4 +47,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icfield.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icfield.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icfield.cpp	(revision 1642)
@@ -35,4 +35,5 @@
    
    void cxios_field_handle_create (XFieldPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -42,6 +43,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_fieldgroup_handle_create (XFieldGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -51,9 +54,10 @@
       CTimer::get("XIOS").suspend() ;
    }
-
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_field_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -63,6 +67,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_fieldgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -72,4 +78,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 // -----------------------------------------------------------------------------------------------------   
@@ -78,4 +85,5 @@
 
   void cxios_field_is_active (XFieldPtr field_hdl, bool at_current_timestep, bool* ret)
+  TRY
   {
     CTimer::get("XIOS").resume() ;
@@ -83,4 +91,5 @@
     CTimer::get("XIOS").suspend() ;
   }
+  CATCH_DUMP_STACK
 
 // -----------------------------------------------------------------------------------------------------
@@ -88,4 +97,5 @@
 // -----------------------------------------------------------------------------------------------------
   void cxios_field_get_domain_handle(XDomainPtr * domain_hdl_ret, XFieldPtr field_hdl, int domainIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -93,6 +103,8 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_field_get_axis_handle(XAxisPtr * axis_hdl_ret, XFieldPtr field_hdl, int axisIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -100,6 +112,8 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 
   void cxios_field_get_scalar_handle(XScalarPtr * scalar_hdl_ret, XFieldPtr field_hdl, int scalarIndex)
+  TRY
   {
      CTimer::get("XIOS").resume() ;
@@ -107,3 +121,4 @@
      CTimer::get("XIOS").suspend();
   }
+  CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icfile.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icfile.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icfile.cpp	(revision 1642)
@@ -28,4 +28,5 @@
    
    void cxios_file_handle_create (XFilePtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_filegroup_handle_create (XFileGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_file_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -55,6 +60,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_filegroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -64,3 +71,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icgenerate_rectilinear_domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icgenerate_rectilinear_domain.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icgenerate_rectilinear_domain.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_generate_rectilinear_domain_handle_create(XGenDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_generate_rectilinear_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icgrid.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icgrid.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icgrid.cpp	(revision 1642)
@@ -27,4 +27,5 @@
   
    void cxios_grid_handle_create (XGridPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -34,6 +35,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_gridgroup_handle_create (XGridGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -43,8 +46,10 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_grid_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,6 +59,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_gridgroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -63,3 +70,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icinterpolate.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icinterpolate.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icinterpolate.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_interpolate_domain_handle_create(XInterpolateDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_interpolate_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,7 +48,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
     // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_interpolate_axis_handle_create(XInterpolateAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -55,7 +60,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_interpolate_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -66,3 +73,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icinverse_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icinverse_axis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icinverse_axis.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_inverse_axis_handle_create(XInverseAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_inverse_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icreduce_axis_to_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icreduce_axis_to_axis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icreduce_axis_to_axis.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_axis_to_axis_handle_create(XReduceAxisToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_axis_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icreduce_scalar_to_scalar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icreduce_scalar_to_scalar.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icreduce_scalar_to_scalar.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_scalar_to_scalar_handle_create(XReduceScalarToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_scalar_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icreduce_to_axis.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icreduce_to_axis.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icreduce_to_axis.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_domain_to_axis_handle_create(XReduceDomainToAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_domain_to_axis_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icreduce_to_scalar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icreduce_to_scalar.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icreduce_to_scalar.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reduce_axis_to_scalar_handle_create(XReduceAxisToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_axis_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,6 +48,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_reduce_domain_to_scalar_handle_create(XReduceDomainToScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -54,7 +59,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reduce_domain_to_scalar_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -65,4 +72,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icreorder_domain.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icreorder_domain.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icreorder_domain.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_reorder_domain_handle_create(XReorderDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_reorder_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,3 +48,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icscalar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icscalar.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icscalar.cpp	(revision 1642)
@@ -28,4 +28,5 @@
 
    void cxios_scalar_handle_create (XScalarPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -35,6 +36,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_scalargroup_handle_create (XScalarGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -44,8 +47,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_scalar_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,6 +61,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_scalargroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,4 +74,5 @@
 
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/ictemporal_splitting.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/ictemporal_splitting.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/ictemporal_splitting.cpp	(revision 1642)
@@ -27,4 +27,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_temporal_splitting_handle_create(XTemporalSplittingPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -34,7 +35,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_temporal_splitting_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -45,4 +48,5 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/icvariable.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/icvariable.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/icvariable.cpp	(revision 1642)
@@ -29,4 +29,5 @@
    
    void cxios_variable_handle_create (XVariablePtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -36,6 +37,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
    
    void cxios_variablegroup_handle_create (XVariableGroupPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id; 
@@ -45,8 +48,10 @@
       CTimer::get("XIOS").suspend() ;
     }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
 
    void cxios_variable_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -57,6 +62,8 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    void cxios_variablegroup_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -68,4 +75,5 @@
 
    }
+   CATCH_DUMP_STACK
    
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/iczoom.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/iczoom.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/iczoom.cpp	(revision 1642)
@@ -28,4 +28,5 @@
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_zoom_axis_handle_create (XZoomAxisPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -35,7 +36,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_zoom_axis_valid_id (bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -46,7 +49,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // ------------------------ CrÃ©ation des handle -----------------------------
    void cxios_zoom_domain_handle_create(XZoomDomainPtr * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -56,7 +61,9 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 
    // -------------------- VÃ©rification des identifiants -----------------------
    void cxios_zoom_domain_valid_id(bool * _ret, const char * _id, int _id_len)
+   TRY
    {
       std::string id;
@@ -67,3 +74,4 @@
       CTimer::get("XIOS").suspend() ;
    }
+   CATCH_DUMP_STACK
 } // extern "C"
Index: XIOS/dev/branch_openmp/src/interface/c/oasis_cinterface.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/interface/c/oasis_cinterface.cpp	(revision 1545)
+++ XIOS/dev/branch_openmp/src/interface/c/oasis_cinterface.cpp	(revision 1642)
@@ -1,5 +1,5 @@
 #include "oasis_cinterface.hpp"
 #include <string>
-using namespace ep_lib;
+#include "mpi.hpp"
 
 namespace xios
@@ -21,26 +21,26 @@
   }
 
-  void oasis_get_localcomm(MPI_Comm& comm)
+  void oasis_get_localcomm(ep_lib::MPI_Comm& comm)
   {
-    MPI_Fint f_comm ;
+    ep_lib::MPI_Fint f_comm ;
     
     fxios_oasis_get_localcomm(&f_comm) ;
-    //comm=EP_Comm_f2c(f_comm.mpi_fint) ;
+    //comm=MPI_Comm_f2c(f_comm) ;
   }
  
-  void oasis_get_intracomm(MPI_Comm& comm_client_server,const std::string& server_id)
+  void oasis_get_intracomm(ep_lib::MPI_Comm& comm_client_server,const std::string& server_id)
   {
-    MPI_Fint f_comm ;
+    ep_lib::MPI_Fint f_comm ;
     
     fxios_oasis_get_intracomm(&f_comm,server_id.data(),server_id.size()) ;
-    //comm_client_server=EP_Comm_f2c(f_comm.mpi_fint) ;
+    //comm_client_server=MPI_Comm_f2c(f_comm) ;
   }
  
-  void oasis_get_intercomm(MPI_Comm& comm_client_server,const std::string& server_id)
+  void oasis_get_intercomm(ep_lib::MPI_Comm& comm_client_server,const std::string& server_id)
   {
-    MPI_Fint f_comm ;
+    ep_lib::MPI_Fint f_comm ;
     
     fxios_oasis_get_intercomm(&f_comm,server_id.data(),server_id.size()) ;
-    //comm_client_server=EP_Comm_f2c(f_comm.mpi_fint) ;
+    //comm_client_server=MPI_Comm_f2c(f_comm) ;
   }
 }
