diff --git a/core/data/DataLinkDef.h b/core/data/DataLinkDef.h
index 9b7db8ce4a6d9fa86b0cb5242349ea84982f4fc8..f7d571708ff12d8454c9ea465135baf02d9f1176 100644
--- a/core/data/DataLinkDef.h
+++ b/core/data/DataLinkDef.h
@@ -76,7 +76,7 @@
 #pragma link C++ class CbmTofTracklet + ;
 #pragma link C++ class CbmTofTrackletParam + ;
 
-#pragma link C++ class CbmPsdDigi;
+#pragma link C++ class CbmPsdDigi-;
 #pragma link C++ class CbmPsdHit;
 #pragma link C++ class CbmPsdPoint + ;
 #pragma link C++ class CbmPsdAddress;
diff --git a/core/data/psd/CbmPsdDigi.cxx b/core/data/psd/CbmPsdDigi.cxx
index 80354480849820591f255432d8c4142b34f2fde6..a441980b60eb89aa10fb205ed9ecaf0a7d49b5a5 100644
--- a/core/data/psd/CbmPsdDigi.cxx
+++ b/core/data/psd/CbmPsdDigi.cxx
@@ -7,11 +7,12 @@
 
 #include "CbmPsdDigi.h"
 
+#include <TBuffer.h>  // for TBuffer
+#include <TClass.h>   // for CbmPsdDigi::IsA()
 #include <TString.h>  // for Form, TString
 
 #include <string>  // for basic_string
 
-
 // --- Default constructor
 CbmPsdDigi::CbmPsdDigi() {}
 
@@ -82,5 +83,64 @@ std::string CbmPsdDigi::ToString() const {
   return string.Data();
 }
 
+// --- Custom Streamer
+void CbmPsdDigi::Streamer(TBuffer& R__b) {
+  // Stream an object of class CbmPsdDigi.
+
+  UInt_t R__s, R__c;
+  if (R__b.IsReading()) {
+    Version_t R__v = R__b.ReadVersion(&R__s, &R__c);
+    if (R__v) {}
+    //      LOG(info) << "Reading CbmPsdDigi version " << R__v;
+    if (3 == R__v) {
+      R__b >> fdEdep;
+      R__b >> fdTime;
+      R__b >> fuAddress;
+      R__b.CheckByteCount(R__s, R__c, CbmPsdDigi::IsA());
+    } else if (4 == R__v) {
+      R__b >> ffFitHarmonic1;
+      R__b >> ffFitHarmonic2;
+      R__b >> ffFitR2;
+      R__b >> ffFitEdep;
+      R__b >> fdEdep;
+      R__b >> fdTime;
+      R__b >> fuAddress;
+      R__b >> fuAmpl;
+      R__b >> fuZL;
+      R__b >> fdEdepWfm;
+      R__b.CheckByteCount(R__s, R__c, CbmPsdDigi::IsA());
+    }
+  } else {
+    // The function WriteVersion does not return the version number
+    // but the position where ti write the next data
+    // to get the class version use TClass->GetClassVersion()
+
+    R__c              = R__b.WriteVersion(CbmPsdDigi::IsA(), kTRUE);
+    Version_t version = CbmPsdDigi::IsA()->GetClassVersion();
+
+    // We don't intent to write data in old format
+    /*
+      if ( 3 == version ) {
+        R__b << fdEdep;
+        R__b << fdTime;
+        R__b << fuAddress;
+        R__b.SetByteCount(R__c, kTRUE);
+      } else if ( 4 == version ) {
+      */
+    if (4 == version) {
+      R__b << ffFitHarmonic1;
+      R__b << ffFitHarmonic2;
+      R__b << ffFitR2;
+      R__b << ffFitEdep;
+      R__b << fdEdep;
+      R__b << fdTime;
+      R__b << fuAddress;
+      R__b << fuAmpl;
+      R__b << fuZL;
+      R__b << fdEdepWfm;
+      R__b.SetByteCount(R__c, kTRUE);
+    }
+  }
+}
 
 ClassImp(CbmPsdDigi)