Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/client.cpp	(revision 2335)
@@ -106,8 +106,7 @@
           MPI_Comm_split(globalComm, color, commRank, &clientComm) ;
         }
-        else // using oasis to split communicator
-        {
-          if (!is_MPI_Initialized) oasis_init(codeId) ;
-          oasis_get_localcomm(clientComm) ;
+        else
+        {
+	  ERROR("void CClient::initialize(const string& codeId, MPI_Comm& localComm, MPI_Comm& returnComm)", <<"OASIS usage is set. In these conditions, XIOS initialization needs the local_comm created by OASIS."<<endl) ;
         }
       }
@@ -507,6 +506,5 @@
       if (!is_MPI_Initialized)
       {
-        if (CXios::usingOasis) oasis_finalize();
-        else MPI_Finalize() ;
+        if (!CXios::usingOasis) MPI_Finalize() ;
       }
       
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.cpp	(revision 2335)
@@ -27,4 +27,5 @@
   const string CXios::defaultServerId="default_server_id" ;
   const string CXios::defaultGathererId="default_gatherer_id" ;
+  const string CXios::defaultServicesId="default_services_id" ;
   
   bool CXios::xiosStack = true;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.hpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/cxios.hpp	(revision 2335)
@@ -71,5 +71,5 @@
      static const string defaultServerId ;
      static const string defaultGathererId ;
-
+     static const string defaultServicesId ;
 
      static CRegistryManager* registryManager_ ;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services_manager.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services_manager.hpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/manager/services_manager.hpp	(revision 2335)
@@ -23,4 +23,5 @@
     static const int IO_SERVER=2 ;
     static const int OUT_SERVER=3 ;
+    static const int ALL_SERVICES=4 ;
 
     public:
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.cpp	(revision 2335)
@@ -48,4 +48,5 @@
     CEventScheduler* CServer::eventScheduler = 0;
     CServersRessource* CServer::serversRessource_=nullptr ;
+    CThirdPartyDriver* CServer::driver_ =nullptr ;
 
        
@@ -97,7 +98,7 @@
       else // using OASIS
       {
-        if (!is_MPI_Initialized) oasis_init(CXios::xiosCodeId);
-
-        oasis_get_localcomm(serverComm);
+        if (!is_MPI_Initialized) driver_ = new CThirdPartyDriver();
+
+        driver_->getComponentCommunicator( serverComm );
       }
       MPI_Comm_dup(serverComm, &intraComm_);
@@ -200,5 +201,8 @@
           servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultGathererId, CServicesManager::GATHERER, nprocsGatherer, 1) ;
           servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultServerId, CServicesManager::OUT_SERVER, nprocsServer, nbPoolsServer2) ;
+
+
         }
+        servicesManager->createServices(CXios::defaultPoolId,  CXios::defaultServicesId, CServicesManager::ALL_SERVICES, nbRessources, 1) ;
       }
       CTimer::get("XIOS initialize").suspend() ;
@@ -381,8 +385,8 @@
          boost::hash<string> hashString;
          size_t hashId = hashString("oasis_enddef");
-         if (CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->queryEvent(0,hashId))
+         if (CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->queryEvent(0,hashId))
          {
-           CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->popEvent() ;
-           oasis_enddef() ;
+           CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->popEvent() ;
+           driver_->endSynchronizedDefinition() ;
            eventSent=false ;
          }
@@ -397,5 +401,5 @@
            boost::hash<string> hashString;
            size_t hashId = hashString("oasis_enddef");
-           CXios::getPoolRessource()->getService(CXios::defaultServerId,0)->getEventScheduler()->registerEvent(0,hashId);
+           CXios::getPoolRessource()->getService(CXios::defaultServicesId,0)->getEventScheduler()->registerEvent(0,hashId);
            eventSent=true ;
        }
@@ -427,5 +431,5 @@
       if (!is_MPI_Initialized)
       {
-        if (CXios::usingOasis) oasis_finalize();
+        if (CXios::usingOasis) delete driver_;
         else MPI_Finalize() ;
       }
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.hpp	(revision 2334)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/server.hpp	(revision 2335)
@@ -7,4 +7,5 @@
 #include "mpi.hpp"
 #include "event_scheduler.hpp"
+#include "oasis_cinterface.hpp"
 
 namespace xios
@@ -12,4 +13,25 @@
     class CServersRessource ;
 
+    class CThirdPartyDriver
+    {
+      public:
+        CThirdPartyDriver()
+        {
+          oasis_init(CXios::xiosCodeId);
+        };
+        virtual ~CThirdPartyDriver()
+        {
+          oasis_finalize();
+        };
+        virtual void endSynchronizedDefinition()
+        {
+          oasis_enddef();
+        };
+        virtual void getComponentCommunicator(MPI_Comm &intraComm)
+        {
+          oasis_get_localcomm(intraComm);
+        };
+    };
+  
     class CServer
     {
@@ -80,4 +102,6 @@
         static StdOFStream m_errorStream;
         static CServersRessource* serversRessource_  ;
+
+        static CThirdPartyDriver* driver_;
     };
 }
