Index: XIOS/dev/branch_openmp/src/buffer_client.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/buffer_client.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/buffer_client.cpp	(revision 1342)
@@ -30,5 +30,6 @@
     buffer[1] = new char[bufferSize];
     retBuffer = new CBufferOut(buffer[current], bufferSize);
-    //info(10) << "CClientBuffer: allocated 2 x " << bufferSize << " bytes for server " << serverRank << " with a maximum of " << maxBufferedEvents << " buffered events" << endl;
+    #pragma omp critical (_output)
+    info(10) << "CClientBuffer: allocated 2 x " << bufferSize << " bytes for server " << serverRank << " with a maximum of " << maxBufferedEvents << " buffered events" << endl;
   }
 
Index: XIOS/dev/branch_openmp/src/calendar.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/calendar.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/calendar.cpp	(revision 1342)
@@ -117,5 +117,6 @@
       const CDate& CCalendar::update(int step)
       {
-        //info(20) << "update step : " << step << " timestep " << this->timestep << std::endl;
+        #pragma omp critical (_output)
+        info(20) << "update step : " << step << " timestep " << this->timestep << std::endl;
         return (this->currentDate = this->getInitDate() + step * this->timestep);
       }
Index: XIOS/dev/branch_openmp/src/client.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/client.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/client.cpp	(revision 1342)
@@ -26,4 +26,6 @@
     StdOFStream CClient::m_errorStream;
 
+    StdOFStream CClient::array_infoStream[16];
+
     void CClient::initialize(const string& codeId,MPI_Comm& localComm,MPI_Comm& returnComm)
     {
@@ -186,7 +188,7 @@
 
         MPI_Intercomm_create(contextComm,0,CXios::globalComm,serverLeader,10+globalRank,&contextInterComm) ;
-        #pragma omp critical (std_output)
-        {
-          //info(10)<<"Register new Context : "<<id<<endl ;
+        #pragma omp critical (_output)
+        {
+          info(10)<<"Register new Context : "<<id<<endl ;
         }
 
@@ -254,15 +256,19 @@
         MPI_Finalize() ;
       }
+      #pragma omp critical (_output)
+      info(20) << "Client side context is finalized"<<endl ;
       
-      //info(20) << "Client side context is finalized"<<endl ;
-      //report(0) <<" Performance report : Whole time from XIOS init and finalize: "<< CTimer::get("XIOS init/finalize").getCumulatedTime()<<" s"<<endl ;
-      //report(0) <<" Performance report : total time spent for XIOS : "<< CTimer::get("XIOS").getCumulatedTime()<<" s"<<endl ;
-      //report(0)<< " Performance report : time spent for waiting free buffer : "<< CTimer::get("Blocking time").getCumulatedTime()<<" s"<<endl ;
-      //report(0)<< " Performance report : Ratio : "<< CTimer::get("Blocking time").getCumulatedTime()/CTimer::get("XIOS init/finalize").getCumulatedTime()*100.<<" %"<<endl ;
-      //report(0)<< " Performance report : This ratio must be close to zero. Otherwise it may be usefull to increase buffer size or numbers of server"<<endl ;
-//      report(0)<< " Memory report : Current buffer_size : "<<CXios::bufferSize<<endl ;
-      //report(0)<< " Memory report : Minimum buffer size required : " << CClientBuffer::maxRequestSize << " bytes" << endl ;
-      //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 ;
+
+      /*#pragma omp critical (_output)
+      {
+        report(0) <<" Performance report : Whole time from XIOS init and finalize: "<< CTimer::get("XIOS init/finalize").getCumulatedTime()<<" s"<<endl ;
+        report(0) <<" Performance report : total time spent for XIOS : "<< CTimer::get("XIOS").getCumulatedTime()<<" s"<<endl ;
+        report(0)<< " Performance report : time spent for waiting free buffer : "<< CTimer::get("Blocking time").getCumulatedTime()<<" s"<<endl ;
+        report(0)<< " Performance report : Ratio : "<< CTimer::get("Blocking time").getCumulatedTime()/CTimer::get("XIOS init/finalize").getCumulatedTime()*100.<<" %"<<endl ;
+        report(0)<< " Performance report : This ratio must be close to zero. Otherwise it may be usefull to increase buffer size or numbers of server"<<endl ;
+        report(0)<< " Memory report : Minimum buffer size required : " << CClientBuffer::maxRequestSize << " bytes" << endl ;
+        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 ;
+      }*/
    }
 
@@ -307,9 +313,10 @@
     void CClient::openInfoStream(const StdString& fileName)
     {
-      std::filebuf* fb = m_infoStream.rdbuf();
-      openStream(fileName, ".out", fb);
-
-      info.write2File(fb);
-      report.write2File(fb);
+      info_FB[omp_get_thread_num()] = array_infoStream[omp_get_thread_num()].rdbuf();
+          
+      openStream(fileName, ".out", info_FB[omp_get_thread_num()]);
+
+      info.write2File(info_FB[omp_get_thread_num()]);
+      report.write2File(info_FB[omp_get_thread_num()]);
     }
 
Index: XIOS/dev/branch_openmp/src/client.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/client.hpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/client.hpp	(revision 1342)
@@ -56,4 +56,6 @@
       #pragma omp threadprivate(m_errorStream)
 
+      static StdOFStream array_infoStream[16];
+
       static void openStream(const StdString& fileName, const StdString& ext, std::filebuf* fb);
   };
Index: XIOS/dev/branch_openmp/src/context_server.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/context_server.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/context_server.cpp	(revision 1342)
@@ -254,5 +254,6 @@
     {
       finished=true;
-      //info(20)<<"Server Side context <"<<context->getId()<<"> finalized"<<endl;
+      #pragma omp critical (_output)
+      info(20)<<"Server Side context <"<<context->getId()<<"> finalized"<<endl;
       std::map<int, StdSize>::const_iterator itbMap = mapBufferSize_.begin(),
                                              iteMap = mapBufferSize_.end(), itMap;
Index: XIOS/dev/branch_openmp/src/cxios.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/cxios.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/cxios.cpp	(revision 1342)
@@ -124,4 +124,5 @@
     if (printLogs2Files)
     {
+      #pragma omp critical
       CClient::openInfoStream(clientFile);
       CClient::openErrorStream(clientFile);
@@ -139,4 +140,5 @@
      if (CClient::getRank()==0)
      {
+       #pragma omp critical (_output)
        info(80)<<"Write data base Registry"<<endl<<globalRegistry->toString()<<endl ;
        globalRegistry->toFile("xios_registry.bin") ;
Index: XIOS/dev/branch_openmp/src/log.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/log.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/log.cpp	(revision 1342)
@@ -1,8 +1,28 @@
 #include "log.hpp"
+#include <string>
+#include <iostream>
+#include <string>
 
 namespace xios
 {
+  std::filebuf* info_FB[16];
+
+
   CLog info("info") ;
   CLog report("report") ;
   CLog error("error", cerr.rdbuf()) ;
+
+  
+  CLog& CLog::operator()(int l)
+    {
+      if (l<=level)
+      {
+        omp_set_lock( &mutex );
+        rdbuf(strBuf_array[omp_get_thread_num()]); 
+        *this<<"-> "<<name<<" : " ;
+        omp_unset_lock( &mutex );
+      }
+      else rdbuf(NULL) ;
+      return *this;
+    }
 }
Index: XIOS/dev/branch_openmp/src/log.hpp
===================================================================
--- XIOS/dev/branch_openmp/src/log.hpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/log.hpp	(revision 1342)
@@ -5,4 +5,6 @@
 #include <iostream>
 #include <string>
+#include <stdio.h>
+#include <omp.h>
 
 namespace xios
@@ -14,15 +16,17 @@
     public :
     CLog(const string& name_, std::streambuf* sBuff = cout.rdbuf())
-      : ostream(sBuff), level(0), name(name_), strBuf_(sBuff) {}
-    CLog& operator()(int l)
+      : ostream(sBuff), level(0), name(name_), strBuf_(sBuff) 
     {
-      if (l<=level)
-      {
-        rdbuf(strBuf_);
-        *this<<"-> "<<name<<" : " ;
-      }
-      else rdbuf(NULL) ;
-      return *this;
+      omp_init_lock( &mutex );
+      for(int i=0; i<16; i++)
+        strBuf_array[i] = sBuff;
     }
+
+    ~CLog()
+    {
+      omp_destroy_lock( &mutex );
+    }
+
+    CLog& operator()(int l);
     void setLevel(int l) {level=l; }
     int getLevel() {return level ;}
@@ -46,9 +50,16 @@
      * \param [in] pointer to new streambuf
     */
-    void changeStreamBuff(std::streambuf* sBuff) { strBuf_ = sBuff; rdbuf(sBuff); }
+    void changeStreamBuff(std::streambuf* sBuff) 
+    { 
+      strBuf_ = sBuff; 
+      strBuf_array[omp_get_thread_num()] = sBuff;
+      rdbuf(sBuff);
+    }
 
     int level ;
     string name ;
     std::streambuf* strBuf_;
+    std::streambuf* strBuf_array[16];
+    omp_lock_t mutex;
   };
 
@@ -56,4 +67,6 @@
   extern CLog report;
   extern CLog error;
+
+  extern std::filebuf* info_FB[16];
 }
 #endif
Index: XIOS/dev/branch_openmp/src/node/context.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/context.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/node/context.cpp	(revision 1342)
@@ -1205,8 +1205,11 @@
    void CContext::updateCalendar(int step)
    {
-      //info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl;
+      #pragma omp critical (_output)
+      info(50) << "updateCalendar : before : " << calendar->getCurrentDate() << endl;
       calendar->update(step);
-      //info(50) << "updateCalendar : after : " << calendar->getCurrentDate() << endl;
+      #pragma omp critical (_output)
+      info(50) << "updateCalendar : after : " << calendar->getCurrentDate() << endl;
 #ifdef XIOS_MEMTRACK_LIGHT
+      #pragma omp critical (_output)
       info(50) << " Current memory used by XIOS : "<<  MemTrack::getCurrentMemorySize()*1.0/(1024*1024)<<" Mbyte, at timestep "<<step<<" of context "<<this->getId()<<endl ;
 #endif
Index: XIOS/dev/branch_openmp/src/node/field.cpp
===================================================================
--- XIOS/dev/branch_openmp/src/node/field.cpp	(revision 1341)
+++ XIOS/dev/branch_openmp/src/node/field.cpp	(revision 1342)
@@ -316,9 +316,11 @@
     while (currentDate >= lastDataRequestedFromServer)
     {
-      //info(20) << "currentDate : " << currentDate << endl ;
-      //info(20) << "lastDataRequestedFromServer : " << lastDataRequestedFromServer << endl ;
-      //info(20) << "file->output_freq.getValue() : " << file->output_freq.getValue() << endl ;
-      //info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ;
-
+      #pragma omp critical (_output)
+      {
+        info(20) << "currentDate : " << currentDate << endl ;
+        info(20) << "lastDataRequestedFromServer : " << lastDataRequestedFromServer << endl ;
+        info(20) << "file->output_freq.getValue() : " << file->output_freq.getValue() << endl ;
+        info(20) << "lastDataRequestedFromServer + file->output_freq.getValue() : " << lastDataRequestedFromServer + file->output_freq << endl ;
+      }
       dataRequested |= sendReadDataRequest(lastDataRequestedFromServer + file->output_freq);
     }
