diff --git a/NPLib/Core/NPSpectraServer.cxx b/NPLib/Core/NPSpectraServer.cxx
index 35331733fab6aec8c09301a09b5c73ffecc952dc..d97e3f1bef1957fa015d3dd9aaa9349427c3bf29 100644
--- a/NPLib/Core/NPSpectraServer.cxx
+++ b/NPLib/Core/NPSpectraServer.cxx
@@ -62,19 +62,18 @@ NPL::SpectraServer::SpectraServer(){
   m_Spectra = new TList;
 
   NPL::SendInformation("NPL::SpectraServer","Server started");
+  m_RawTree = NULL;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 void NPL::SpectraServer::CheckRequest(){
- /*FIXME
   if(m_Server && m_Monitor){
     m_Monitor->ResetInterrupt();
-    TSocket* s = m_Monitor->Select();
-    if(s){
+    TSocket* s = m_Monitor->Select(1);
+    if(s && s!=(TSocket*)-1){
         HandleSocket(s);
     }
   }
-  */
 }
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -107,7 +106,7 @@ void NPL::SpectraServer::HandleSocket(TSocket* s){
     }
 
     // send requested object back
-    static TMessage answer(kMESS_OBJECT);
+    static TMessage answer(kMESS_OBJECT|kMESS_ACK);
     answer.SetCompressionLevel(1);
     answer.Reset();
     TObject* h =NULL;
@@ -125,6 +124,12 @@ void NPL::SpectraServer::HandleSocket(TSocket* s){
       answer.WriteObject(tree);
       s->Send(answer);
     }
+    
+    else if (!strcmp(request, "RequestRawTree")){
+      answer.WriteObject(m_RawTree);
+      s->Send(answer);
+    }
+
 
     else{
       h = m_Spectra->FindObject(request);
diff --git a/NPLib/Core/NPSpectraServer.h b/NPLib/Core/NPSpectraServer.h
index 7c13d4526d319de2922e5052f9ed5f02951ef65c..d1f45d57bf2123615fe00f9936c2e96902843f12 100644
--- a/NPLib/Core/NPSpectraServer.h
+++ b/NPLib/Core/NPSpectraServer.h
@@ -26,6 +26,7 @@
 #include "TServerSocket.h"
 #include "TMonitor.h"
 #include "TMessage.h"
+#include "TTree.h"
 #include "TList.h"
 #include "TH1.h"
 #include "TH2.h"
@@ -52,11 +53,14 @@ namespace NPL{
       void FillSpectra(const std::string& name,const double& valx);
       void FillSpectra(const std::string& name,const double& valx, const double& valy);
       void CheckRequest();
+      // Use for Online purpose 
+      void SetRawTree(TTree* tree){m_RawTree=tree;} ;
 
     private:
       bool m_stop;
       TServerSocket* m_Server;     
       TMonitor* m_Monitor;     
+      TTree* m_RawTree;
       TList* m_Sockets;
       TList* m_Spectra;
   };
diff --git a/NPLib/Online/NPSpectraClient.cxx b/NPLib/Online/NPSpectraClient.cxx
index e90b5f1a2b5b32983ddf8420bba4b2fa522f6db7..ef182be5b03250e48616f7221615e2ccf3bbe24a 100644
--- a/NPLib/Online/NPSpectraClient.cxx
+++ b/NPLib/Online/NPSpectraClient.cxx
@@ -63,7 +63,6 @@ bool NPL::SpectraClient::Connect(){
   m_Sock = new TSocket(m_Address.c_str(),m_Port);
   if(m_Sock->IsValid()){
     NPL::SendInformation("NPL::SpectraClient","Successful connection to spectra server");
-    Sync();
     return true;
   }
   else{
@@ -187,7 +186,7 @@ TTree* NPL::SpectraClient::GetTree(){
   }
 
   TMessage* message=NULL;
-  m_Sock->Send("RequestTree",kMESS_STRING||kMESS_ACK);
+  m_Sock->Send("RequestTree",kMESS_STRING|kMESS_ACK);
 
   if(m_Sock->Recv(message)<=0){
     if(m_Sock){
@@ -211,6 +210,46 @@ TTree* NPL::SpectraClient::GetTree(){
     return NULL;
   }
 }
+////////////////////////////////////////////////////////////////////////////////
+TTree* NPL::SpectraClient::GetRawTree(){
+  if(!m_Sock || !(m_Sock->IsValid())){
+    if(m_Sock){
+      m_Sock->Close("force");
+      delete m_Sock;
+      m_Sock = NULL;
+    }
+    NPL::SendWarning("NPL::SpectraClient","Update failed: Connection lost");
+
+    return NULL;
+  }
+
+  TMessage* message=NULL;
+  m_Sock->Send("RequestRawTree",kMESS_STRING|kMESS_ACK);
+
+  if(m_Sock->Recv(message)<=0){
+    if(m_Sock){
+      m_Sock->Close("force");
+      delete m_Sock;
+      m_Sock = NULL;
+    }
+
+    NPL::SendWarning("NPL::SpectraClient","Update failed: message return unreadable");
+
+    return NULL;
+  }
+
+  if(message){
+    TTree* tree = (TTree*) message->ReadObject(message->GetClass());
+    return tree;
+  }
+  
+  else{
+    NPL::SendInformation("NPL::SpectraClient","Server return an empty tree");
+    return NULL;
+  }
+}
+
+
 
 
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/NPLib/Online/NPSpectraClient.h b/NPLib/Online/NPSpectraClient.h
index cca37e1ea540055e94f50e84545284b029c707b1..8046c0e0fe39d80abfd2c91edcbc83a5dd4fc738 100644
--- a/NPLib/Online/NPSpectraClient.h
+++ b/NPLib/Online/NPSpectraClient.h
@@ -47,6 +47,7 @@ namespace NPL{
       void UpdateTH1(TH1* Old, TH1* New );
       // Access the tree
       TTree* GetTree();
+      TTree* GetRawTree();
     private: // The sochet use for connection
       TSocket* m_Sock;
       std::string m_Address;