Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/context_server.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/context_server.cpp	(revision 2122)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/context_server.cpp	(revision 2123)
@@ -54,5 +54,7 @@
   //  if (contextInfo.serviceType != CServicesManager::CLIENT) // we must have an event scheduler => to be retrieve from the associated services
   //  {
-      if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+      //if (!isAttachedModeEnabled()) eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+      eventScheduler_=CXios::getPoolRessource()->getService(contextInfo.serviceId,contextInfo.partitionId)->getEventScheduler() ;
+
   //  }
 
@@ -316,12 +318,23 @@
       if (event->isFull())
       {
-        if (!scheduled && eventScheduler_) // Skip event scheduling for attached mode and reception on client side
+        if (!scheduled && !isAttachedModeEnabled()) // Skip event scheduling for attached mode and reception on client side
         {
           eventScheduler_->registerEvent(currentTimeLine,hashId);
           scheduled=true;
         }
-        else if (!eventScheduler_ || eventScheduler_->queryEvent(currentTimeLine,hashId) )
+        else if (isAttachedModeEnabled() || eventScheduler_->queryEvent(currentTimeLine,hashId) )
         {
-          MPI_Barrier(intraComm) ;
+          MPI_Request req ;
+          MPI_Status status ;
+
+          MPI_Ibarrier(intraComm,&req) ;
+          int flag=false ;
+          do  
+          {
+            eventScheduler_->checkEvent()  ;
+            MPI_Test(&req,&flag,&status) ;
+          } while (!flag) ;
+
+          //MPI_Barrier(intraComm) ;
          // When using attached mode, synchronise the processes to avoid that differents event be scheduled by differents processes
          // The best way to properly solve this problem will be to use the event scheduler also in attached mode
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 2122)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 2123)
@@ -716,10 +716,7 @@
   CATCH_DUMP_ATTR
 
-   
-
-  bool CContext::eventLoop(bool enableEventsProcessing)
+  bool CContext::scheduledEventLoop(bool enableEventsProcessing) 
   {
-    bool finished=true; 
-    bool out; 
+    bool out, finished; 
     size_t timeLine=timeLine_ ;
     if (serviceType_==CServicesManager::CLIENT)
@@ -731,29 +728,36 @@
     do
     { 
-      if (client!=nullptr && !finalized) client->checkBuffers();
-    
-      for (int i = 0; i < clientPrimServer.size(); ++i)
-      {
-        if (!finalized) clientPrimServer[i]->checkBuffers();
-        if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing);
-      }
-
-      for (auto couplerOut : couplerOutClient_)
-        if (!finalized) couplerOut.second->checkBuffers();
-    
-      for (auto couplerIn : couplerInClient_)
-        if (!finalized) couplerIn.second->checkBuffers();
-    
-      for (auto couplerOut : couplerOutServer_)
-        if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing);
-
-      for (auto couplerIn : couplerInServer_)
-        if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing);
-    
-      if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing);
-  
+      finished=eventLoop(enableEventsProcessing) ;
       if (serviceType_==CServicesManager::CLIENT) out = eventScheduler_->queryEvent(timeLine,hashId_) ;
       else out=true ;
     }  while(!out) ;
+    
+    return finished ;
+  }
+
+  bool CContext::eventLoop(bool enableEventsProcessing)
+  {
+    bool  finished; 
+    if (client!=nullptr && !finalized) client->checkBuffers();
+    
+    for (int i = 0; i < clientPrimServer.size(); ++i)
+    {
+      if (!finalized) clientPrimServer[i]->checkBuffers();
+      if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing);
+    }
+
+    for (auto couplerOut : couplerOutClient_)
+      if (!finalized) couplerOut.second->checkBuffers();
+    
+    for (auto couplerIn : couplerInClient_)
+      if (!finalized) couplerIn.second->checkBuffers();
+    
+    for (auto couplerOut : couplerOutServer_)
+      if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing);
+
+    for (auto couplerIn : couplerInServer_)
+      if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing);
+    
+    if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing);
     return finalized && finished ;
   }
@@ -1059,10 +1063,10 @@
           couplersReady &= ready ;
         }
-        this->eventLoop() ;
+        this->scheduledEventLoop() ;
 
       } while (!couplersReady) ;
       
       first=false ;
-      this->eventLoop() ;
+      this->scheduledEventLoop() ;
 
     } while (!workflowGraphIsCompleted) ;
@@ -1198,5 +1202,5 @@
       ok = true ;
       for(auto& couplerOutClient : couplerOutClient_) ok &= isCouplerInCloseDefinition(couplerOutClient.second) ;
-      this->eventLoop() ;
+      this->scheduledEventLoop() ;
     } while (!ok) ;
 
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 2122)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 2123)
@@ -109,4 +109,5 @@
          // Put sever or client into loop state
          bool eventLoop(bool enableEventsProcessing=true);
+         bool scheduledEventLoop(bool enableEventsProcessing=true) ; 
          void globalEventLoop(void);
 
