Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1847)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.cpp	(revision 1848)
@@ -37,5 +37,5 @@
       , calendar(), hasClient(false), hasServer(false)
       , isPostProcessed(false), finalized(false)
-      , idServer_(), client(nullptr), server(nullptr)
+      , client(nullptr), server(nullptr)
       , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false)
 
@@ -46,5 +46,5 @@
       , calendar(), hasClient(false), hasServer(false)
       , isPostProcessed(false), finalized(false)
-      , idServer_(), client(nullptr), server(nullptr)
+      , client(nullptr), server(nullptr)
       , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false)
    { /* Ne rien faire de plus */ }
@@ -280,6 +280,6 @@
    TRY
    {
-      // Estimated minimum event size for small events (10 is an arbitrary constant just for safety)
-     const size_t minEventSize = CEventClient::headerSize + getIdServer().size() + 10 * sizeof(int);
+      // Estimated minimum event size for small events (20 is an arbitrary constant just for safety)
+     const size_t minEventSize = CEventClient::headerSize + 20 * sizeof(int);
 
       // Ensure there is at least some room for 20 of such events in the buffers
@@ -463,5 +463,4 @@
         if (commRank==0) CXios::getServicesManager()->getServiceType(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type) ;
         MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ;
-        setIdServer(CXios::getContextsManager()->getServerContextName(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type, getContextId())) ;
         setCurrent(getId()) ; // getCurrent/setCurrent may be supress, it can cause a lot of trouble
       }
@@ -474,5 +473,4 @@
         if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultGathererId, 0, type) ;
         MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ;
-        setIdServer(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultGathererId, 0, type, getContextId())) ;
       }
       else
@@ -484,5 +482,4 @@
         if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ;
         MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ;
-        setIdServer(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultServerId, 0, type, getContextId())) ;
       }
 
@@ -804,8 +801,4 @@
        {
          CMessage msg;
-         if (hasServer)
-           msg<<this->getIdServer(i);
-         else
-           msg<<this->getIdServer();
          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -822,7 +815,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;
-      get(id)->recvPostProcessingGlobalAttributes(*buffer);
+      getCurrent()->recvPostProcessingGlobalAttributes(*buffer);
    }
    CATCH
@@ -1520,8 +1511,4 @@
        {
          CMessage msg;
-         if (hasServer)
-           msg<<this->getIdServer(i);
-         else
-           msg<<this->getIdServer();
          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -1539,7 +1526,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;
-      get(id)->closeDefinition();
+      getCurrent()->closeDefinition();
    }
    CATCH
@@ -1560,7 +1545,7 @@
            CMessage msg;
            if (hasServer)
-             msg<<this->getIdServer(i)<<step;
+             msg<<step;
            else
-             msg<<this->getIdServer()<<step;
+             msg<<step;
            const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
            for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -1578,7 +1563,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;
-      get(id)->recvUpdateCalendar(*buffer);
+      getCurrent()->recvUpdateCalendar(*buffer);
    }
    CATCH
@@ -1613,8 +1596,4 @@
        {
          CMessage msg;
-         if (hasServer)
-           msg<<this->getIdServer(i);
-         else
-           msg<<this->getIdServer();
          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -1632,7 +1611,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;
-      get(id)->recvCreateFileHeader(*buffer);
+      getCurrent()->recvCreateFileHeader(*buffer);
    }
    CATCH
@@ -1661,8 +1638,4 @@
        {
          CMessage msg;
-         if (hasServer)
-           msg<<this->getIdServer(i);
-         else
-           msg<<this->getIdServer();
          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -1680,6 +1653,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;      
+      // nothing to do, no call ??!!    
    }
    CATCH
@@ -1699,8 +1671,4 @@
        {
          CMessage msg;
-         if (hasServer)
-           msg<<this->getIdServer(i);
-         else
-           msg<<this->getIdServer();
          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
@@ -1718,7 +1686,5 @@
    {
       CBufferIn* buffer=event.subEvents.begin()->buffer;
-      string id;
-      *buffer>>id;
-      get(id)->recvPostProcessing(*buffer);
+      getCurrent()->recvPostProcessing(*buffer);
    }
    CATCH
@@ -1733,53 +1699,5 @@
    CATCH_DUMP_ATTR
 
-   void CContext::setIdServer(const StdString& idServer)
-   TRY
-   {
-      idServer_=idServer ;
-   }
-   CATCH_DUMP_ATTR
-
-   
-   const StdString& CContext::getIdServer()
-   TRY
-   {
-      return idServer_;
-   }
-   CATCH_DUMP_ATTR
-
-   const StdString& CContext::getIdServer(const int i)
-   TRY
-   {
-//     return idServer_ + std::to_string(static_cast<unsigned long long>(i));
-      return primServerId_[i] ;
-   }
-   CATCH_DUMP_ATTR
-
-/*
-   const StdString& CContext::getIdServer()
-   TRY
-   {
-      if (hasClient)
-      {
-        idServer_ = this->getId();
-        idServer_ += "_server";
-        return idServer_;
-      }
-      if (hasServer) return (this->getId());
-   }
-   CATCH_DUMP_ATTR
-
-   const StdString& CContext::getIdServer(const int i)
-   TRY
-   {
-     idServer_ = this->getId();
-     idServer_ += "_server_";
-     idServer_ += std::to_string(static_cast<unsigned long long>(i));
-     return idServer_;
-   }
-   CATCH_DUMP_ATTR
-*/
-
-
+ 
    /*!
    \brief Do some simple post processings after parsing xml file
@@ -2329,7 +2247,5 @@
   {
     CBufferIn* buffer=event.subEvents.begin()->buffer;
-    string id;
-    *buffer>>id;
-    get(id)->recvRegistry(*buffer);
+    getCurrent()->recvRegistry(*buffer);
   }
   CATCH
@@ -2361,8 +2277,4 @@
         {
            CMessage msg ;
-           if (hasServer)
-             msg<<this->getIdServer(i);
-           else
-             msg<<this->getIdServer();
            if (contextClientTmp->clientRank==0) msg<<*registryOut ;
            const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1847)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/node/context.hpp	(revision 1848)
@@ -176,8 +176,4 @@
          void sendFinalizeClient(CContextClient* contextClient, const string& contextClientId);
 
-
-         const StdString& getIdServer();
-         void setIdServer(const StdString& idServer);
-         const StdString& getIdServer(const int srvPoolNb);
          std::string getContextId() {return contextId_;}
 
@@ -303,5 +299,4 @@
          bool finalized;
          int countChildContextFinalized_;        //!< Counter of child contexts (for now it is the number of secondary server pools)
-         StdString idServer_;
          CGarbageCollector garbageCollector;
          std::list<MPI_Comm> comms; //!< Communicators allocated internally
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.cpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.cpp	(revision 1847)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.cpp	(revision 1848)
@@ -25,14 +25,4 @@
 
   const StdString& CObject::getId(void) const
-  {
-    return this->id;
-  }
-
-  const StdString& CObject::getIdServer() 
-  {
-    return this->id;
-  }
-
-  const StdString& CObject::getIdServer(int nSrvpool) 
   {
     return this->id;
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.hpp	(revision 1847)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/object.hpp	(revision 1848)
@@ -17,6 +17,4 @@
       /// Accesseurs ///
       const StdString& getId(void) const;
-      virtual const StdString& getIdServer() ;
-      virtual const StdString& getIdServer(int nsrvPool) ;
 
       virtual StdString dumpClassAttributes(void);
Index: /XIOS/dev/dev_ym/XIOS_COUPLING/src/object_template_impl.hpp
===================================================================
--- /XIOS/dev/dev_ym/XIOS_COUPLING/src/object_template_impl.hpp	(revision 1847)
+++ /XIOS/dev/dev_ym/XIOS_COUPLING/src/object_template_impl.hpp	(revision 1848)
@@ -205,5 +205,5 @@
        {
          // Account for extra header info
-         minimumSize += CEventClient::headerSize + getIdServer().size() + sizeof(size_t);
+         minimumSize += CEventClient::headerSize + getId().size() + sizeof(size_t);
 
          const std::list<int>& ranks = client->getRanksServerLeader();
@@ -241,5 +241,23 @@
     {
       CMessage msg;
-      msg<<this->getIdServer(); // pb with context attribute -> to check : for now seem to be never used for context...
+      msg<<this->getId(); 
+      msg << attr.getName();
+      msg << attr;
+      const std::list<int>& ranks = client->getRanksServerLeader();
+      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)
+        event.push(*itRank,1,msg);
+      client->sendEvent(event);
+    }
+    else client->sendEvent(event);
+  }
+
+/* specialisation for context, because context Id on client is not the same on server, and no need to transfer context Id */
+  template <>
+  void CObjectTemplate<CContext>::sendAttributToServer(CAttribute& attr, CContextClient* client)
+  {
+    CEventClient event(getType(),EVENT_ID_SEND_ATTRIBUTE);
+    if (client->isServerLeader())
+    {
+      CMessage msg;
       msg << attr.getName();
       msg << attr;
@@ -296,4 +314,24 @@
   }
 
+/* specialisation for context, because context Id on client is not the same on server and no need to transfer context Id */
+  template <>
+  void CObjectTemplate<CContext>::recvAttributFromClient(CEventServer& event)
+  {
+
+    CBufferIn* buffer=event.subEvents.begin()->buffer;
+    string attrId;
+    CAttributeMap & attrMap = *CContext::getCurrent();
+    *buffer>>attrId;
+    CAttribute* attr=attrMap[attrId];
+    info(50) << "attribut recu " << attrId << "  ";
+    if (attr->isEmpty()) info(50) << "--> empty" << endl;
+    else info(50) /*<attr->getValue()*/ << endl;
+    *buffer>>*attr;
+     info(50) << "attribut recu " << attrId << "  ";
+    if (attr->isEmpty()) info(50) << "--> empty" << endl;
+    else info(50) /*attr->getValue()*/ << endl;
+  }
+
+
    template <class T>
    bool CObjectTemplate<T>::dispatchEvent(CEventServer& event)
