Index: display/DelphesBranchElement.cc
===================================================================
--- display/DelphesBranchElement.cc	(revision b3c42d35a3d208abb67a92eaa6c45ac04965722f)
+++ display/DelphesBranchElement.cc	(revision 4d999a57410bd2e0f18efb7f6965504646a43c49)
@@ -0,0 +1,64 @@
+/*
+ *  Delphes: a framework for fast simulation of a generic collider experiment
+ *  Copyright (C) 2012-2014  Universite catholique de Louvain (UCL), Belgium
+ *  
+ *  This program is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *  
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *  
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "display/DelphesBranchElement.h"
+
+// special case for calo towers
+template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
+      if(TString(type)=="tower") {
+        data_ = new DelphesCaloData(2);
+        data_->RefSliceInfo(0).Setup("ECAL", 0.1, kRed);
+        data_->RefSliceInfo(1).Setup("HCAL", 0.1, kBlue);
+        data_->IncDenyDestroy();
+      } else {
+        throw std::exception();
+      }
+    }
+template<> void DelphesBranchElement<DelphesCaloData>::Reset() { data_->ClearTowers(); }
+
+// special case for element lists
+template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
+      if(TString(type)=="vector" || TString(type)=="jet") {
+        data_ = new TEveElementList(name);
+        data_->SetMainColor(color_);
+      } else {
+        throw std::exception();
+      }
+    }
+template<> void DelphesBranchElement<TEveElementList>::Reset() { data_->DestroyElements(); }
+
+// special case for track lists
+template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
+      if(TString(type)=="track") {
+        data_ = new TEveTrackList(name);
+        data_->SetMainColor(color_);
+        data_->SetMarkerColor(color_);
+        data_->SetMarkerStyle(kCircle);
+        data_->SetMarkerSize(0.5);
+      } else if(TString(type)=="photon") {
+        data_ = new TEveTrackList(name);
+        data_->SetMainColor(color_);
+        data_->SetMarkerColor(color_);
+        data_->SetMarkerStyle(kCircle);
+        data_->SetMarkerSize(0.5);
+      } else {
+        throw std::exception();
+      }
+    }
+template<> void DelphesBranchElement<TEveTrackList>::Reset() { data_->DestroyElements(); }
+
Index: display/DelphesBranchElement.h
===================================================================
--- display/DelphesBranchElement.h	(revision b3c42d35a3d208abb67a92eaa6c45ac04965722f)
+++ display/DelphesBranchElement.h	(revision 4d999a57410bd2e0f18efb7f6965504646a43c49)
@@ -31,6 +31,5 @@
 {
   public:
-    DelphesBranchBase():color_(kBlack) {}
-    DelphesBranchBase(const char* name, const char*type, const enum EColor color):name_(name),type_(type),color_(color) {}
+    DelphesBranchBase(const char* name="", const char*type="", const enum EColor color=kBlack):name_(name),type_(type),color_(color) {}
     virtual ~DelphesBranchBase() {};
     const char* GetName() const { return (const char*)name_; }
@@ -51,6 +50,7 @@
   public:
     // constructor
-    DelphesBranchElement():DelphesBranchBase() {}
-    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {}
+    DelphesBranchElement(const char* name="", const char*type="", const enum EColor color=kBlack):DelphesBranchBase(name, type, color) {
+      throw std::exception();
+    }
 
     // destructor
@@ -61,5 +61,5 @@
 
     // resets the collection (before moving to the next event)
-    virtual void Reset() = 0;
+    virtual void Reset() {};
 
     // template class name
@@ -70,113 +70,19 @@
 };
 
+#if !defined(__CINT__) && !defined(__CLING__)
+
 // special case for calo towers
-template<> class DelphesBranchElement<DelphesCaloData>: public DelphesBranchBase
-{
-  public:
-    // constructor
-    DelphesBranchElement():DelphesBranchBase() {}
-    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
-      if(TString(type)=="tower") {
-        data_ = new DelphesCaloData(2);
-        data_->RefSliceInfo(0).Setup("ECAL", 0.1, kRed);
-        data_->RefSliceInfo(1).Setup("HCAL", 0.1, kBlue);
-        data_->IncDenyDestroy();
-      } else {
-        throw std::exception();
-      }
-    }
-
-    // destructor
-    virtual ~DelphesBranchElement() { delete data_; }
-
-    // get the container (ElementList, TrackList, or CaloData)
-    DelphesCaloData* GetContainer() { return data_; }
-
-    // resets the collection (before moving to the next event)
-    virtual void Reset() { data_->ClearTowers(); }
-
-    // template class name
-    virtual const char* GetClassName() { return data_->ClassName(); }
-
-  private:
-    DelphesCaloData* data_;
-};
-//template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
-//template<> void DelphesBranchElement<DelphesCaloData>::Reset();
+template<> DelphesBranchElement<DelphesCaloData>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
+template<> void DelphesBranchElement<DelphesCaloData>::Reset();
 
 // special case for element lists
-template<> class DelphesBranchElement<TEveElementList>: public DelphesBranchBase
-{
-  public:
-    // constructor
-    DelphesBranchElement():DelphesBranchBase() {}
-    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
-      if(TString(type)=="vector" || TString(type)=="jet") {
-        data_ = new TEveElementList(name);
-        data_->SetMainColor(color_);
-      } else {
-        throw std::exception();
-      }
-    }
-
-    // destructor
-    virtual ~DelphesBranchElement() { delete data_; }
-
-    // get the container (ElementList, TrackList, or CaloData)
-    TEveElementList* GetContainer() { return data_; }
-
-    // resets the collection (before moving to the next event)
-    virtual void Reset() { data_->DestroyElements(); }
-
-    // template class name
-    virtual const char* GetClassName() { return data_->ClassName(); }
-
-  private:
-    TEveElementList* data_;
-};
-//template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
-//template<> void DelphesBranchElement<TEveElementList>::Reset();
+template<> DelphesBranchElement<TEveElementList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
+template<> void DelphesBranchElement<TEveElementList>::Reset();
 
 // special case for track lists
-template<> class DelphesBranchElement<TEveTrackList>: public DelphesBranchBase
-{
-  public:
-    // constructor
-    DelphesBranchElement():DelphesBranchBase() {}
-    DelphesBranchElement(const char* name, const char*type, const enum EColor color):DelphesBranchBase(name, type, color) {
-      if(TString(type)=="track") {
-        data_ = new TEveTrackList(name);
-        data_->SetMainColor(color_);
-        data_->SetMarkerColor(color_);
-        data_->SetMarkerStyle(kCircle);
-        data_->SetMarkerSize(0.5);
-      } else if(TString(type)=="photon") {
-        data_ = new TEveTrackList(name);
-        data_->SetMainColor(color_);
-        data_->SetMarkerColor(color_);
-        data_->SetMarkerStyle(kCircle);
-        data_->SetMarkerSize(0.5);
-      } else {
-        throw std::exception();
-      }
-    }
+template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
+template<> void DelphesBranchElement<TEveTrackList>::Reset();
 
-    // destructor
-    virtual ~DelphesBranchElement() { delete data_; }
-
-    // get the container (ElementList, TrackList, or CaloData)
-    TEveTrackList* GetContainer() { return data_; }
-
-    // resets the collection (before moving to the next event)
-    virtual void Reset() { data_->DestroyElements(); }
-
-    // template class name
-    virtual const char* GetClassName() { return data_->ClassName(); }
-
-  private:
-    TEveTrackList* data_;
-};
-//template<> DelphesBranchElement<TEveTrackList>::DelphesBranchElement(const char* name, const char*type, const enum EColor color);
-//template<> void DelphesBranchElement<TEveTrackList>::Reset();
+#endif // CINT, CLING
 
 #endif //DelphesBranchElement_h
Index: display/DisplayLinkDef.h
===================================================================
--- display/DisplayLinkDef.h	(revision b3c42d35a3d208abb67a92eaa6c45ac04965722f)
+++ display/DisplayLinkDef.h	(revision 4d999a57410bd2e0f18efb7f6965504646a43c49)
@@ -42,7 +42,7 @@
 #pragma link C++ class DelphesDisplay+;
 #pragma link C++ class DelphesCaloData+;
-#pragma link C++ class DelphesBranchElement<DelphesCaloData>;
-#pragma link C++ class DelphesBranchElement<TEveElementList>;
-#pragma link C++ class DelphesBranchElement<TEveTrackList>;
+#pragma link C++ class DelphesBranchElement<DelphesCaloData>-!;
+#pragma link C++ class DelphesBranchElement<TEveElementList>-!;
+#pragma link C++ class DelphesBranchElement<TEveTrackList>-!;
 
 #endif
