diff --git a/DDCore/include/DD4hep/OpaqueData.h b/DDCore/include/DD4hep/OpaqueData.h
index 2d573a02280de4bb44cdea1629396c3948548d3d..3c8ca579800758bb360848bb38d98c3d2397730a 100644
--- a/DDCore/include/DD4hep/OpaqueData.h
+++ b/DDCore/include/DD4hep/OpaqueData.h
@@ -39,11 +39,11 @@ namespace DD4hep {
     /// Standard initializing constructor
     OpaqueData();
     /// Standard Destructor
-    virtual ~OpaqueData() = default;
+    virtual ~OpaqueData();
     /// Copy constructor
-    OpaqueData(const OpaqueData& copy) = default;
+    OpaqueData(const OpaqueData& c);
     /// Assignment operator
-    OpaqueData& operator=(const OpaqueData& copy) = default;
+    OpaqueData& operator=(const OpaqueData& c);
 
   public:
     /// Data type
diff --git a/DDCore/src/OpaqueData.cpp b/DDCore/src/OpaqueData.cpp
index 94ccf8b656aaaeea2512a6902d8c5d3a71ab6ef6..32feeda184da1888125fcf81f58ddb9450536ee1 100644
--- a/DDCore/src/OpaqueData.cpp
+++ b/DDCore/src/OpaqueData.cpp
@@ -29,6 +29,23 @@ using namespace DD4hep;
 OpaqueData::OpaqueData() : grammar(0), pointer(0)   {
 }
 
+/// Copy constructor
+OpaqueData::OpaqueData(const OpaqueData& c) : grammar(c.grammar), pointer(c.pointer) {
+}
+
+/// Standard Destructor
+OpaqueData::~OpaqueData()  {
+}
+
+/// Assignment operator
+OpaqueData& OpaqueData::operator=(const OpaqueData& c) {
+  if ( &c != this )  {
+    grammar = c.grammar;
+    pointer = c.pointer;
+  }
+  return *this;
+}
+
 /// Create data block from string representation
 bool OpaqueData::fromString(const string& rep)   {
   if ( pointer && grammar )  {
@@ -109,8 +126,8 @@ OpaqueDataBlock& OpaqueDataBlock::operator=(const OpaqueDataBlock& c)   {
   if ( this != &c )  {
     if ( this->grammar == c.grammar )   {
       if ( destruct )  {
-	(*destruct)(pointer);
-	if ( (type&ALLOC_DATA) == ALLOC_DATA ) ::operator delete(pointer);
+        (*destruct)(pointer);
+        if ( (type&ALLOC_DATA) == ALLOC_DATA ) ::operator delete(pointer);
       }
       pointer = 0;
       grammar = 0;