diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/HolderTemplate.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/HolderTemplate.h
new file mode 100644
index 0000000000000000000000000000000000000000..c6bc1e50a208dfa69f738e677e5de8acde9af968
--- /dev/null
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/HolderTemplate.h
@@ -0,0 +1,141 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef HOLDERTEMPLATE_H_
+#define HOLDERTEMPLATE_H_
+#include "AthenaMonitoring/ManagedMonitorToolBase.h"
+#include "GaudiKernel/StatusCode.h"     
+#include "InDetIdentifier/PixelID.h"
+
+class array;
+class string;
+
+namespace PixMon {
+enum class HistConf;
+
+/**
+ * Template structure to delete light-weight histograms. The implementation of
+ * this deleter is intentionally left empty: all histograms and their memory are
+ * taken care of by the central monitoring tools (i.e. the monitoring group
+ * classes in which the histograms are registered).
+ */
+template <typename T>
+struct LWHistDeleter {
+  void operator() (T* hist) {
+    // To avoid "unused variable" compiler warnings for the parameter.
+    (void)hist;
+  }
+};
+
+/**
+ * Template class to hold a set of histogram for the different pixel components.
+ * The class holds a maxmium of 10 histograms; the initialisation can be
+ * controlled with the HistConf parameter given as input to the constructor.
+ *
+ * This class serves as template for various histogram holder classes.
+ */
+template <typename T>
+class HolderTemplate {
+ public:
+  /**
+   * Default constructor of the template class. Sets all pointers to null
+   * and saves the configuration option as member variables.
+   *
+   * @param config: the histogram configuration
+   * @param copy2DFEval: boolean whether to copy IBL values to neighbouring FE
+   */
+  inline HolderTemplate(const HistConf& config, bool copy2DFEval = false)
+      : IBL{nullptr},
+        IBL2D{nullptr},
+        IBL3D{nullptr},
+        B0{nullptr},
+        B1{nullptr},
+        B2{nullptr},
+        A{nullptr},
+        C{nullptr},
+        DBMA{nullptr},
+        DBMC{nullptr},
+        m_histograms{{nullptr}},
+        m_config{config},
+        m_copy2DFEval{copy2DFEval},
+        m_doIBL{true} {}
+
+  //! Function for histogram formatting. To be reimplemented in derived classes.
+  virtual void formatHist() = 0;
+
+  //! Register the histograms in the monitoring group.
+  StatusCode regHist(ManagedMonitorToolBase::MonGroup& group) {
+    StatusCode sc = StatusCode::SUCCESS;
+    for (auto& hist : m_histograms) {
+      if (hist && group.regHist(hist.get()).isFailure()) {
+        sc = StatusCode::FAILURE;
+      }
+    }
+    return sc;
+  }
+
+  /**
+   * Function to set the individual (raw) pointers declared below to the correct
+   * memory addresses. This function is to be called *after* the histograms in
+   * m_histograms are initialised in the class constructor.
+   */
+  inline void setHistogramPointers() {
+    IBL = m_histograms.at(0).get();
+    IBL2D = m_histograms.at(1).get();
+    IBL3D = m_histograms.at(2).get();
+    B0 = m_histograms.at(3).get();
+    B1 = m_histograms.at(4).get();
+    B2 = m_histograms.at(5).get();
+    A = m_histograms.at(6).get();
+    C = m_histograms.at(7).get();
+    DBMA = m_histograms.at(8).get();
+    DBMC = m_histograms.at(9).get();
+  }
+
+  //! Pointer to individal histogram: IBL (both 2D/3D modules).
+  T* IBL;
+
+  //! Pointer to individal histogram: IBL 2D histogram (2D modules only).
+  T* IBL2D;
+
+  //! Pointer to individal histogram: IBL 3D histogram (3D modules only).
+  T* IBL3D;
+
+  //! Pointer to individal histogram: barrel layer 0.
+  T* B0;
+
+  //! Pointer to individal histogram: barrel layer 1.
+  T* B1;
+
+  //! Pointer to individal histogram: barrel layer 2.
+  T* B2;
+
+  //! Pointer to individal histogram: end-cap side A.
+  T* A;
+
+  //! Pointer to individal histogram: end-cap side C.
+  T* C;
+
+  //! Pointer to individal histogram: DBM side A.
+  T* DBMA;
+
+  //! Pointer to individal histogram: DBM side C.
+  T* DBMC;
+
+ protected:
+  //! Array containing unique pointers to all histograms.
+  std::array<std::unique_ptr<T, LWHistDeleter<T>>, 10> m_histograms;
+
+  //! Configuration which histograms are to be initialised.
+  const HistConf m_config;
+
+  //! Boolean whether IBL values should be copied to neighbouring FE.
+  const bool m_copy2DFEval;
+
+  //! Boolean for job option 'doIBL'. --> TO BE REMOVED
+  const bool m_doIBL;
+};
+}
+
+#endif  // HOLDERTEMPLATE_H_
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
index 185c1de10d38b4e4c52ef5a50125facbc55a97cd..68af156cd96a8ef4654290de78d831635c10d7c9 100755
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMainMon.h
@@ -321,8 +321,8 @@ private:
    /// the number of hits
    TProfile_LW*            m_hits_per_lumi;
    TH1I_LW*                m_num_hits;
-   PixelMon2DMapsLW*       m_hitmap_mon;
-   PixelMon2DMapsLW*       m_hitmap_tmp;
+   std::unique_ptr<PixelMon2DMapsLW> m_hitmap_mon;
+   std::unique_ptr<PixelMon2DMapsLW> m_hitmap_tmp;
    TH1F_LW*                m_nhits_mod[PixLayer::COUNT];
    TProfile_LW*            m_hits_per_lumi_mod[PixLayer::COUNT];
    TH1F_LW*                m_nlargeevt_per_lumi_mod[PixLayerIBL2D3D::COUNT];
@@ -337,10 +337,10 @@ private:
    TH2F_LW*                m_maxocc_per_lumi_mod[PixLayerIBL2D3D::COUNT];
    TH2F_LW*                m_modocc_per_lumi[PixLayer::COUNT];
    TH1F_LW*                m_maxocc_per_bcid_mod[PixLayerIBL2D3D::COUNT];
-   PixelMon2DMapsLW*       m_occupancy;
-   PixelMon2DMapsLW*       m_average_pixocc;
-   PixelMon2DProfilesLW*   m_occupancy_pix_evt;
-   PixelMon2DMapsLW*       m_occupancy_10min;
+   std::unique_ptr<PixelMon2DMapsLW> m_occupancy;
+   std::unique_ptr<PixelMon2DMapsLW> m_average_pixocc;
+   std::unique_ptr<PixelMon2DProfilesLW> m_occupancy_pix_evt;
+   std::unique_ptr<PixelMon2DMapsLW> m_occupancy_10min;
    TProfile*               m_occupancy_time1;
    TProfile*               m_occupancy_time2;
    TProfile*               m_occupancy_time3;
@@ -365,17 +365,17 @@ private:
    TH1F_LW*                m_Lvl1A_10min_mod[PixLayer::COUNT];
    TH1I_LW*                m_Lvl1ID_diff_mod_ATLAS_mod[PixLayer::COUNT];
    TH1I_LW*                m_diff_ROD_vs_Module_BCID_mod[PixLayer::COUNT];
-   PixelMon2DLumiProfiles* m_Lvl1ID_diff_mod_ATLAS_per_LB;
-   PixelMon2DLumiProfiles* m_Lvl1ID_absdiff_mod_ATLAS_per_LB;
+   std::unique_ptr<PixelMon2DLumiProfiles> m_Lvl1ID_diff_mod_ATLAS_per_LB;
+   std::unique_ptr<PixelMon2DLumiProfiles> m_Lvl1ID_absdiff_mod_ATLAS_per_LB;
    /// Quick status
    TH2F_LW*                m_nhits_L0_B11_S2_C6;
    TProfile2D_LW*          m_occupancy_L0_B11_S2_C6;
 
    /// module histo
-   PixelMonModules1D*      m_hit_num_mod;
-   PixelMonModulesProf*    m_hiteff_mod;
-   PixelMonModules1D*      m_FE_chip_hit_summary;
-   PixelMonModules2D*      m_pixel_occupancy;
+   std::unique_ptr<PixelMonModules1D> m_hit_num_mod;
+   std::unique_ptr<PixelMonModulesProf> m_hiteff_mod;
+   std::unique_ptr<PixelMonModules1D> m_FE_chip_hit_summary;
+   std::unique_ptr<PixelMonModules2D> m_pixel_occupancy;
    /// details
    TH1F_LW*                m_Details_mod1_num_hits;
    TH1F_LW*                m_Details_mod2_num_hits;
@@ -404,16 +404,16 @@ private:
    TProfile_LW*            m_tracksPerEvt_per_lumi;
    TProfile_LW*            m_tracksPerEvtPerMu_per_lumi;
    /// track state on surface
-   PixelMon2DMapsLW*       m_tsos_hitmap;
-   PixelMon2DMapsLW*       m_tsos_holemap;
-   PixelMon2DMapsLW*       m_tsos_outliermap;
-   //PixelMon2DProfilesLW*   m_tsos_measratio;
-   //PixelMon2DProfilesLW*   m_tsos_holeratio;
-   PixelMon2DProfilesLW*   m_misshits_ratio;
-   PixelMon2DProfilesLW*   m_tsos_holeratio_tmp;
-   PixelMon2DProfilesLW*   m_tsos_holeratio_mon;
-   PixelMon2DProfilesLW*   m_misshits_ratio_tmp;
-   PixelMon2DProfilesLW*   m_misshits_ratio_mon;
+   std::unique_ptr<PixelMon2DMapsLW> m_tsos_hitmap;
+   std::unique_ptr<PixelMon2DMapsLW> m_tsos_holemap;
+   std::unique_ptr<PixelMon2DMapsLW> m_tsos_outliermap;
+   //std::unique_ptr<PixelMon2DProfilesLW> m_tsos_measratio;
+   //std::unique_ptr<PixelMon2DProfilesLW> m_tsos_holeratio;
+   std::unique_ptr<PixelMon2DProfilesLW> m_misshits_ratio;
+   std::unique_ptr<PixelMon2DProfilesLW> m_tsos_holeratio_tmp;
+   std::unique_ptr<PixelMon2DProfilesLW> m_tsos_holeratio_mon;
+   std::unique_ptr<PixelMon2DProfilesLW> m_misshits_ratio_tmp;
+   std::unique_ptr<PixelMon2DProfilesLW> m_misshits_ratio_mon;
    /// hit efficiency
    TProfile_LW*            m_hiteff_incl_mod[PixLayerDisk::COUNT];
    /// Lorentz Angle
@@ -441,7 +441,7 @@ private:
    TH1F_LW*                m_clustot_highpt;
    TH1F_LW*                m_1hitclustot_highpt;
    TH1F_LW*                m_2hitclustot_highpt;
-   PixelMonModulesProf*    m_tsos_hiteff_vs_lumi;
+   std::unique_ptr<PixelMonModulesProf> m_tsos_hiteff_vs_lumi;
 
 
    ///
@@ -469,9 +469,9 @@ private:
    TH1F_LW*              m_2cluster_Q_mod[PixLayer::COUNT];
    TH1F_LW*              m_3cluster_Q_mod[PixLayer::COUNT];
    TH1F_LW*              m_bigcluster_Q_mod[PixLayer::COUNT];
-   PixelMon2DProfilesLW* m_clussize_map;
-   PixelMon2DProfilesLW* m_cluscharge_map;
-   PixelMon2DProfilesLW* m_clusToT_map;
+   std::unique_ptr<PixelMon2DProfilesLW> m_clussize_map;
+   std::unique_ptr<PixelMon2DProfilesLW> m_cluscharge_map;
+   std::unique_ptr<PixelMon2DProfilesLW> m_clusToT_map;
    TH1F_LW*              m_cluster_groupsize;
    TH1F_LW*              m_cluster_col_width;
    TH1F_LW*              m_cluster_row_width;
@@ -485,25 +485,25 @@ private:
    TH2F_LW*              m_ToT_vs_clussize_mod[PixLayer::COUNT];
    TProfile_LW*          m_clussize_vs_eta_mod[PixLayer::COUNT];
 
-   PixelMon2DMapsLW*     m_clustermap_mon;
-   PixelMon2DMapsLW*     m_clustermap_tmp;
-   PixelMon2DMapsLW*     m_cluster_occupancy;
+   std::unique_ptr<PixelMon2DMapsLW> m_clustermap_mon;
+   std::unique_ptr<PixelMon2DMapsLW> m_clustermap_tmp;
+   std::unique_ptr<PixelMon2DMapsLW> m_cluster_occupancy;
    TH2F_LW*              m_cluster_occupancy_FE_B0_mon;
    TProfile*             m_cluster_occupancy_time1;
    TProfile*             m_cluster_occupancy_time2;
    TProfile*             m_cluster_occupancy_time3;
 
-   PixelMon2DMapsLW*     m_clusocc_sizenot1;
-   PixelMonModulesProf*  m_cluseff_mod;
-   PixelMonModules1D*    m_cluster_ToT_mod;
-   PixelMonModules1D*    m_cluster_size_mod;
-   PixelMonModules1D*    m_cluster_num_mod;
+   std::unique_ptr<PixelMon2DMapsLW> m_clusocc_sizenot1;
+   std::unique_ptr<PixelMonModulesProf> m_cluseff_mod;
+   std::unique_ptr<PixelMonModules1D> m_cluster_ToT_mod;
+   std::unique_ptr<PixelMonModules1D> m_cluster_size_mod;
+   std::unique_ptr<PixelMonModules1D> m_cluster_num_mod;
    TH1I_LW*              m_num_clusters;
    TProfile_LW*          m_clusters_per_track_per_lumi_mod[PixLayer::COUNT];
    TH1I_LW*              m_num_clusters_mod[PixLayer::COUNT];
    TH1F_LW*              m_cluster_occupancy_summary_mod[PixLayer::COUNT];
-   PixelMon2DProfilesLW* m_cluster_LVL1A_mod;
-   PixelMon2DProfilesLW* m_clus_LVL1A_sizenot1;
+   std::unique_ptr<PixelMon2DProfilesLW> m_cluster_LVL1A_mod;
+   std::unique_ptr<PixelMon2DProfilesLW> m_clus_LVL1A_sizenot1;
    TProfile_LW*          m_clustersOnOffTrack_per_lumi;
    /// Quick status
    TH2F_LW*              m_clusters_onTrack_L0_B11_S2_C6;
@@ -513,11 +513,11 @@ private:
    ///
    ///Status histograms
    ///
-   PixelMonModules1D*    m_Status_modules;
-   PixelMon2DProfilesLW* m_status;
-   PixelMon2DProfilesLW* m_status_mon;
-   PixelMon2DProfilesLW* m_status_LB;
-   PixelMon2DMapsLW*     m_dqStatus;
+   std::unique_ptr<PixelMonModules1D> m_Status_modules;
+   std::unique_ptr<PixelMon2DProfilesLW> m_status;
+   std::unique_ptr<PixelMon2DProfilesLW> m_status_mon;
+   std::unique_ptr<PixelMon2DProfilesLW> m_status_LB;
+   std::unique_ptr<PixelMon2DMapsLW> m_dqStatus;
    TProfile_LW*          m_disabledModules_per_lumi_PIX;
    TProfile_LW*          m_badModules_per_lumi_mod[PixLayerIBL2D3D::COUNT];
    TProfile_LW*          m_disabledModules_per_lumi_mod[PixLayerIBL2D3D::COUNT];
@@ -531,8 +531,8 @@ private:
    static const int      kNumErrorStatesIBL{27};
    TProfile_LW*          m_errhist_errcat_LB[PixLayerIBL2D3D::COUNT][ErrorCategory::COUNT];
    TProfile_LW*          m_errhist_errtype_LB[PixLayerIBL2D3D::COUNT][ErrorCategoryMODROD::COUNT - 3];
-   PixelMon2DMapsLW*     m_errhist_errcat_map[ErrorCategory::COUNT];
-   PixelMon2DMapsLW*     m_errhist_errtype_map[ErrorCategoryMODROD::COUNT];
+   std::unique_ptr<PixelMon2DMapsLW> m_errhist_errcat_map[ErrorCategory::COUNT];
+   std::unique_ptr<PixelMon2DMapsLW> m_errhist_errtype_map[ErrorCategoryMODROD::COUNT];
    TProfile_LW*          m_errhist_errcat_avg[ErrorCategory::COUNT][PixLayerIBL2D3D::COUNT];
    TProfile_LW*          m_errhist_errtype_avg[ErrorCategoryMODROD::COUNT - 3][PixLayerIBL2D3D::COUNT];
    TProfile_LW*          m_errhist_tot_LB[PixLayerIBL2D3D::COUNT];
@@ -542,12 +542,12 @@ private:
    TProfile*             m_error_time1;       
    TProfile*             m_error_time2;       
    TProfile*             m_error_time3;       
-   PixelMonModules1D*    m_errors;
-   PixelMon2DProfilesLW* m_errhist_femcc_errwords_map;
+   std::unique_ptr<PixelMonModules1D> m_errors;
+   std::unique_ptr<PixelMon2DProfilesLW> m_errhist_femcc_errwords_map;
 
    // Histograms in 'ErrorsExpert' folder
-   PixelMon2DLumiMaps*   m_errhist_expert_LB_maps[kNumErrorStates + kNumErrorStatesIBL];
-   PixelMon2DMapsLW*     m_errhist_expert_maps[kNumErrorStates + kNumErrorStatesIBL];
+   std::unique_ptr<PixelMon2DLumiMaps> m_errhist_expert_LB_maps[kNumErrorStates + kNumErrorStatesIBL];
+   std::unique_ptr<PixelMon2DMapsLW> m_errhist_expert_maps[kNumErrorStates + kNumErrorStatesIBL];
    TProfile_LW*          m_errhist_expert_LB[PixLayer::COUNT-1][kNumErrorStates];
    TProfile_LW*          m_errhist_expert_IBL_LB[kNumErrorStatesIBL];
    TH3F*                 m_errhist_expert_fe_trunc_err_3d[PixLayer::COUNT];
@@ -556,9 +556,9 @@ private:
    TH1F_LW*              m_errhist_expert_servrec_ibl_count;
 
    // Histograms in low-stat folder
-   PixelMon2DMapsLW*     m_errors_LB;
-   PixelMon2DMapsLW*     m_errors_RODSync_mod;
-   PixelMon2DMapsLW*     m_errors_ModSync_mod;
+   std::unique_ptr<PixelMon2DMapsLW> m_errors_LB;
+   std::unique_ptr<PixelMon2DMapsLW> m_errors_RODSync_mod;
+   std::unique_ptr<PixelMon2DMapsLW> m_errors_ModSync_mod;
 
    ///
    /// SP Histograms
@@ -574,10 +574,10 @@ private:
    TH2F_LW*  m_spHit_rz;
 
    //Histograms stored for certain number of LB at a time
-   PixelMon2DMapsLW*  m_cluster_occupancy_LB;  //cluster occupancy (shows module status)
-   PixelMonModules1D* m_cluster_ToT_mod_LB;
-   PixelMonModules1D* m_cluster_num_mod_LB;
-   PixelMonModules1D* m_hit_num_mod_LB;
+   std::unique_ptr<PixelMon2DMapsLW> m_cluster_occupancy_LB;  //cluster occupancy (shows module status)
+   std::unique_ptr<PixelMonModules1D> m_cluster_ToT_mod_LB;
+   std::unique_ptr<PixelMonModules1D> m_cluster_num_mod_LB;
+   std::unique_ptr<PixelMonModules1D> m_hit_num_mod_LB;
 
    TH1I_LW*           m_num_hits_LB;
    TH1F_LW*           m_hit_ToT_LB_mod[PixLayer::COUNT];
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiMaps.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiMaps.h
index bef854c508c0248e8723962a9668fff89e08dddf..ecd0bcc8e4ed7d8ecb2a7a9f3268890a595e105b 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiMaps.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiMaps.h
@@ -4,50 +4,51 @@
 
 #ifndef PIXELMON2DLUMIMAPS_H_
 #define PIXELMON2DLUMIMAPS_H_
-#include "AthenaMonitoring/ManagedMonitorToolBase.h"
-#include <array>
-#include <string.h>
+#include "PixelMonitoring/HolderTemplate.h"
 
+class string;
 class TH2F_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
+namespace PixMon { enum class HistConf; }
 
-namespace PixMon {
-enum class HistConf;
-}
+/**
+ * PixelMon2DLumiMaps histogram holder class
+ *   --> Base type: 2D Maps (TH2F_LW)
+ *   --> Supports:  IBL
+ *                  B0, B1, B2
+ *                  ECA/C
+ *                  DBMA/C
+ *
+ * Collection of 2D pixel component maps, based on the TH2F_LW histogram class.
+ * The initialisation of the components is controlled by the HistConf object.
+ * The fill method will take the identifier as the input and fill the correct
+ * histogram and bin. The histograms are also public so that they can be
+ * formatted/accessed like any other histograms in the monitoring.
+ *
+ * N.B. Currently no support for IBL2D/3D histograms. Should this be added?
+ * Also, if the histogram configuration contains unsupported histograms, this is
+ * completely ignored. Should we do anything against it?
+ */
+class PixelMon2DLumiMaps : public PixMon::HolderTemplate<TH2F_LW> {
+ public:
+  //! Constructor for 2D lumi objects
+  PixelMon2DLumiMaps(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config);
 
-// A helper class to remove a lot of the code duplication.
-// This is a collection of 6 2D histograms which make up the '2D luminosity maps' used a lot of in the monitoring.
-// Each of the 2D maps correspond to a detector region (IBL, B0, B1, B2, ECA, ECC).
-// This books and formats the histograms in the constructor. The fill method will take the identifier 
-// as the input and fill the correct histogram and bin. The histograms are also public so that they
-// can be formated/accessed like any other histograms in the monitoring.
-//
-// N.B. Currently no support for IBL2D/3D histograms as well as DBM monitoring. Should this be added?
-// Also, if the histogram configuration contains unsupported histograms, this is completely ignored.
-// Should we do anything against it?
- 
-class PixelMon2DLumiMaps
-{
-   public:
-      PixelMon2DLumiMaps(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config);
-      ~PixelMon2DLumiMaps();
-      TH2F_LW* IBLlbm;
-      TH2F_LW* B0lbm;
-      TH2F_LW* B1lbm;
-      TH2F_LW* B2lbm;
-      TH2F_LW* Albm;
-      TH2F_LW* Clbm;
-      TH2F_LW* DBMAlbm;
-      TH2F_LW* DBMClbm;
-      void Fill(double LB,Identifier &id, const PixelID* pixID, double weight = 1);
-      StatusCode regHist(ManagedMonitorToolBase::MonGroup &group);
-private:
-      void formatHist();
-      std::array<TH2F_LW*, 10> m_histograms;
-      const PixMon::HistConf m_config;
-      static const bool m_doIBL;
+  /**
+   * Standard method to fill the histograms of this container.
+   *
+   * @param LB: the luminosity block number
+   * @param id: the identifier of the pixel unit
+   * @param pixID: instance of the class which translates the above ID
+   *        into readable info (e.g. eta/phi module index)
+   * @param weight: optional weighting factor
+   */
+  void Fill(double LB, Identifier &id, const PixelID* pixID, float weight = 1.0);
+
+  //! Formatting function for histograms (reimplemented from template)
+  virtual void formatHist() override;
 };
 
-#endif
+#endif  // PIXELMON2DLUMIMAPS_H_
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiProfiles.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiProfiles.h
index 83925fdbcc42ef6ae5f2b7b36d6e46de226ac128..a5cef713cdeb5abfcf463f2b448551129b985b68 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiProfiles.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DLumiProfiles.h
@@ -4,50 +4,52 @@
 
 #ifndef PIXELMON2DLUMIPROFILES_H_
 #define PIXELMON2DLUMIPROFILES_H_
-#include "AthenaMonitoring/ManagedMonitorToolBase.h"
-#include <array>
-#include <string.h>
+#include "PixelMonitoring/HolderTemplate.h"
 
+class string;
 class TProfile2D_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
+namespace PixMon { enum class HistConf; }
 
-namespace PixMon {
-enum class HistConf;
-}
+/**
+ * PixelMon2DMapsLW histogram holder class
+ *   --> Base type: 2D Profiles (TProfile2D_LW)
+ *   --> Supports:  IBL
+ *                  IBL 2D/3D
+ *                  B0, B1, B2
+ *                  ECA/C
+ *                  DBMA/C
+ *
+ * Collection of 2D pixel component maps, based on the TH2F_LW histogram class.
+ * The initialisation of the components is controlled by the HistConf object.
+ * The fill method will take the identifier as the input and fill the correct
+ * histogram and bin. The histograms are also public so that they can be
+ * formatted/accessed like any other histograms in the monitoring.
+ *
+ * N.B. Currently no support for IBL2D/3D histograms. Should this be added?
+ * Also, if the histogram configuration contains unsupported histograms, this is
+ * completely ignored. Should we do anything against it?
+ */
+class PixelMon2DLumiProfiles : public PixMon::HolderTemplate<TProfile2D_LW> {
+ public:
+  //! Constructor for 2D lumi profiles
+  PixelMon2DLumiProfiles(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config);
 
-// A helper class to remove a lot of the code duplication.
-// This is a collection of 6 2D histograms which make up the '2D lumi profiles' used a lot of in the monitoring.
-// Each of the 2D maps correspond to a detector region (IBL, B0, B1, B2, ECA, ECC).
-// This books and formats the histograms in the constructor. The fill method will take the identifier 
-// as the input and fill the correct histogram and bin. The histograms are also public so that they
-// can be formated/accessed like any other histograms in the monitoring.
-//
-// N.B. Currently no support for IBL2D/3D histograms as well as DBM monitoring. Should this be added?
-// Also, if the histogram configuration contains unsupported histograms, this is completely ignored.
-// Should we do anything against it?
+  /**
+   * Standard method to fill the histograms of this container.
+   *
+   * @param LB: the luminosity block number
+   * @param id: the identifier of the pixel unit
+   * @param pixID: instance of the class which translates the above ID
+   *        into readable info (e.g. eta/phi module index)
+   * @param weight: optional weighting factor
+   */
+  void Fill(double LB, Identifier &id, const PixelID* pixID, double weight = 1.0);
 
-class PixelMon2DLumiProfiles
-{
-   public:
-      PixelMon2DLumiProfiles(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config);
-      ~PixelMon2DLumiProfiles();
-      TProfile2D_LW* IBLlbp;
-      TProfile2D_LW* B0lbp;
-      TProfile2D_LW* B1lbp;
-      TProfile2D_LW* B2lbp;
-      TProfile2D_LW* Albp;
-      TProfile2D_LW* Clbp;
-      TProfile2D_LW* DBMAlbp;
-      TProfile2D_LW* DBMClbp;
-      void Fill(double LB, Identifier &id, const PixelID* pixID, double weight = 1);
-      StatusCode regHist(ManagedMonitorToolBase::MonGroup &group);
-private:
-      void formatHist();
-      std::array<TProfile2D_LW*, 10> m_histograms;
-      const PixMon::HistConf m_config;
-      static const bool m_doIBL;
+  //! Formatting function for histograms (reimplemented from template)
+  void formatHist();
 };
 
-#endif
+#endif  // PIXELMON2DLUMIPROFILES_H_
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
index 1edcf7452fb12a1832dddc779d36d65549998f7a..f0c81cc8b73fa82edb6718af5df5e8781c82563c 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DMapsLW.h
@@ -4,51 +4,53 @@
 
 #ifndef PIXELMON2DMAPSLW_H_
 #define PIXELMON2DMAPSLW_H_
-#include "AthenaMonitoring/ManagedMonitorToolBase.h"
-#include <array>
-#include <string.h>
+#include "PixelMonitoring/HolderTemplate.h"
 
+class string;
 class TH2F_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
-namespace PixMon {
-enum class HistConf;
-}
-
-// A helper class to remove a lot of the code duplication.
-// This is a collection of 5 2D histograms which make up the '2D mapsLW' used a lot of in the monitoring.
-// Each of the 2D mapsLW correspond to a detector region (B0, B1, B2, ECA, ECC).
-// This books and formats the histograms in the constructor. The fill method will take the identifier 
-// as the input and fill the correct histogram and bin. The histograms are also public so that they
-// can be formated/accessed like any other histograms in the monitoring.
-
-class PixelMon2DMapsLW
-{
-   public:
-      PixelMon2DMapsLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval = false);
-      ~PixelMon2DMapsLW();
-      TH2F_LW* IBL;
-      TH2F_LW* IBL2D;
-      TH2F_LW* IBL3D;
-      TH2F_LW* B0;
-      TH2F_LW* B1;
-      TH2F_LW* B2;
-      TH2F_LW* A;
-      TH2F_LW* C;
-      TH2F_LW* DBMA;
-      TH2F_LW* DBMC;
-      void Fill(Identifier &id, const PixelID* pixID);
-      void WeightingFill(Identifier &id, const PixelID* pixID, float weight);
-      void Fill2DMon(PixelMon2DMapsLW* oldmap);
-      StatusCode regHist(ManagedMonitorToolBase::MonGroup &group);
-private:
-      friend class PixelMon2DProfilesLW;
-      void formatHist();
-      std::array<TH2F_LW*, 10> m_histograms;
-      const PixMon::HistConf m_config;
-      static const bool m_doIBL;
-      const bool m_copy2DFEval;
+namespace PixMon { enum class HistConf; }
+
+/**
+ * PixelMon2DMapsLW histogram holder class
+ *   --> Base type: 2D Maps (TH2F_LW)
+ *   --> Supports:  IBL
+ *                  IBL 2D/3D
+ *                  B0, B1, B2
+ *                  ECA/C
+ *                  DBMA/C
+ *
+ * Collection of 2D pixel component maps, based on the TH2F_LW histogram class.
+ * The initialisation of the components is controlled by the HistConf object.
+ * The fill method will take the identifier as the input and fill the correct
+ * histogram and bin. The histograms are also public so that they can be
+ * formatted/accessed like any other histograms in the monitoring.
+ */
+class PixelMon2DMapsLW : public PixMon::HolderTemplate<TH2F_LW> {
+ public:
+  //! Constructor for 2D map objects
+  PixelMon2DMapsLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval = false);
+
+  /**
+   * Standard method to fill the histograms of this container.
+   *
+   * @param id: the identifier of the pixel unit
+   * @param pixID: instance of the class which translates the above ID
+   *        into readable info (e.g. eta/phi module index)
+   * @param weight: optional weighting factor
+   */
+  void Fill(Identifier &id, const PixelID* pixID, float weight = 1.0);
+
+  //! Fill method which takes values from another map
+  void Fill2DMon(PixelMon2DMapsLW* oldmap);
+
+  //! Formatting function for histograms (reimplemented from template)
+  virtual void formatHist() override;
+
+ protected:
+  friend class PixelMon2DProfilesLW;
 };
 
-#endif
+#endif  // PIXELMON2DMAPSLW_H_
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DProfilesLW.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DProfilesLW.h
index 83cffbcc8d6d25cb10a3193f0e251dfef35cbe8d..f8772336fe96b63c912901c080cce8f9fd444763 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DProfilesLW.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMon2DProfilesLW.h
@@ -4,53 +4,60 @@
 
 #ifndef PIXELMON2DPROFILESLW_H_
 #define PIXELMON2DPROFILESLW_H_
-#include "AthenaMonitoring/ManagedMonitorToolBase.h"
-#include <string.h>
+#include "PixelMonitoring/HolderTemplate.h"
 
+class string;
 class TProfile2D_LW;
 class Identifier;
 class PixelID;
 class StatusCode;
+namespace PixMon { enum class HistConf; }
 class PixelMon2DMapsLW;
 
-namespace PixMon {
-enum class HistConf;
-}
-
-// A helper class to facilitate definition of per-layer 2D profile maps.
-// It defines a collection of TProfile2D_LW histograms for each pixel layer, which then can be declared or
-// filled in a single call.
-// This books and formats the histograms in the constructor. The fill method will take the identifier 
-// as the input and fill the correct histogram and bin. The histograms are also public so that they
-// can be formated/accessed like any other histograms in the monitoring.
-
-class PixelMon2DProfilesLW
-{
+/**
+ * PixelMon2DProfilesLW histogram holder class
+ *   --> Base type: 2D Profiles (TProfile2D_LW)
+ *   --> Supports:  IBL
+ *                  IBL 2D/3D
+ *                  B0, B1, B2
+ *                  ECA/C
+ *                  DBMA/C
+ *
+ * Collection of 2D pixel component maps, based on the TH2F_LW histogram class.
+ * The initialisation of the components is controlled by the HistConf object.
+ * The fill method will take the identifier as the input and fill the correct
+ * histogram and bin. The histograms are also public so that they can be
+ * formatted/accessed like any other histograms in the monitoring.
+ */
+class PixelMon2DProfilesLW : public PixMon::HolderTemplate<TProfile2D_LW> {
 public:
+  //! Constructor for 2D map profiles
   PixelMon2DProfilesLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval = false);
-  ~PixelMon2DProfilesLW();
-  TProfile2D_LW* IBL3D;
-  TProfile2D_LW* IBL2D;
-  TProfile2D_LW* IBL;
-  TProfile2D_LW* B0;
-  TProfile2D_LW* B1;
-  TProfile2D_LW* B2;
-  TProfile2D_LW* A;
-  TProfile2D_LW* C;
-  TProfile2D_LW* DBMA;
-  TProfile2D_LW* DBMC;
+
+  /**
+   * Standard method to fill the histograms of this container.
+   *
+   * @param id: the identifier of the pixel unit
+   * @param pixID: instance of the class which translates the above ID
+   *        into readable info (e.g. eta/phi module index)
+   * @param value: the fill value
+   */
   void Fill(Identifier &id, const PixelID* pixID, float value);
+
+  //! Fill method which takes values from another 2D profile
   void Fill2DMon(PixelMon2DProfilesLW* oldmap);
+
+  //! Fill method which takes values from a 2D map object
   void FillFromMap(PixelMon2DMapsLW* inputmap, bool clear_inputmap);
+
+  //! Set maximal value of the 2D profile bins
   void SetMaxValue(float max);
+
+  //! Reset the 2D profiles
   void Reset();
-  StatusCode regHist(ManagedMonitorToolBase::MonGroup &group);
-private:
-  void formatHist();
-  std::array<TProfile2D_LW*, 10> m_histograms;
-  const PixMon::HistConf m_config;
-  static const bool m_doIBL;
-  const bool m_copy2DFEval;
+
+  //! Formatting function for histograms (reimplemented from template)
+  virtual void formatHist() override;
 };
 
-#endif
+#endif  // PIXELMON2DPROFILESLW_H_
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
index a7677590ec814b220393aad5322c46750975e21b..26e416271eaf5f44fdcd38aec9868b24c433d2a6 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/PixelMonitoring/PixelMonModules.h
@@ -25,7 +25,6 @@ class PixelMonModules
 {
    public:
       //PixelMonModules();
-      virtual ~PixelMonModules() = 0;
       virtual void formatHist(std::string) = 0;  //pass the bin labels here if needed
       virtual void Reset() = 0;
       virtual StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run) = 0;
@@ -40,7 +39,6 @@ class PixelMonModules1D : public PixelMonModules
    public:
       PixelMonModules1D(std::string name, std::string title, int nbins, double low, double high);
       PixelMonModules1D(std::string name, std::string title, int nbins, double *arr);
-      virtual ~PixelMonModules1D();
       StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run);
       TH1F* IBL[20][14];
       TH1F* B0[13][22];
@@ -63,7 +61,6 @@ class PixelMonModulesProf : public PixelMonModules
    public:
       PixelMonModulesProf(std::string name, std::string title, int nbins, double low, double high);
       PixelMonModulesProf(std::string name, std::string title, int nbins, double *arr);
-      virtual ~PixelMonModulesProf();
       StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run);
       TProfile_LW* IBL[20][14];
       TProfile_LW* B0[13][22];
@@ -84,7 +81,6 @@ class PixelMonModules2D : public PixelMonModules
 {
    public:
       PixelMonModules2D(std::string name, std::string title, int nbins0, double low0, double high0,int nbins1, double low1, double high1);
-      virtual ~PixelMonModules2D();
       StatusCode regHist(ManagedMonitorToolBase* thisptr, std::string path, ManagedMonitorToolBase::Interval_t Run);
       TH2F* IBL[20][14];
       TH2F* B0[13][22];
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
index 5cca08c061e423f20467a966c86a2f4abf3825cd..9a1e7101eb5b57ea2ddebffdf8435fcce9fc458c 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Clusters.cxx
@@ -60,7 +60,7 @@ StatusCode PixelMainMon::BookClustersMon(void)
   int nbins_eta = 13;   double min_eta = -6.5;  double max_eta = min_eta + (1.0*nbins_eta);
   int nbins_tot = 300;  double min_tot = -0.5; double max_tot = min_tot + (1.0*nbins_tot);
   int nbins_ibl_tot = 150;  double min_ibl_tot = -0.5; double max_ibl_tot = min_tot + (1.0*nbins_tot);
-  int nbins_Q = 140;    double min_Q = -0.5; double max_Q = min_Q + (1500.0*nbins_Q);
+  int nbins_Q = 70;     double min_Q = -0.5; double max_Q = min_Q + (3000.0*nbins_Q);
   int nbins_lvl1 = 14;  double min_lvl1 = -1.5; double max_lvl1 = min_lvl1 + (1.0*nbins_lvl1);
   std::string atext_LB = ";lumi block"; 
   std::string atext_BCID = ";BCID"; 
@@ -248,41 +248,41 @@ StatusCode PixelMainMon::BookClustersMon(void)
   if (m_do2DMaps)
     {
       tmp = "Cluster_Occupancy"; tmp2 = "Cluster occupancy";
-      m_cluster_occupancy = new PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+      m_cluster_occupancy = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
       sc = m_cluster_occupancy->regHist(clusterShift);
       
       tmp = "Cluster_LVL1A_Mod"; tmp2 = "Average cluster Level 1 Accept";
-      m_cluster_LVL1A_mod = new PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+      m_cluster_LVL1A_mod = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
       sc = m_cluster_LVL1A_mod->regHist(timeShift);
 
       tmp = "Clus_Occ_SizeCut"; tmp2 = "Size>1 Cluster occupancy";
-      m_clusocc_sizenot1 = new PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+      m_clusocc_sizenot1 = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
       sc = m_clusocc_sizenot1->regHist(clusterShift); 
 
       tmp = "Clus_LVL1A_SizeCut"; tmp2 = "Average Size>1 Cluster Level 1 Accept";
-      m_clus_LVL1A_sizenot1 = new PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+      m_clus_LVL1A_sizenot1 = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
       sc = m_clus_LVL1A_sizenot1->regHist(timeShift); 
 
       if (m_doOnline){
         tmp = "ClusterMap_Mon"; tmp2 = "Cluster map for monitoring";
-        m_clustermap_mon = new PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+        m_clustermap_mon = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
         sc = m_clustermap_mon->regHist(clusterShift);
 
         tmp = "ClusterMap_tmp"; tmp2 = "Cluster map for monitoring";
-        m_clustermap_tmp = new PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+        m_clustermap_tmp = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
         sc = m_clustermap_tmp->regHist(clusterShift);
       }
       if (!m_doOnline){
 	tmp = "Cluster_Size_Map"; tmp2 = "Average cluster size map";
-	m_clussize_map = new PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+	m_clussize_map = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
 	sc = m_clussize_map->regHist(clusterExpert);
 	
 	tmp = "Cluster_Charge_Map"; tmp2 = "Average cluster charge map";
-	m_cluscharge_map = new PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+	m_cluscharge_map = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
 	sc = m_cluscharge_map->regHist(clusterExpert);
 	
 	tmp = "Cluster_ToT_Map"; tmp2 = "Average cluster ToT map";
-	m_clusToT_map = new PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+	m_clusToT_map = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW(tmp.c_str(), (tmp2 + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
 	sc = m_clusToT_map->regHist(clusterExpert);
 	
 
@@ -315,16 +315,16 @@ StatusCode PixelMainMon::BookClustersMon(void)
 
   if (m_doModules && m_doOnTrack)
     {
-      m_cluseff_mod = new PixelMonModulesProf("Clus_track_eff", ("Proportion of clusters on track vs t in module" + m_histTitleExt).c_str(), 2500,-0.5,2499.5);
+      m_cluseff_mod = std::make_unique<PixelMonModulesProf>(PixelMonModulesProf("Clus_track_eff", ("Proportion of clusters on track vs t in module" + m_histTitleExt).c_str(), 2500,-0.5,2499.5));
       sc = m_cluseff_mod->regHist(this,(path+"/Modules_Cluseff").c_str(),run);
       
-      m_cluster_size_mod = new PixelMonModules1D("Cluster_size", ("Cluster size in Module" + m_histTitleExt).c_str(), 20,-0.5,19.5);
+      m_cluster_size_mod = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Cluster_size", ("Cluster size in Module" + m_histTitleExt).c_str(), 20,-0.5,19.5));
       sc = m_cluster_size_mod->regHist(this,(path+"/Modules_ClusterSize").c_str(),run);
       
-      m_cluster_num_mod = new PixelMonModules1D("Cluster_num", ("Number of clusters per event in module" + m_histTitleExt).c_str(), 30,-0.5,29.5);
+      m_cluster_num_mod = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Cluster_num", ("Number of clusters per event in module" + m_histTitleExt).c_str(), 30,-0.5,29.5));
       sc = m_cluster_num_mod->regHist(this,(path+"/Modules_NumberOfClusters").c_str(),run);
       
-      m_cluster_ToT_mod = new PixelMonModules1D("Cluster_ToT", ("Cluster ToT in Module" + m_histTitleExt).c_str(), 200,0.,200.);
+      m_cluster_ToT_mod = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Cluster_ToT", ("Cluster ToT in Module" + m_histTitleExt).c_str(), 200,0.,200.));
       sc = m_cluster_ToT_mod->regHist(this,(path+"/Modules_ClusToT").c_str(),run);
     }
   if (m_doOnline)
@@ -407,7 +407,7 @@ StatusCode PixelMainMon::BookClustersLumiBlockMon(void)
   sc = lumiBlockHist.regHist(m_cluster_ToT_LB  = TH1F_LW::create("Cluster_ToT_LB", ("Cluster Time over Threshold" + m_histTitleExt + ";ToT;# clusters").c_str(), 300,-0.5,299.5));   
   
   if (m_do2DMaps) {
-    m_cluster_occupancy_LB = new PixelMon2DMapsLW("Cluster_Occupancy_LB", ("Cluster Occupancy" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+    m_cluster_occupancy_LB = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Cluster_Occupancy_LB", ("Cluster Occupancy" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
     sc = m_cluster_occupancy_LB->regHist(lumiBlockHist);
   }
   if (m_doLowOccupancy || m_doHighOccupancy) {
@@ -417,9 +417,9 @@ StatusCode PixelMainMon::BookClustersLumiBlockMon(void)
   }
   
   if (m_doModules && m_doOnTrack) {  // normally not booked, as doModules is online, doLumiBlock is offline
-    m_cluster_num_mod_LB = new PixelMonModules1D("Cluster_num_LB", ("Number of clusters per event in module" + m_histTitleExt).c_str(), 20,-0.5,59.5);
+    m_cluster_num_mod_LB = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Cluster_num_LB", ("Number of clusters per event in module" + m_histTitleExt).c_str(), 20,-0.5,59.5));
     sc = m_cluster_num_mod_LB->regHist(this,(path+"/Modules_NumberOfClusters").c_str(),lowStat);
-    m_cluster_ToT_mod_LB = new PixelMonModules1D("Cluster_ToT_mod_LB", ("Cluster ToT in Module" + m_histTitleExt).c_str(), 75,0.,300.);
+    m_cluster_ToT_mod_LB = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Cluster_ToT_mod_LB", ("Cluster ToT in Module" + m_histTitleExt).c_str(), 75,0.,300.));
     sc = m_cluster_ToT_mod_LB->regHist(this,(path+"/Modules_ClusToT").c_str(),lowStat);
   }
   
@@ -693,7 +693,7 @@ StatusCode PixelMainMon::FillClustersMon(void)
   //////////////////////Fill after event block////////////////
   if (m_doOnline)//should we fill these mid run or only at the end?
     {
-      FillSummaryHistos(m_cluster_occupancy,
+      FillSummaryHistos(m_cluster_occupancy.get(),
                         m_cluster_occupancy_summary_mod[PixLayer::kECA],
                         m_cluster_occupancy_summary_mod[PixLayer::kECC],
                         m_cluster_occupancy_summary_mod[PixLayer::kIBL],
@@ -701,7 +701,7 @@ StatusCode PixelMainMon::FillClustersMon(void)
                         m_cluster_occupancy_summary_mod[PixLayer::kB1],
                         m_cluster_occupancy_summary_mod[PixLayer::kB2]);
       if (m_doRefresh) {
-	if (m_clustermap_mon && m_clustermap_tmp) m_clustermap_mon->Fill2DMon(m_clustermap_tmp);
+	if (m_clustermap_mon && m_clustermap_tmp) m_clustermap_mon->Fill2DMon(m_clustermap_tmp.get());
      }
     }      
   
@@ -777,7 +777,7 @@ StatusCode PixelMainMon::ProcClustersMon(void)
 {
   if (m_doOffline)
     {
-      FillSummaryHistos(m_cluster_occupancy,
+      FillSummaryHistos(m_cluster_occupancy.get(),
                         m_cluster_occupancy_summary_mod[PixLayer::kECA],
                         m_cluster_occupancy_summary_mod[PixLayer::kECC],
                         m_cluster_occupancy_summary_mod[PixLayer::kIBL],
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
index cf2ab68095ab8c454196c618a95e53b6392c0c3f..481a1ca0e03b1ca573336c4d9b43f2cbc4dd46f7 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Errors.cxx
@@ -47,22 +47,22 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    MonGroup rodExpert(this, path2.c_str(), run, ATTRIB_MANAGED); //declare a group of histograms
 
    const std::array <std::pair <std::string, std::string>, kNumErrorStates > error_state_labels = {{
-       std::make_pair("Mod_Sync_BCID1_errors",         "Synchronization Module BCID1 errors"),
-       std::make_pair("Mod_Sync_BCID2_errors",         "Synchronization Module BCID2 errors"),
-       std::make_pair("Mod_Sync_LVL1ID_errors",        "Synchronization Module LVL1ID errors"),
-       std::make_pair("ROD_Sync_BCID_errors",          "Synchronization ROD BCID errors"),
-       std::make_pair("ROD_Sync_LVL1ID_errors",        "Synchronization ROD LVL1ID errors"),
-       std::make_pair("Mod_Trunc_EOC_errors",          "Truncation Module EOC errors"),
-       std::make_pair("Mod_Trunc_Hit_Overflow_errors", "Truncation Module Hit Overflow errors"),
-       std::make_pair("Mod_Trunc_EoE_Overflow_errors", "Truncation Module EoE Overflow errors"),
-       std::make_pair("ROD_Trunc_HT_Limit_errors",     "Truncation ROD H/T Limit errors"),
-       std::make_pair("ROD_Trunc_ROD_OF_errors",       "Truncation ROD Overflow errors"),
-       std::make_pair("Optical_Errors",                "Preamble/header Errors"),
-       std::make_pair("SEU_Hit_Parity",                "SEU Hit Parity errors"),
-       std::make_pair("SEU_Register_Parity",           "SEU Register Parity errors"),
-       std::make_pair("SEU_Hamming",                   "SEU Hamming Code errors"),
-       std::make_pair("ROD_Timeout",                   "ROD Formatter Timeout errors"),
-       std::make_pair("FE_Warning",                    "FE Warning errors"),
+       std::make_pair("Mod_Sync_BCID1_errors",         "FE/MCC BCID1 Sync Errors"),
+       std::make_pair("Mod_Sync_BCID2_errors",         "FE/MCC BCID2 Sync Errors"),
+       std::make_pair("Mod_Sync_LVL1ID_errors",        "FE/MCC LVL1ID Sync Errors"),
+       std::make_pair("ROD_Sync_BCID_errors",          "ROD BCID Sync Errors"),
+       std::make_pair("ROD_Sync_LVL1ID_errors",        "ROD LVL1ID Sync Errors"),
+       std::make_pair("Mod_Trunc_EOC_errors",          "FE/MCC EoC Trunc Errors"),
+       std::make_pair("Mod_Trunc_Hit_Overflow_errors", "FE/MCC Hit Overflow Trunc Errors"),
+       std::make_pair("Mod_Trunc_EoE_Overflow_errors", "FE/MCC EoE Overflow Trunc Errors"),
+       std::make_pair("ROD_Trunc_HT_Limit_errors",     "ROD H/T Limit Trunc Errors"),
+       std::make_pair("ROD_Trunc_ROD_OF_errors",       "ROD Overflow Trunc Errors"),
+       std::make_pair("Optical_Errors",                "Preamble/Header Errors"),
+       std::make_pair("SEU_Hit_Parity",                "SEU Hit Parity Errors"),
+       std::make_pair("SEU_Register_Parity",           "SEU Register Parity Errors"),
+       std::make_pair("SEU_Hamming",                   "SEU Hamming Code Errors"),
+       std::make_pair("ROD_Timeout",                   "ROD Formatter Timeout Errors"),
+       std::make_pair("FE_Warning",                    "FE Warning Errors"),
      }};
 
    std::array <std::pair <std::string, std::string>, kNumErrorStatesIBL > error_state_labelsIBL = {{
@@ -96,14 +96,14 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
      }};
 
    const char * errorBitsPIX[kNumErrorBits] = {
-                                    "ROD Trunc FIFO Overflow",   "ROD Trunc H/T Limit",       "2",                 "3",
-                                    "Module Trunc EoC",          "SEU Hit Parity",            "SEU Reg Parity",    "SEU Hamming Code",
-                                    "FE Warning (Bit Flip)",     "9",                         "10",                "11",
-                                    "Module Trunc Hit Overflow", "Module Trunc EoE Overflow", "Module Sync BCID1", "Module Sync BCID2",
-                                    "Module Sync LVL1ID",        "17",                        "18",                "19",
-                                    "ROD Sync BCID",             "ROD Sync LVL1ID",           "Timeout",           "Optical",
-                                    "24",                        "25",                        "26",                "27",
-                                    "28",                        "29",                        "30",                "31"
+                                    "ROD Overflow Trunc",        "ROD H/T Limit Trunc",       "2",                     "3",
+                                    "FE/MCC EoC Trunc",          "SEU Hit Parity",            "SEU Register Parity",   "SEU Hamming Code",
+                                    "FE Warning (Bit Flip)",     "9",                         "10",                    "11",
+                                    "FE/MCC Hit Overflow Trunc", "FE/MCC EoE Overflow Trunc", "FE/MCC BCID1 Sync",     "FE/MCC BCID2 Sync",
+                                    "FE/MCC LVL1ID Sync",        "17",                        "18",                    "19",
+                                    "ROD BCID Sync",             "ROD LVL1ID Sync",           "ROD Formatter Timeout", "Preamble/Header",
+                                    "24",                        "25",                        "26",                    "27",
+                                    "28",                        "29",                        "30",                    "31"
    };
 
    const char* errorBitsIBL[kNumErrorBits] = {
@@ -118,21 +118,21 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    };
 
    const std::array <std::pair <std::string, std::string>, ErrorCategoryMODROD::COUNT> error_type_labels = {{
-       std::make_pair("SyncErrors_Mod",        "SyncErrors_Mod"),
-       std::make_pair("SyncErrors_ROD",        "SyncErrors_ROD"),
-       std::make_pair("TruncErrors_Mod",       "TruncErrors_Mod"),
-       std::make_pair("TruncErrors_ROD",       "TruncErrors_ROD"),
-       std::make_pair("OpticalErrors_RODMod",  "Preamble/headerErrors"),
-       std::make_pair("SEUErrors_RODMod",      "SEUErrors"),
-       std::make_pair("TimeoutErrors_RODMod",  "TimeoutErrors"),
+       std::make_pair("SyncErrors_Mod",        "FE/MCC Sync Errors"),
+       std::make_pair("SyncErrors_ROD",        "ROD Sync Errors"),
+       std::make_pair("TruncErrors_Mod",       "FE/MCC Trunc Errors"),
+       std::make_pair("TruncErrors_ROD",       "ROD Trunc Errors"),
+       std::make_pair("OpticalErrors_RODMod",  "Preamble/Header Errors"),
+       std::make_pair("SEUErrors_RODMod",      "SEU Errors"),
+       std::make_pair("TimeoutErrors_RODMod",  "Timeout Errors"),
      }};
 
    const std::array <std::pair <std::string, std::string>, ErrorCategory::COUNT> error_cat_labels = {{
-       std::make_pair("SyncErrors",     "SyncErrors"),
-       std::make_pair("TruncErrors",    "TruncErrors"),
-       std::make_pair("OpticalErrors",  "Preamble/headerErrors"),
-       std::make_pair("SEUErrors",      "SEUErrors"),
-       std::make_pair("TimeoutErrors",  "TimeoutErrors"),
+       std::make_pair("SyncErrors",     "Sync Errors (FE/MCC & ROD)"),
+       std::make_pair("TruncErrors",    "Trunc Errors (FE/MCC & ROD)"),
+       std::make_pair("OpticalErrors",  "Preamble/Header Errors"),
+       std::make_pair("SEUErrors",      "SEU Errors"),
+       std::make_pair("TimeoutErrors",  "Timeout Errors"),
      }};
 
    const std::string modlabel2[PixLayerIBL2D3D::COUNT] = {"ECA", "ECC", "B0", "B1", "B2", "IBL", "IBL2D", "IBL3D"};
@@ -142,8 +142,8 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    std::string atext_LB  = ";lumi block";
    std::string atext_err = ";# errors/event";
    std::string atext_erf = ";# errors/module/event";
-   std::string atext_erb = ";Error bit";
-   std::string atext_ers = ";Error state";
+   std::string atext_erb = ";error bit";
+   std::string atext_ers = ";error type";
    int nbins_LB = m_lbRange; float minbin_LB = -0.5; float maxbin_LB = minbin_LB + (1.0*nbins_LB);
    std::string hname;
    std::string htitles;
@@ -168,16 +168,16 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
       }
 
       hname = makeHistname(("errors_per_lumi_"+modlabel2[i]), false);
-      htitles = makeHisttitle(("Average number of errors per event, "+modlabel2[i]), (atext_LB+atext_err), false);
+      htitles = makeHisttitle(("Average Total Errors, "+modlabel2[i]), (atext_LB+atext_err), false);
       sc = rodHistos.regHist(m_errhist_tot_LB[i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
 
       hname = makeHistname(("ErrorBit_per_lumi_"+modlabel2[i]), false);
-      htitles = makeHisttitle(("Average Errors per module per event, "+modlabel2[i]), (atext_LB+atext_erb+atext_err), false);
+      htitles = makeHisttitle(("Average Errors by Error Bits, "+modlabel2[i]), (atext_LB+atext_erb+atext_erf), false);
       sc = rodHistos.regHist(m_errhist_per_bit_LB[i] = TProfile2D_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB, 31, 0., 31.));
       m_errhist_per_bit_LB[i]->SetOption("colz");
 
       hname = makeHistname(("Error_per_lumi_"+modlabel2[i]), false);
-      htitles = makeHisttitle(("Average Errors per module per event, "+modlabel2[i]), (atext_LB+atext_ers+atext_err), false);
+      htitles = makeHisttitle(("Average Errors by Error Types, "+modlabel2[i]), (atext_LB+atext_ers+atext_err), false);
       sc = rodHistos.regHist(m_errhist_per_type_LB[i] = TProfile2D_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB, 7, 0., 7.));
       m_errhist_per_type_LB[i]->SetOption("colz");
 
@@ -198,7 +198,7 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
       const std::string tmp[ErrorCategory::COUNT] = {"SyncErrorsFrac_per_event", "TruncationErrorsFrac_per_event", "OpticalErrorsFrac_per_event", "SEUErrorsFrac_per_event", "TimeoutErrorsFrac_per_event"};
       for (int j = 0; j < ErrorCategory::COUNT; j++) {
          hname = makeHistname((tmp[j]+"_"+modlabel2[i]), false);
-         htitles = makeHisttitle((tmp[j]+", "+modlabel2[i]), (atext_LB+atext_erf), false);
+         htitles = makeHisttitle(("Average " + error_cat_labels[j].second + " per Module" + ", " + modlabel2[i]), (atext_LB + atext_erf), false);
          sc = rodHistos.regHist(m_errhist_errcat_avg[j][i] = TProfile_LW::create(hname.c_str(), htitles.c_str(), nbins_LB, minbin_LB, maxbin_LB));
       }
 
@@ -220,29 +220,29 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    }
 
    if (m_doModules) {
-      m_errors = new PixelMonModules1D("errors", ("Errors in module:ErrorType" + m_histTitleExt + ";Number of Errors").c_str(), 7, 0.5, 7.5);
+      m_errors = std::make_unique<PixelMonModules1D>(PixelMonModules1D("errors", ("Errors in module:ErrorType" + m_histTitleExt + ";Number of Errors").c_str(), 7, 0.5, 7.5));
       sc = m_errors->regHist(this, (path+"/ModulesErrors").c_str(), run);
       for (int k = 0; k < 7; k++) m_errors->SetBinLabel(error_type_labels[k].second.c_str(), k+1);
    }
 
    if (m_do2DMaps && !m_doOnline) {
       for (int i = 0; i < ErrorCategoryMODROD::COUNT - 3; i++) {
-         m_errhist_errtype_map[i] = new PixelMon2DMapsLW(error_type_labels[i].first, (error_type_labels[i].second + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+         m_errhist_errtype_map[i] = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(error_type_labels[i].first, ("Total " + error_type_labels[i].second + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true));
          sc = m_errhist_errtype_map[i]->regHist(rodHistos);
       }
       for (int i = 0; i < ErrorCategory::COUNT; i++) {
-         m_errhist_errcat_map[i] = new PixelMon2DMapsLW(error_cat_labels[i].first.c_str(), (error_cat_labels[i].second + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+         m_errhist_errcat_map[i] = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(error_cat_labels[i].first, ("Total " + error_cat_labels[i].second + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true));
          sc = m_errhist_errcat_map[i]->regHist(rodHistos);
       }
    }
 
-   if (m_do2DMaps && !m_doOnline) {
+   if (m_doOfflineAnalysis) {
       for (int j = 0; j < kNumErrorStates; j++) {
-         m_errhist_expert_LB_maps[j]  = new PixelMon2DLumiMaps(error_state_labels[j].first + "_int_LB", error_state_labels[j].second + " per event per LB" + m_histTitleExt, "# Errors", PixMon::HistConf::kPix);
+         m_errhist_expert_LB_maps[j]  = std::make_unique<PixelMon2DLumiMaps>(PixelMon2DLumiMaps(error_state_labels[j].first + "_int_LB", error_state_labels[j].second + " per event per LB" + m_histTitleExt, "# Errors", PixMon::HistConf::kPix));
          sc = m_errhist_expert_LB_maps[j]->regHist(rodExpert);
       }
       for (int j = kNumErrorStates; j < kNumErrorStates+kNumErrorStatesIBL; j++) {
-         m_errhist_expert_LB_maps[j] = new PixelMon2DLumiMaps(error_state_labelsIBL[j - kNumErrorStates].first + "_int_LB", error_state_labelsIBL[j - kNumErrorStates].second + " per event per LB" + m_histTitleExt, "# Errors", PixMon::HistConf::kIBL);
+         m_errhist_expert_LB_maps[j] = std::make_unique<PixelMon2DLumiMaps>(PixelMon2DLumiMaps(error_state_labelsIBL[j - kNumErrorStates].first + "_int_LB", error_state_labelsIBL[j - kNumErrorStates].second + " per event per LB" + m_histTitleExt, "# Errors", PixMon::HistConf::kIBL));
          sc = m_errhist_expert_LB_maps[j]->regHist(rodExpert);
       }
    }
@@ -255,12 +255,12 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
       }
       hname = makeHistname((error_state_labels[j].first+"_Map"), false);
       htitles = makeHisttitle((error_state_labels[j].second + " per event per LB"), "", false);
-      m_errhist_expert_maps[j] = new PixelMon2DMapsLW(hname.c_str(), htitles.c_str(), PixMon::HistConf::kPix, true);
+      m_errhist_expert_maps[j] = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(hname.c_str(), htitles.c_str(), PixMon::HistConf::kPix, true));
       sc = m_errhist_expert_maps[j]->regHist(rodExpert);
    }
 
    if (m_do2DMaps) {
-      m_errhist_femcc_errwords_map = new PixelMon2DProfilesLW("femcc_errorwords", ("Average FE/MCC Error Words" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D);
+      m_errhist_femcc_errwords_map = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("femcc_errorwords", ("Average FE/MCC Error Words" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D));
       sc = m_errhist_femcc_errwords_map->regHist(rodHistos);
    }
 
@@ -273,20 +273,20 @@ StatusCode PixelMainMon::BookRODErrorMon(void)
    for (int j = kNumErrorStates; j < kNumErrorStates+kNumErrorStatesIBL; j++) {
       hname = makeHistname((error_state_labelsIBL[j - kNumErrorStates].first+"_Map"), false);
       htitles = makeHisttitle((error_state_labelsIBL[j - kNumErrorStates].second + " per event per LB"), "", false);
-      m_errhist_expert_maps[j] = new PixelMon2DMapsLW(hname.c_str(), htitles.c_str(), PixMon::HistConf::kIBL, m_doIBL);
+      m_errhist_expert_maps[j] = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW(hname.c_str(), htitles.c_str(), PixMon::HistConf::kIBL, m_doIBL));
       sc = m_errhist_expert_maps[j]->regHist(rodExpert);
    }
 
    hname = makeHistname("ServiceRecord_Unweighted_IBL", false);
-   htitles = makeHisttitle("ServiceRecord Unweighted,_IBL", ";SR;Count", false);
+   htitles = makeHisttitle("ServiceRecord Unweighted, IBL", ";SR;Count", false);
    sc = rodExpert.regHist(m_errhist_expert_servrec_ibl_unweighted = TH1F_LW::create(hname.c_str(), htitles.c_str(), 32, -0.5, 31.5));
 
    hname = makeHistname("ServiceRecord_Weighted_IBL", false);
-   htitles = makeHisttitle("ServiceRecord Weighted,_IBL", ";SR;Count", false);
+   htitles = makeHisttitle("ServiceRecord Weighted, IBL", ";SR;Count", false);
    sc = rodExpert.regHist(m_errhist_expert_servrec_ibl_weighted = TH1F_LW::create(hname.c_str(), htitles.c_str(), 32, -0.5, 31.5));
 
    hname = makeHistname("ServiceRecord_Count_IBL", false);
-   htitles = makeHisttitle("ServiceRecord Count,_IBL", ";SR;Count", false);
+   htitles = makeHisttitle("ServiceRecord Count, IBL", ";SR;Count", false);
    sc = rodExpert.regHist(m_errhist_expert_servrec_ibl_count = TH1F_LW::create(hname.c_str(), htitles.c_str(), 100, -0.5, 99.5));
 
    if (m_errhist_expert_servrec_ibl_unweighted) {
@@ -322,13 +322,13 @@ StatusCode PixelMainMon::BookRODErrorLumiBlockMon(void)
    StatusCode sc;
 
    if (m_do2DMaps && !m_doOnline) {
-      m_errors_LB = new PixelMon2DMapsLW("Errors_LB", ("Errors" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+      m_errors_LB = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Errors_LB", ("Errors" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true));
       sc = m_errors_LB->regHist(lumiBlockHist);
 
-      m_errors_RODSync_mod = new PixelMon2DMapsLW("Errors_RODSync_LB", ("Errors_RODSync" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+      m_errors_RODSync_mod = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Errors_RODSync_LB", ("Errors_RODSync" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true));
       sc = m_errors_RODSync_mod->regHist(lumiBlockHist);
 
-      m_errors_ModSync_mod = new PixelMon2DMapsLW("Errors_ModSync_LB", ("Errors_ModSync" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+      m_errors_ModSync_mod = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Errors_ModSync_LB", ("Errors_ModSync" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true));
       sc = m_errors_ModSync_mod->regHist(lumiBlockHist);
    }
 
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
index 9216039a52e85ba62727a7883afbb52f3f5900f9..e064e30cc950f1b69067242d1b2cecfc5f2f162f 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Hits.cxx
@@ -158,7 +158,7 @@ StatusCode PixelMainMon::BookHitsMon(void)
       }
    }
    
-   m_hitmap_tmp = new PixelMon2DMapsLW("HitMap_tmp", ("Hit map for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+   m_hitmap_tmp = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("HitMap_tmp", ("Hit map for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
    sc = m_hitmap_tmp->regHist(rdoShift);
 
    for( int i=0; i<PixLayer::COUNT; i++){
@@ -173,7 +173,7 @@ StatusCode PixelMainMon::BookHitsMon(void)
        sc = rdoShift.regHist(m_occupancy_time2= new TProfile("occupancy_time_1hr",   ("Module hit occupancy as function of time over 1 hour.  36 sec/bin" + m_histTitleExt + ";time;module occupancy").c_str(), 99,0.,1.,"i"));
        sc = rdoShift.regHist(m_occupancy_time3= new TProfile("occupancy_time_6hr",   ("Module hit occupancy as function of time over 6 hours.  3.6 min/bin" + m_histTitleExt + ";time;module occupancy").c_str(), 99,0.,1.,"i"));
        
-       m_hitmap_mon = new PixelMon2DMapsLW("HitMap_Mon", ("Hit map for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+       m_hitmap_mon = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("HitMap_Mon", ("Hit map for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
        sc = m_hitmap_mon->regHist(rdoShift);
        
        for (int i=0; i<PixLayer::COUNT-1+(int)(m_doIBL); i++){
@@ -233,29 +233,29 @@ StatusCode PixelMainMon::BookHitsMon(void)
 
    if (m_do2DMaps)
      {
-       m_occupancy = new PixelMon2DMapsLW("Occupancy", ("hit map"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+       m_occupancy = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Occupancy", ("hit map"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
        sc = m_occupancy->regHist(rdoShift);
        
-       m_average_pixocc = new PixelMon2DMapsLW("Occupancy_per_pixel", ("#hits / pixel" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, true);
+       m_average_pixocc = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Occupancy_per_pixel", ("#hits / pixel" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D, false));
        sc = m_average_pixocc->regHist(rdoShift);
        
-       m_occupancy_pix_evt = new PixelMon2DProfilesLW("Occupancy_per_pixel_event", ("#hits / pixel / event" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D);
+       m_occupancy_pix_evt = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("Occupancy_per_pixel_event", ("#hits / pixel / event" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D));
        sc = m_occupancy_pix_evt->regHist(rdoShift);
              
-       m_Lvl1ID_diff_mod_ATLAS_per_LB = new PixelMon2DLumiProfiles("Lvl1ID_diff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID", PixMon::HistConf::kPixIBL);
+       m_Lvl1ID_diff_mod_ATLAS_per_LB = std::make_unique<PixelMon2DLumiProfiles>(PixelMon2DLumiProfiles("Lvl1ID_diff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID", PixMon::HistConf::kPixIBL));
        sc = m_Lvl1ID_diff_mod_ATLAS_per_LB->regHist(timeExpert);
        
-       m_Lvl1ID_absdiff_mod_ATLAS_per_LB = new PixelMon2DLumiProfiles("Lvl1ID_absdiff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID", PixMon::HistConf::kPixIBL);
+       m_Lvl1ID_absdiff_mod_ATLAS_per_LB = std::make_unique<PixelMon2DLumiProfiles>(PixelMon2DLumiProfiles("Lvl1ID_absdiff_ATLAS_mod_per_LB", ("ATLAS_{Level 1 ID} - Module_{Level 1 ID} per LB" + m_histTitleExt).c_str(),"#Delta Level 1 ID", PixMon::HistConf::kPixIBL));
        sc = m_Lvl1ID_absdiff_mod_ATLAS_per_LB->regHist(timeExpert);
      }
    
    if (m_doModules)
      {
-       m_hit_num_mod = new PixelMonModules1D("Hit_num", ("Number of hits in a module in an event" + m_histTitleExt).c_str(), 15,-0.5,149.5);
+       m_hit_num_mod = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Hit_num", ("Number of hits in a module in an event" + m_histTitleExt).c_str(), 15,-0.5,149.5));
        sc = m_hit_num_mod->regHist(this,(path+"/Modules_NumberOfHits").c_str(),run);
-       m_hiteff_mod = new PixelMonModulesProf("Hit_track_eff", ("Proportion of hits on track" + m_histTitleExt).c_str(), 2500,-0.5,2499.5);
+       m_hiteff_mod = std::make_unique<PixelMonModulesProf>(PixelMonModulesProf("Hit_track_eff", ("Proportion of hits on track" + m_histTitleExt).c_str(), 2500,-0.5,2499.5));
        sc = m_hiteff_mod->regHist(this,(path+"/Modules_HitEff").c_str(),run);
-       m_FE_chip_hit_summary = new PixelMonModules1D("FE_Chip_Summary", ("FE Chip Summary" + m_histTitleExt).c_str(), 16,-0.5,15.5);
+       m_FE_chip_hit_summary = std::make_unique<PixelMonModules1D>(PixelMonModules1D("FE_Chip_Summary", ("FE Chip Summary" + m_histTitleExt).c_str(), 16,-0.5,15.5));
        sc = m_FE_chip_hit_summary->regHist(this,(path+"/Modules_FEChipSummary").c_str(),run);
      }
 
@@ -281,7 +281,7 @@ StatusCode PixelMainMon::BookHitsMon(void)
      }
    if (m_doPixelOccupancy)
      {
-       m_pixel_occupancy = new PixelMonModules2D("Pixel_Occupancy", ("Pixel Occupancy" + m_histTitleExt).c_str(), 160, -0.,160.,336,0.,336.);
+       m_pixel_occupancy = std::make_unique<PixelMonModules2D>(PixelMonModules2D("Pixel_Occupancy", ("Pixel Occupancy" + m_histTitleExt).c_str(), 160, -0.,160.,336,0.,336.));
        sc = m_pixel_occupancy->regHist(this,(path+"/PixelOccupancy").c_str(),run);
      }
 
@@ -364,7 +364,7 @@ StatusCode PixelMainMon::BookHitsLumiBlockMon(void)
    if(m_doModules) {
       hname = makeHistname("num_Hits_mod_LB", false);
       htitles = makeHisttitle("Number of pixel hits in a module in an event", (atext_hit+atext_nevt), false);
-      m_hit_num_mod_LB = new PixelMonModules1D(hname.c_str(), htitles.c_str(), 20, -0.5, 19.5);
+      m_hit_num_mod_LB = std::make_unique<PixelMonModules1D>(PixelMonModules1D(hname.c_str(), htitles.c_str(), 20, -0.5, 19.5));
       sc = m_hit_num_mod_LB->regHist(this, (path+"/Modules_NumberOfHits").c_str(), lowStat);
    }
    for( int i=0; i<PixLayer::COUNT; i++){
@@ -381,7 +381,7 @@ StatusCode PixelMainMon::BookHitsLumiBlockMon(void)
       sc = lumiBlockHist.regHist(m_Lvl1A_10min_mod[i] = TH1F_LW::create(hname.c_str(), htitles.c_str(), 14, -1.5, 12.5));
    }
 
-   m_occupancy_10min = new PixelMon2DMapsLW("Occupancy_10min", ("hit occupancy" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+   m_occupancy_10min = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Occupancy_10min", ("hit occupancy" + m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
    sc = m_occupancy_10min->regHist(lumiBlockHist);
    
    if (sc.isFailure()) ATH_MSG_WARNING("Problems with booking Hit histograms per LB (low stat)");
@@ -540,7 +540,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
              pixlayeribl2d3d < PixLayerIBL2D3D::COUNT &&
              nChannels_mod[pixlayeribl2d3d] > 0 )
         {
-          m_average_pixocc->WeightingFill(rdoID, m_pixelid, 1.0/( 1.0*nChannels_mod[pixlayeribl2d3d]) );
+          m_average_pixocc->Fill(rdoID, m_pixelid, 1.0/( 1.0*nChannels_mod[pixlayeribl2d3d]) );
         }
 
        
@@ -668,7 +668,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
   ////////////////////Fill after event block////////////////
   if (m_doOnline)//should we fill these mid run or only at the end?
     {
-      FillSummaryHistos(m_occupancy, m_occupancy_summary_mod[PixLayer::kECA], m_occupancy_summary_mod[PixLayer::kECC], 
+      FillSummaryHistos(m_occupancy.get(), m_occupancy_summary_mod[PixLayer::kECA], m_occupancy_summary_mod[PixLayer::kECC],
 			m_occupancy_summary_mod[PixLayer::kIBL], m_occupancy_summary_mod[PixLayer::kB0], 
 			m_occupancy_summary_mod[PixLayer::kB1],  m_occupancy_summary_mod[PixLayer::kB2]);
       if(m_occupancy_time1&&m_occupancy_time2&&m_occupancy_time3) FillTimeHisto(double(nhits/(1744.0+280*m_doIBL)),m_occupancy_time1, m_occupancy_time2, m_occupancy_time3,10.,60.,360. );
@@ -676,8 +676,8 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
 	for(int i=0; i<PixLayer::COUNT; i++)
 	  if( m_hit_ToT_Mon_mod[i] && m_hit_ToT_tmp_mod[i]) TH1FFillMonitoring(m_hit_ToT_Mon_mod[i], m_hit_ToT_tmp_mod[i]);
 	if ( m_hitmap_tmp && m_hitmap_mon) {
-	  if ( m_occupancy_pix_evt ) m_occupancy_pix_evt->FillFromMap(m_hitmap_tmp, false);
-	  m_hitmap_mon->Fill2DMon(m_hitmap_tmp);
+	  if ( m_occupancy_pix_evt ) m_occupancy_pix_evt->FillFromMap(m_hitmap_tmp.get(), false);
+	  m_hitmap_mon->Fill2DMon(m_hitmap_tmp.get());
 	}
       }
     } //end of doOnline loop processing                                  
@@ -688,7 +688,7 @@ StatusCode PixelMainMon::FillHitsMon(void) //Called once per event
     if (m_hits_per_lumi_mod[i]) m_hits_per_lumi_mod[i]->Fill(m_manager->lumiBlockNumber(), nhits_mod[i]);
   
   /// Fill average occupancy
-  if ( !m_doOnline && m_occupancy_pix_evt && m_hitmap_tmp) m_occupancy_pix_evt->FillFromMap(m_hitmap_tmp, true);
+  if ( !m_doOnline && m_occupancy_pix_evt && m_hitmap_tmp) m_occupancy_pix_evt->FillFromMap(m_hitmap_tmp.get(), true);
   
   double avgocc = 0;
   double avgocc_mod[PixLayerIBL2D3D::COUNT] = {0};
@@ -853,7 +853,7 @@ StatusCode PixelMainMon::ProcHitsMon(void)
   
   if (m_doOffline)
     {
-      FillSummaryHistos(m_occupancy, m_occupancy_summary_mod[PixLayer::kECA], m_occupancy_summary_mod[PixLayer::kECC], 
+      FillSummaryHistos(m_occupancy.get(), m_occupancy_summary_mod[PixLayer::kECA], m_occupancy_summary_mod[PixLayer::kECC],
 			m_occupancy_summary_mod[PixLayer::kIBL], m_occupancy_summary_mod[PixLayer::kB0], 
 			m_occupancy_summary_mod[PixLayer::kB1],  m_occupancy_summary_mod[PixLayer::kB2]);
     }
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
index 7980fa5dccbad738a29323da454c5ed7cbd7f81c..a6d4be445898da16a9c4e2e2ba63e52f295e01c4 100755
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMainMon.cxx
@@ -53,6 +53,11 @@
 #include "EventInfo/EventID.h"
 #include "TrkToolInterfaces/ITrackHoleSearchTool.h"
 #include "PathResolver/PathResolver.h"
+#include "PixelMonitoring/PixelMon2DMapsLW.h"
+#include "PixelMonitoring/PixelMon2DProfilesLW.h"
+#include "PixelMonitoring/PixelMon2DLumiMaps.h"
+#include "PixelMonitoring/PixelMon2DLumiProfiles.h"
+#include "PixelMonitoring/PixelMonModules.h"
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -168,8 +173,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    /// number of hits
    m_hits_per_lumi = 0;
    m_num_hits = 0;
-   m_hitmap_tmp = 0;
-   m_hitmap_mon = 0;
    memset(m_nhits_mod, 0, sizeof(m_nhits_mod));
    memset(m_hits_per_lumi_mod, 0, sizeof(m_hits_per_lumi_mod));
    memset(m_nlargeevt_per_lumi_mod, 0, sizeof(m_nlargeevt_per_lumi_mod));
@@ -183,10 +186,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    memset(m_avgocc_active_per_lumi_mod, 0, sizeof(m_avgocc_active_per_lumi_mod));
    memset(m_maxocc_per_lumi_mod, 0, sizeof(m_maxocc_per_lumi_mod));
    memset(m_maxocc_per_bcid_mod, 0, sizeof(m_maxocc_per_bcid_mod));
-   m_occupancy = 0;
-   m_average_pixocc = 0;
-   m_occupancy_pix_evt = 0;
-   m_occupancy_10min = 0;
    m_occupancy_time1 = 0;
    m_occupancy_time2 = 0;
    m_occupancy_time3 = 0;
@@ -211,16 +210,9 @@ PixelMainMon::PixelMainMon(const std::string & type,
    memset(m_Lvl1A_10min_mod, 0, sizeof(m_Lvl1A_10min_mod));
    memset(m_Lvl1ID_diff_mod_ATLAS_mod, 0, sizeof(m_Lvl1ID_diff_mod_ATLAS_mod));
    memset(m_diff_ROD_vs_Module_BCID_mod, 0, sizeof(m_diff_ROD_vs_Module_BCID_mod));
-   m_Lvl1ID_diff_mod_ATLAS_per_LB = 0;
-   m_Lvl1ID_absdiff_mod_ATLAS_per_LB = 0;
    /// Quick status
    m_nhits_L0_B11_S2_C6 = 0;
    m_occupancy_L0_B11_S2_C6 = 0;
-   /// module histo
-   m_hit_num_mod = 0;
-   m_hiteff_mod = 0;
-   m_FE_chip_hit_summary = 0;
-   m_pixel_occupancy = 0;
    /// details
    m_Details_mod1_num_hits = 0;
    m_Details_mod2_num_hits = 0;
@@ -247,16 +239,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_tracksPerEvt_per_lumi = 0;
    m_tracksPerEvtPerMu_per_lumi = 0;
    /// track state on surface
-   m_tsos_hitmap = 0;
-   m_tsos_holemap = 0;
-   m_tsos_outliermap = 0;
-   //m_tsos_measratio = 0;
-   //m_tsos_holeratio = 0;
-   m_misshits_ratio = 0;
-   m_tsos_holeratio_tmp = 0;
-   m_tsos_holeratio_mon = 0;
-   m_misshits_ratio_tmp = 0;
-   m_misshits_ratio_mon = 0;
    /// hit efficiency
    memset(m_hiteff_incl_mod, 0, sizeof(m_hiteff_incl_mod));
    /// Lorentz Angle
@@ -283,7 +265,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_clustot_highpt = 0;
    m_1hitclustot_highpt = 0;
    m_2hitclustot_highpt = 0;
-   m_tsos_hiteff_vs_lumi = 0;
    ///
    /// Cluster histograms
    /// 
@@ -309,39 +290,26 @@ PixelMainMon::PixelMainMon(const std::string & type,
    memset(m_2cluster_Q_mod, 0, sizeof(m_2cluster_Q_mod));
    memset(m_3cluster_Q_mod, 0, sizeof(m_3cluster_Q_mod));
    memset(m_bigcluster_Q_mod, 0, sizeof(m_bigcluster_Q_mod));
-   m_clussize_map = 0;
-   m_cluscharge_map = 0;
-   m_clusToT_map = 0;
    m_cluster_groupsize = 0;
    m_cluster_col_width = 0;
    m_cluster_row_width = 0;
    memset(m_cluster_col_width_mod, 0, sizeof(m_cluster_col_width_mod));
    memset(m_cluster_row_width_mod, 0, sizeof(m_cluster_row_width_mod));
    memset(m_cluster_groupsize_mod, 0, sizeof(m_cluster_groupsize_mod));
-   m_cluster_LVL1A = 0;
    memset(m_cluster_LVL1A1d_mod, 0, sizeof(m_cluster_LVL1A1d_mod));
    m_clusterSize_eta = 0;
    memset(m_clusToT_vs_eta_mod, 0, sizeof(m_clusToT_vs_eta_mod));
    memset(m_ToT_vs_clussize_mod, 0, sizeof(m_ToT_vs_clussize_mod));
    memset(m_clussize_vs_eta_mod, 0, sizeof(m_clussize_vs_eta_mod));
-   m_clustermap_mon = 0;
-   m_clustermap_tmp = 0;
-   m_cluster_occupancy = 0;
    m_cluster_occupancy_FE_B0_mon = 0;
    m_cluster_occupancy_time1 = 0;
    m_cluster_occupancy_time2 = 0;
    m_cluster_occupancy_time3 = 0;
-   m_clusocc_sizenot1 = 0; 
-   m_cluseff_mod = 0;
-   m_cluster_ToT_mod = 0;
-   m_cluster_size_mod = 0;
-   m_cluster_num_mod = 0;
    m_num_clusters = 0;
    memset(m_clusters_per_track_per_lumi_mod, 0, sizeof(m_clusters_per_track_per_lumi_mod));
    memset(m_num_clusters_mod, 0, sizeof(m_num_clusters_mod));
    memset(m_cluster_occupancy_summary_mod, 0, sizeof(m_cluster_occupancy_summary_mod));
    m_cluster_LVL1A_mod = 0;
-   m_clus_LVL1A_sizenot1 = 0; 
    m_clustersOnOffTrack_per_lumi = 0;
    /// Quick status
    m_clusters_onTrack_L0_B11_S2_C6 = 0;
@@ -349,11 +317,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    ///
    /// Status
    ///
-   m_Status_modules = 0;
-   m_status = 0;
-   m_status_mon = 0;
-   m_status_LB = 0;           
-   m_dqStatus = 0;
    m_disabledModules_per_lumi_PIX = 0;
    memset(m_badModules_per_lumi_mod, 0, sizeof(m_badModules_per_lumi_mod));
    memset(m_disabledModules_per_lumi_mod, 0, sizeof(m_disabledModules_per_lumi_mod));
@@ -369,10 +332,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_error_time1 = 0;       
    m_error_time2 = 0;       
    m_error_time3 = 0;       
-   m_errors = 0;
-   memset(m_errhist_errtype_map, 0, sizeof(m_errhist_errtype_map));
-   memset(m_errhist_errcat_map, 0, sizeof(m_errhist_errcat_map));
-   memset(m_errhist_expert_maps, 0, sizeof(m_errhist_expert_maps));
    memset(m_errhist_expert_LB, 0, sizeof(m_errhist_expert_LB));
    memset(m_errhist_per_bit_LB, 0, sizeof(m_errhist_per_bit_LB));
    memset(m_errhist_per_type_LB, 0, sizeof(m_errhist_per_type_LB));
@@ -380,10 +339,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    m_errhist_expert_servrec_ibl_unweighted = 0;
    m_errhist_expert_servrec_ibl_weighted = 0;
    m_errhist_expert_servrec_ibl_count = 0;
-   memset(m_errhist_expert_LB_maps, 0, sizeof(m_errhist_expert_LB_maps));
-   m_errors_LB = 0;           
-   m_errors_RODSync_mod = 0;
-   m_errors_ModSync_mod = 0;
    ///
    /// Space Point
    ///
@@ -399,10 +354,6 @@ PixelMainMon::PixelMainMon(const std::string & type,
    ///
    /// Per 20 LB
    ///
-   m_cluster_occupancy_LB = 0;
-   m_cluster_ToT_mod_LB = 0;
-   m_cluster_num_mod_LB = 0;
-   m_hit_num_mod_LB = 0;
    m_num_hits_LB = 0;
    memset(m_hit_ToT_LB_mod, 0, sizeof(m_hit_ToT_LB_mod));
    m_cluster_ToT_LB = 0;      
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiMaps.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiMaps.cxx
index ae9aabbc4c111e1ae2aad7e4d297df325b42c854..d6532d8390d8e9b943e0d491aac5fac89cd45d77 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiMaps.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiMaps.cxx
@@ -8,113 +8,94 @@
 
 #include "PixelMonitoring/PixelMon2DLumiMaps.h"
 #include "PixelMonitoring/Components.h"
+#include "PixelMonitoring/HolderTemplate.h"
 #include "InDetIdentifier/PixelID.h"
 #include "LWHists/TH2F_LW.h"
 #include "GaudiKernel/StatusCode.h"     
 #include <string.h>
 
 PixelMon2DLumiMaps::PixelMon2DLumiMaps(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config)
-    : IBLlbm(nullptr),
-      B0lbm(nullptr),
-      B1lbm(nullptr),
-      B2lbm(nullptr),
-      Albm(nullptr),
-      Clbm(nullptr),
-      DBMAlbm(nullptr),
-      DBMClbm(nullptr),
-      m_config(config)
-{
+      : HolderTemplate<TH2F_LW>(config) {
    const int lbRange = 3000;
    int num_modules;
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL)) {
       num_modules = PixMon::kNumStavesIBL * (PixMon::kNumModulesIBL2D + PixMon::kNumModulesIBL3D);
-      IBLlbm = TH2F_LW::create((name+"_2D_Map_IBL").c_str(),(title + ", IBL " + " (Map);LB;Module;" + zlabel).c_str(),
-                               lbRange, -0.5, -0.5 + lbRange,
-                               num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(0).reset(TH2F_LW::create((name+"_2D_Map_IBL").c_str(),(title + ", IBL " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB0)) {
       num_modules = PixMon::kNumStavesL0 * PixMon::kNumModulesBarrel;
-      B0lbm = TH2F_LW::create((name+"_2D_Map_B0").c_str(), (title + ", B0 " + " (Map);LB;Module;" + zlabel).c_str(),
-                              lbRange, -0.5, -0.5 + lbRange,
-                              num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(3).reset(TH2F_LW::create((name+"_2D_Map_B0").c_str(), (title + ", B0 " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB1)) {
       num_modules = PixMon::kNumStavesL1 * PixMon::kNumModulesBarrel;
-      B1lbm = TH2F_LW::create((name+"_2D_Map_B1").c_str(), (title + ", B1 " + " (Map);LB;Module;" + zlabel).c_str(),
-                              lbRange, -0.5, -0.5 + lbRange,
-                              num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(4).reset(TH2F_LW::create((name+"_2D_Map_B1").c_str(), (title + ", B1 " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB2)) {
       num_modules = PixMon::kNumStavesL2 * PixMon::kNumModulesBarrel;
-      B2lbm = TH2F_LW::create((name+"_2D_Map_B2").c_str(), (title + ", B2 " + " (Map);LB;Module;" + zlabel).c_str(),
-                              lbRange, -0.5, -0.5 + lbRange,
-                              num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(5).reset(TH2F_LW::create((name+"_2D_Map_B2").c_str(), (title + ", B2 " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECA)) {
       num_modules = PixMon::kNumLayersDisk * PixMon::kNumModulesDisk;
-      Albm = TH2F_LW::create((name+"_2D_Map_ECA" ).c_str(),(title + ", ECA " + " (Map);LB;Module;" + zlabel).c_str(),
-                             lbRange, -0.5, -0.5 + lbRange,
-                             num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(6).reset(TH2F_LW::create((name+"_2D_Map_ECA" ).c_str(),(title + ", ECA " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECC)) {
       num_modules = PixMon::kNumLayersDisk * PixMon::kNumModulesDisk;
-      Clbm = TH2F_LW::create((name+"_2D_Map_ECC" ).c_str(),(title + ", ECC " + " (Map);LB;Module;" + zlabel).c_str(),
-                             lbRange, -0.5, -0.5 + lbRange,
-                             num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(7).reset(TH2F_LW::create((name+"_2D_Map_ECC" ).c_str(),(title + ", ECC " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMA)) {
       num_modules = PixMon::kNumLayersDBM * PixMon::kNumModulesDBM;
-      DBMAlbm = TH2F_LW::create((name+"_2D_Map_DBMA").c_str(),(title + ", DBMA " + " (Map);LB;Module;" + zlabel).c_str(),
-                                lbRange, -0.5, -0.5 + lbRange,
-                                num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(8).reset(TH2F_LW::create((name+"_2D_Map_DBMA").c_str(),(title + ", DBMA " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMC)) {
       num_modules = PixMon::kNumLayersDBM * PixMon::kNumModulesDBM;
-      DBMClbm = TH2F_LW::create((name+"_2D_Map_DBMC").c_str(),(title + ", DBMC " + " (Map);LB;Module;" + zlabel).c_str(),
-                                lbRange, -0.5, -0.5 + lbRange,
-                                num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(9).reset(TH2F_LW::create((name+"_2D_Map_DBMC").c_str(),(title + ", DBMC " + " (Map);LB;Module;" + zlabel).c_str(),
+                                               lbRange, -0.5, -0.5 + lbRange,
+                                               num_modules, -0.5, -0.5 + num_modules));
    }
 
-   // We do not have support for IBL2D/3D in this class, but the histogram
-   // array should look the same for all classes. Therefore, we fill the
-   // blanks for IBL2D/3d with null pointers.
-   m_histograms = {IBLlbm, nullptr, nullptr, B0lbm, B1lbm, B2lbm, Albm, Clbm, DBMAlbm, DBMClbm};
-
+   setHistogramPointers();
    formatHist();
 }
 
-PixelMon2DLumiMaps::~PixelMon2DLumiMaps()
-{
-   for (auto& hist : m_histograms) {
-      if (hist) LWHist::safeDelete(hist);
-   }
-}
-
-void PixelMon2DLumiMaps::Fill(double LB,Identifier &id, const PixelID* pixID,double weight)
+void PixelMon2DLumiMaps::Fill(double LB,Identifier &id, const PixelID* pixID, float weight)
 {
    const int bec = pixID->barrel_ec(id);
    const int pm  = pixID->phi_module(id);
    int ld = pixID->layer_disk(id);
 
-   if (bec == 2 && Albm) {
-      Albm->Fill(LB, ld * 48 + pm, weight);
-   } else if (bec == -2 && Clbm) {
-      Clbm->Fill(LB, ld * 48 + pm, weight);
-   } else if (bec == 4 && DBMAlbm) {
-      DBMAlbm->Fill(LB, ld * 4 + pm, weight);
-   } else if (bec == -4 && DBMClbm) {
-      DBMClbm->Fill(LB, ld * 4 + pm, weight);
+   if (bec == 2 && A) {
+      A->Fill(LB, ld * 48 + pm, weight);
+   } else if (bec == -2 && C) {
+      C->Fill(LB, ld * 48 + pm, weight);
+   } else if (bec == 4 && DBMA) {
+      DBMA->Fill(LB, ld * 4 + pm, weight);
+   } else if (bec == -4 && DBMC) {
+      DBMC->Fill(LB, ld * 4 + pm, weight);
    } else if (bec == 0) {
       if (m_doIBL) ld--;
       const int em  = pixID->eta_module(id) + 6;
-      if (ld == 0 && B0lbm) {
-         B0lbm->Fill(LB, em + 13 * pm, weight);
-      }else if (ld == 1 && B1lbm) {
-         B1lbm->Fill(LB, em + 13 * pm, weight);
-      } else if (ld == 2 && B2lbm) {
-         B2lbm->Fill(LB, em + 13 * pm, weight);
-      } else if (ld == -1 && IBLlbm) {
-         IBLlbm->Fill(LB, em + 4 + 20 * pm, weight);
+      if (ld == 0 && B0) {
+         B0->Fill(LB, em + 13 * pm, weight);
+      }else if (ld == 1 && B1) {
+         B1->Fill(LB, em + 13 * pm, weight);
+      } else if (ld == 2 && B2) {
+         B2->Fill(LB, em + 13 * pm, weight);
+      } else if (ld == -1 && IBL) {
+         IBL->Fill(LB, em + 4 + 20 * pm, weight);
       }
    }
 }
@@ -123,35 +104,35 @@ void PixelMon2DLumiMaps::formatHist()
 {
    std::string label;
    unsigned int count = 1;
-   if (Albm && Clbm) {
+   if (A && C) {
       for (unsigned int j = 0; j < PixMon::kNumLayersDisk; ++j) {
          for (unsigned int i = 0; i < PixMon::kNumModulesDisk; ++i) {
             label = PixMon::LayersDisk.at(j) + "A_" + PixMon::ModulesECA.at(i);
-            Albm->GetYaxis()->SetBinLabel(count, label.c_str());
+            A->GetYaxis()->SetBinLabel(count, label.c_str());
             label = PixMon::LayersDisk.at(j) + "C_" + PixMon::ModulesECC.at(i);
-            Clbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            C->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
-   if (DBMAlbm && DBMClbm) {
+   if (DBMA && DBMC) {
       for (unsigned int j = 0; j < PixMon::kNumLayersDBM; ++j) {
          for (unsigned int i = 0; i < PixMon::kNumModulesDBM; ++i) {
             label = PixMon::LayersDBM.at(j) + "A_" + PixMon::ModulesDBM.at(i);
-            DBMAlbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            DBMA->GetYaxis()->SetBinLabel(count, label.c_str());
             label = PixMon::LayersDBM.at(j) + "C_" + PixMon::ModulesDBM.at(i);
-            DBMClbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            DBMC->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
-   if (B0lbm && B1lbm && B2lbm) {
+   if (B0 && B1 && B2) {
       for (unsigned int i = 0; i < PixMon::kNumStavesL0; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L0_" + PixMon::StavesL0.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B0lbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            B0->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
@@ -159,7 +140,7 @@ void PixelMon2DLumiMaps::formatHist()
       for (unsigned int i = 0; i < PixMon::kNumStavesL1; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L1_" + PixMon::StavesL1.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B1lbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            B1->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
@@ -167,18 +148,18 @@ void PixelMon2DLumiMaps::formatHist()
       for (unsigned int i = 0; i < PixMon::kNumStavesL2; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L2_" + PixMon::StavesL2.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B2lbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            B2->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
 
-   if (IBLlbm) {
+   if (IBL) {
       for (unsigned int i = 0; i < PixMon::kNumStavesIBL; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesIBL; ++j) {
             label = "IBL_" + PixMon::StavesIBL.at(i) + "_" + PixMon::ModulesIBL.at(j);
-            IBLlbm->GetYaxis()->SetBinLabel(count, label.c_str());
+            IBL->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
@@ -191,19 +172,3 @@ void PixelMon2DLumiMaps::formatHist()
       hist->SetMinimum(0.);
    }
 }
-
-StatusCode PixelMon2DLumiMaps::regHist(ManagedMonitorToolBase::MonGroup &group)
-{
-   StatusCode sc = StatusCode::SUCCESS;
-
-   for (auto& hist : m_histograms) {
-      if (!hist) continue;
-      if (group.regHist(hist).isFailure()) {
-         sc = StatusCode::FAILURE;
-      }
-   }
-
-   return sc;
-}
-
-const bool PixelMon2DLumiMaps::m_doIBL{true};
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiProfiles.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiProfiles.cxx
index 3e64dcf54f05117be6a32519c024ef4f0c3d7a30..dd36db2dedd001e72794495052dd9101629507d8 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiProfiles.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DLumiProfiles.cxx
@@ -13,108 +13,87 @@
 #include "GaudiKernel/StatusCode.h"     
 #include <string.h>
 
-PixelMon2DLumiProfiles::PixelMon2DLumiProfiles(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config)
-    : IBLlbp(nullptr),
-      B0lbp(nullptr),
-      B1lbp(nullptr),
-      B2lbp(nullptr),
-      Albp(nullptr),
-      Clbp(nullptr),
-      DBMAlbp(nullptr),
-      DBMClbp(nullptr),
-      m_config(config)
-{
+PixelMon2DLumiProfiles::PixelMon2DLumiProfiles(std::string name, std::string title, std::string zlabel, const PixMon::HistConf& config) : HolderTemplate<TProfile2D_LW>(config) {
    const int lbRange = 3000;
    int num_modules;
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL)) {
       num_modules = PixMon::kNumStavesIBL * (PixMon::kNumModulesIBL2D + PixMon::kNumModulesIBL3D);
-      IBLlbp= TProfile2D_LW::create((name+"_2D_Profile_IBL").c_str(), (title + ", IBL " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                    lbRange, -0.5, -0.5 + lbRange,
-                                    num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(0).reset(TProfile2D_LW::create((name+"_2D_Profile_IBL").c_str(), (title + ", IBL " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB0)) {
       num_modules = PixMon::kNumStavesL0 * PixMon::kNumModulesBarrel;
-      B0lbp = TProfile2D_LW::create((name+"_2D_Profile_B0").c_str(),  (title + ", B0 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                    lbRange, -0.5, -0.5 + lbRange,
-                                    num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(3).reset(TProfile2D_LW::create((name+"_2D_Profile_B0").c_str(),  (title + ", B0 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB1)) {
       num_modules = PixMon::kNumStavesL1 * PixMon::kNumModulesBarrel;
-      B1lbp = TProfile2D_LW::create((name+"_2D_Profile_B1").c_str(),  (title + ", B1 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                    lbRange, -0.5, -0.5 + lbRange,
-                                    num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(4).reset(TProfile2D_LW::create((name+"_2D_Profile_B1").c_str(),  (title + ", B1 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB2)) {
       num_modules = PixMon::kNumStavesL2 * PixMon::kNumModulesBarrel;;
-      B2lbp = TProfile2D_LW::create((name+"_2D_Profile_B2").c_str(),  (title + ", B2 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                    lbRange, -0.5, -0.5 + lbRange,
-                                    num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(5).reset(TProfile2D_LW::create((name+"_2D_Profile_B2").c_str(),  (title + ", B2 " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECA)) {
       num_modules = PixMon::kNumLayersDisk * PixMon::kNumModulesDisk;
-      Albp = TProfile2D_LW::create((name+"_2D_Profile_ECA" ).c_str(),(title + ", ECA " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                   lbRange, -0.5, -0.5 + lbRange,
-                                   num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(6).reset(TProfile2D_LW::create((name+"_2D_Profile_ECA" ).c_str(),(title + ", ECA " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECC)) {
       num_modules = PixMon::kNumLayersDisk * PixMon::kNumModulesDisk;
-      Clbp = TProfile2D_LW::create((name+"_2D_Profile_ECC" ).c_str(),(title + ", ECC " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                   lbRange, -0.5, -0.5 + lbRange,
-                                   num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(7).reset(TProfile2D_LW::create((name+"_2D_Profile_ECC" ).c_str(),(title + ", ECC " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMA)) {
       num_modules = PixMon::kNumLayersDBM * PixMon::kNumModulesDBM;
-      DBMAlbp = TProfile2D_LW::create((name+"_2D_Profile_DBMA" ).c_str(),(title + ", DBMA " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                      lbRange, -0.5, -0.5 + lbRange,
-                                      num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(8).reset(TProfile2D_LW::create((name+"_2D_Profile_DBMA" ).c_str(),(title + ", DBMA " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMC)) {
       num_modules = PixMon::kNumLayersDBM * PixMon::kNumModulesDBM;
-      DBMClbp = TProfile2D_LW::create((name+"_2D_Profile_DBMC" ).c_str(),(title + ", DBMC " + title + " (Profile);LB;Module;" + zlabel).c_str(),
-                                      lbRange, -0.5, -0.5 + lbRange,
-                                      num_modules, -0.5, -0.5 + num_modules);
+      m_histograms.at(9).reset(TProfile2D_LW::create((name+"_2D_Profile_DBMC" ).c_str(),(title + ", DBMC " + title + " (Profile);LB;Module;" + zlabel).c_str(),
+                                                     lbRange, -0.5, -0.5 + lbRange,
+                                                     num_modules, -0.5, -0.5 + num_modules));
    }
 
-   // We do not have support for IBL2D/3D in this class, but the histogram
-   // array should look the same for all classes. Therefore, we fill the
-   // blanks for IBL2D/3d with null pointers.
-   m_histograms = {IBLlbp, nullptr, nullptr, B0lbp, B1lbp, B2lbp, Albp, Clbp, DBMAlbp, DBMClbp};
-
+   setHistogramPointers();
    formatHist();
 }
 
-PixelMon2DLumiProfiles::~PixelMon2DLumiProfiles()
-{
-   for (auto& hist : m_histograms) {
-      if (hist) LWHist::safeDelete(hist);
-   }
-}
-
 void PixelMon2DLumiProfiles::Fill(double LB,Identifier &id, const PixelID* pixID, double weight)
 {
    const int bec = pixID->barrel_ec(id);
    const int pm  = pixID->phi_module(id);
    int ld = pixID->layer_disk(id);
 
-   if (bec == 2 && Albp) {
-      Albp->Fill(LB, ld * 48 + pm, weight);
-   } else if (bec == -2 && Clbp) {
-      Clbp->Fill(LB, ld * 48 + pm, weight);
-   } else if (bec == 4 && DBMAlbp) {
-      DBMAlbp->Fill(LB, ld * 4 + pm, weight);
-   } else if (bec == -4 && DBMClbp) {
-      DBMClbp->Fill(LB, ld * 4 + pm, weight);
+   if (bec == 2 && A) {
+      A->Fill(LB, ld * 48 + pm, weight);
+   } else if (bec == -2 && C) {
+      C->Fill(LB, ld * 48 + pm, weight);
+   } else if (bec == 4 && DBMA) {
+      DBMA->Fill(LB, ld * 4 + pm, weight);
+   } else if (bec == -4 && DBMC) {
+      DBMC->Fill(LB, ld * 4 + pm, weight);
    } else if (bec == 0) {
       if (m_doIBL) ld--;
       const int em = pixID->eta_module(id) + 6;
-      if (ld == 0 && B0lbp) {
-         B0lbp->Fill(LB, em + 13 * pm, weight);
-      } else if (ld == 1 && B1lbp) {
-         B1lbp->Fill(LB, em + 13 * pm, weight);
-      } else if (ld == 2 && B2lbp) {
-         B2lbp->Fill(LB, em + 13 * pm, weight);
-      } else if (ld == -1 && IBLlbp) {
-         IBLlbp->Fill(LB, em + 4 + 20 * pm, weight);
+      if (ld == 0 && B0) {
+         B0->Fill(LB, em + 13 * pm, weight);
+      } else if (ld == 1 && B1) {
+         B1->Fill(LB, em + 13 * pm, weight);
+      } else if (ld == 2 && B2) {
+         B2->Fill(LB, em + 13 * pm, weight);
+      } else if (ld == -1 && IBL) {
+         IBL->Fill(LB, em + 4 + 20 * pm, weight);
       }
    }
 }
@@ -124,35 +103,35 @@ void PixelMon2DLumiProfiles::formatHist()
 {
    std::string label;
    unsigned int count = 1;
-   if (Albp && Clbp) {
+   if (A && C) {
       for (unsigned int j = 0; j < PixMon::kNumLayersDisk; ++j) {
          for (unsigned int i = 0; i < PixMon::kNumModulesDisk; ++i) {
             label = PixMon::LayersDisk.at(j) + "A_" + PixMon::ModulesECA.at(i);
-            Albp->GetYaxis()->SetBinLabel(count, label.c_str());
+            A->GetYaxis()->SetBinLabel(count, label.c_str());
             label = PixMon::LayersDisk.at(j) + "C_" + PixMon::ModulesECC.at(i);
-            Clbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            C->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
-   if (DBMAlbp && DBMClbp) {
+   if (DBMA && DBMC) {
       for (unsigned int j = 0; j < PixMon::kNumLayersDBM; ++j) {
          for (unsigned int i = 0; i < PixMon::kNumModulesDBM; ++i) {
             label = PixMon::LayersDBM.at(j) + "A_" + PixMon::ModulesDBM.at(i);
-            DBMAlbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            DBMA->GetYaxis()->SetBinLabel(count, label.c_str());
             label = PixMon::LayersDBM.at(j) + "C_" + PixMon::ModulesDBM.at(i);
-            DBMClbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            DBMC->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
-   if (B0lbp && B1lbp && B2lbp) {
+   if (B0 && B1 && B2) {
       for (unsigned int i = 0; i < PixMon::kNumStavesL0; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L0_" + PixMon::StavesL0.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B0lbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            B0->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
@@ -160,7 +139,7 @@ void PixelMon2DLumiProfiles::formatHist()
       for (unsigned int i = 0; i < PixMon::kNumStavesL1; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L1_" + PixMon::StavesL1.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B1lbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            B1->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
@@ -168,17 +147,17 @@ void PixelMon2DLumiProfiles::formatHist()
       for (unsigned int i = 0; i < PixMon::kNumStavesL2; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesBarrel; ++j) {
             label = "L2_" + PixMon::StavesL2.at(i) + "_" + PixMon::ModulesBarrel.at(j);
-            B2lbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            B2->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
          }
       }
       count = 1;
    }
-   if (IBLlbp) {
+   if (IBL) {
       for (unsigned int i = 0; i < PixMon::kNumStavesIBL; ++i) {
          for (unsigned int j = 0; j < PixMon::kNumModulesIBL; ++j) {
             label = "IBL_" + PixMon::StavesIBL.at(i) + "_" + PixMon::ModulesIBL.at(j);
-            IBLlbp->GetYaxis()->SetBinLabel(count, label.c_str());
+            IBL->GetYaxis()->SetBinLabel(count, label.c_str());
             count++;
 	 }
       }
@@ -186,7 +165,7 @@ void PixelMon2DLumiProfiles::formatHist()
 
    for (auto& hist : m_histograms) {
       if (!hist) continue;
-      if (hist == Albp || hist == Clbp) {
+      if (hist.get() == A || hist.get() == C) {
          hist->GetYaxis()->SetLabelSize(0.02);
       } else {
          hist->GetYaxis()->SetLabelSize(0.03);
@@ -194,19 +173,3 @@ void PixelMon2DLumiProfiles::formatHist()
       hist->SetOption("colz");
    }
 }
-
-StatusCode PixelMon2DLumiProfiles::regHist(ManagedMonitorToolBase::MonGroup &group)
-{
-   StatusCode sc = StatusCode::SUCCESS;
-
-   for (auto& hist : m_histograms) {
-      if (!hist) continue;
-      if (group.regHist(hist).isFailure()) {
-         sc = StatusCode::FAILURE;
-      }
-   }
-
-   return sc;
-}
-
-const bool PixelMon2DLumiProfiles::m_doIBL{true};
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
index 4ddabf175e1cbb804c8eb75a7d7eda4e5a6d4b65..2d1894fa963f762ed8d0ce2c18574828a4b9fdf9 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DMapsLW.cxx
@@ -13,20 +13,7 @@
 #include "GaudiKernel/StatusCode.h"     
 #include <string.h>
 
-PixelMon2DMapsLW::PixelMon2DMapsLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval)
-    : IBL(nullptr),
-      IBL2D(nullptr),
-      IBL3D(nullptr),
-      B0(nullptr),
-      B1(nullptr),
-      B2(nullptr),
-      A(nullptr),
-      C(nullptr),
-      DBMA(nullptr),
-      DBMC(nullptr),
-      m_config(config),
-      m_copy2DFEval(copy2DFEval)
-{
+PixelMon2DMapsLW::PixelMon2DMapsLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval) : HolderTemplate<TH2F_LW>(config, copy2DFEval) {
    std::string setatext = ";shifted eta index of module";
    std::string etatext = ";eta index of module";
    std::string phitext = ";phi index of module";
@@ -34,110 +21,61 @@ PixelMon2DMapsLW::PixelMon2DMapsLW(std::string name, std::string title, const Pi
    std::string layertext = ";layer number";
 
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL)) {
-      IBL = TH2F_LW::create((name+"_IBL").c_str(), (title + ", IBL " + setatext + phitext).c_str(),
-                            PixMon::kNumModulesIBL, -16.5, -16.5 + PixMon::kNumModulesIBL,
-                            PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+      m_histograms.at(0).reset(TH2F_LW::create((name+"_IBL").c_str(), (title + ", IBL " + setatext + phitext).c_str(),
+                                               PixMon::kNumModulesIBL, -16.5, -16.5 + PixMon::kNumModulesIBL,
+                                               PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL2D)) {
-      IBL2D = TH2F_LW::create((name+"_IBL2D").c_str(), (title + ", IBL planar modules " + setatext + phitext).c_str(),
-                              PixMon::kNumModulesIBL2D, -6.5, -6.5 + PixMon::kNumModulesIBL2D,
-                              PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+      m_histograms.at(1).reset(TH2F_LW::create((name+"_IBL2D").c_str(), (title + ", IBL planar modules " + setatext + phitext).c_str(),
+                                               PixMon::kNumModulesIBL2D, -6.5, -6.5 + PixMon::kNumModulesIBL2D,
+                                               PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL3D)) {
-      IBL3D = TH2F_LW::create((name+"_IBL3D").c_str(), (title + ", IBL 3D modules " + etatext + phitext).c_str(),
-                              PixMon::kNumModulesIBL3D, -0.5, -0.5 + PixMon::kNumModulesIBL3D,
-                              PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+      m_histograms.at(2).reset(TH2F_LW::create((name+"_IBL3D").c_str(), (title + ", IBL 3D modules " + etatext + phitext).c_str(),
+                                               PixMon::kNumModulesIBL3D, -0.5, -0.5 + PixMon::kNumModulesIBL3D,
+                                               PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB0)) {
-     B0 = TH2F_LW::create((name+"_B0").c_str(), (title + ", B0 " + etatext + phitext).c_str(),
-                          PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                          PixMon::kNumStavesL0, -0.5, -0.5 + PixMon::kNumStavesL0);
+      m_histograms.at(3).reset(TH2F_LW::create((name+"_B0").c_str(), (title + ", B0 " + etatext + phitext).c_str(),
+                                               PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                               PixMon::kNumStavesL0, -0.5, -0.5 + PixMon::kNumStavesL0));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB1)) {
-     B1 = TH2F_LW::create((name+"_B1").c_str(), (title + ", B1 " + etatext + phitext).c_str(),
-                          PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                          PixMon::kNumStavesL1, -0.5, -0.5 + PixMon::kNumStavesL1);
+      m_histograms.at(4).reset(TH2F_LW::create((name+"_B1").c_str(), (title + ", B1 " + etatext + phitext).c_str(),
+                                               PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                               PixMon::kNumStavesL1, -0.5, -0.5 + PixMon::kNumStavesL1));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB2)) {
-     B2 = TH2F_LW::create((name+"_B2").c_str(), (title + ", B2 " + etatext + phitext).c_str(),
-                          PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                          PixMon::kNumStavesL2, -0.5, -0.5 + PixMon::kNumStavesL2);
+      m_histograms.at(5).reset(TH2F_LW::create((name+"_B2").c_str(), (title + ", B2 " + etatext + phitext).c_str(),
+                                               PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                               PixMon::kNumStavesL2, -0.5, -0.5 + PixMon::kNumStavesL2));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECA)) {
-     A  = TH2F_LW::create((name+"_ECA" ).c_str(), (title + ", ECA " + disktext + phitext).c_str(),
-                          PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
-                          PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk);
+      m_histograms.at(6).reset(TH2F_LW::create((name+"_ECA" ).c_str(), (title + ", ECA " + disktext + phitext).c_str(),
+                                               PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
+                                               PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECC)) {
-     C  = TH2F_LW::create((name+"_ECC" ).c_str(), (title + ", ECC " + disktext + phitext).c_str(),
-                          PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
-                          PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk);
+      m_histograms.at(7).reset(TH2F_LW::create((name+"_ECC" ).c_str(), (title + ", ECC " + disktext + phitext).c_str(),
+                                               PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
+                                               PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMA)) {
-     DBMA = TH2F_LW::create((name+"_DBMA" ).c_str(), (title + ", DBMA " + layertext + phitext).c_str(),
-                            PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
-                            PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM);
+      m_histograms.at(8).reset(TH2F_LW::create((name+"_DBMA" ).c_str(), (title + ", DBMA " + layertext + phitext).c_str(),
+                                               PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
+                                               PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMC)) {
-     DBMC = TH2F_LW::create((name+"_DBMC" ).c_str(), (title + ", DBMC " + layertext + phitext).c_str(),
-                            PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
-                            PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM);
+      m_histograms.at(9).reset(TH2F_LW::create((name+"_DBMC" ).c_str(), (title + ", DBMC " + layertext + phitext).c_str(),
+                                               PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
+                                               PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM));
    }
 
-   m_histograms = {IBL, IBL2D, IBL3D, B0, B1, B2, A, C, DBMA, DBMC};
-
+   setHistogramPointers();
    formatHist();
 }
 
-PixelMon2DMapsLW::~PixelMon2DMapsLW()
-{
-   for (auto& hist : m_histograms) {
-      if (hist) LWHist::safeDelete(hist);
-   }
-}
-
-void PixelMon2DMapsLW::Fill(Identifier &id, const PixelID* pixID)
-{
-   const int bec = pixID->barrel_ec(id);
-   const int pm  = pixID->phi_module(id);
-   int ld = pixID->layer_disk(id);
-
-   if (bec == 2 && A) A->Fill(ld, pm);
-   else if (bec == -2 && C) C->Fill(ld, pm);
-   else if (bec == 4 && DBMA) DBMA->Fill(ld, pm);
-   else if (bec == -4 && DBMC) DBMC->Fill(ld, pm);
-   else if (bec == 0) {
-      if (m_doIBL) ld--;
-      const int em = pixID->eta_module(id);
-      if (ld == 0 && B0) {
-         B0->Fill(em, pm);
-      } else if (ld == 1 && B1) {
-         B1->Fill(em,pm);
-      } else if (ld == 2 && B2) {
-         B2->Fill(em,pm);
-      } else if (ld == -1 && IBL) {
-         int feid = 0;
-         int emf = 0;
-         bool copy = false;
-         if (em < 6 && em > -7) {
-            if (pixID->eta_index(id) >= 80) feid = 1;
-            emf = 2 * em + feid; 
-            if (IBL2D) IBL2D->Fill(em, pm);
-            copy = true;
-         } else if (em < -6) {
-            emf = em - 6;
-            if (IBL3D) IBL3D->Fill(em + 10, pm);
-         } else {
-            emf = em + 6;
-            if (IBL3D) IBL3D->Fill(em - 2, pm);
-         }
-         IBL->Fill(emf, pm);
-         if (m_copy2DFEval && copy) IBL->Fill(emf + 1, pm);
-      }
-   }
-}
-
-void PixelMon2DMapsLW::WeightingFill(Identifier &id, const PixelID* pixID, float weight)
+void PixelMon2DMapsLW::Fill(Identifier &id, const PixelID* pixID, float weight)
 {
    const int bec = pixID->barrel_ec(id);
    const int pm  = pixID->phi_module(id);
@@ -149,7 +87,7 @@ void PixelMon2DMapsLW::WeightingFill(Identifier &id, const PixelID* pixID, float
    else if (bec == -4 && DBMC) DBMC->Fill(ld, pm, weight);
    else if (bec == 0) {
       if (m_doIBL) ld--;
-      const int em  = pixID->eta_module(id);
+      const int em = pixID->eta_module(id);
       if (ld == 0 && B0) {
          B0->Fill(em, pm, weight);
       } else if (ld == 1 && B1) {
@@ -159,10 +97,12 @@ void PixelMon2DMapsLW::WeightingFill(Identifier &id, const PixelID* pixID, float
       } else if (ld == -1 && IBL) {
          int feid = 0;
          int emf = 0;
+         bool copy = false;
          if (em < 6 && em > -7) {
             if (pixID->eta_index(id) >= 80) feid = 1;
             emf = 2 * em + feid; 
             if (IBL2D) IBL2D->Fill(em, pm, weight);
+            copy = true;
          } else if (em < -6) {
             emf = em - 6;
             if (IBL3D) IBL3D->Fill(em + 10, pm, weight);
@@ -171,9 +111,10 @@ void PixelMon2DMapsLW::WeightingFill(Identifier &id, const PixelID* pixID, float
             if (IBL3D) IBL3D->Fill(em - 2, pm, weight);
          }
          IBL->Fill(emf, pm, weight);
+         if (m_copy2DFEval && copy) IBL->Fill(emf + 1, pm, weight);
       }
    }
-}   
+}
 
 void PixelMon2DMapsLW::Fill2DMon(PixelMon2DMapsLW* oldmap)
 {
@@ -253,7 +194,7 @@ void PixelMon2DMapsLW::formatHist()
 
    for (auto& hist : m_histograms) {
       if (!hist) continue;
-      if (hist == A || hist == C) {
+      if (hist.get() == A || hist.get() == C) {
          hist->GetYaxis()->SetLabelSize(0.02);
       } else {
          hist->GetYaxis()->SetLabelSize(0.03);
@@ -262,19 +203,3 @@ void PixelMon2DMapsLW::formatHist()
       hist->SetMinimum(0.);
    }
 }
-
-StatusCode PixelMon2DMapsLW::regHist(ManagedMonitorToolBase::MonGroup &group)
-{
-   StatusCode sc = StatusCode::SUCCESS;
-
-   for (auto& hist : m_histograms) {
-      if (!hist) continue;
-      if (group.regHist(hist).isFailure()) {
-         sc = StatusCode::FAILURE;
-      }
-   }
-
-   return sc;
-}
-
-const bool PixelMon2DMapsLW::m_doIBL{true};
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DProfilesLW.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DProfilesLW.cxx
index d7b9628d5468aea6237b4eb312448cc55382bf01..f69f52ce03b92ee80c8d07326b332b0252d87f22 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DProfilesLW.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMon2DProfilesLW.cxx
@@ -6,98 +6,77 @@
 // Function to handle 2D profile histograms of modules, one for each region
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "PixelMonitoring/Components.h"
-#include "PixelMonitoring/PixelMon2DProfilesLW.h"
 #include "PixelMonitoring/PixelMon2DMapsLW.h"
+#include "PixelMonitoring/PixelMon2DProfilesLW.h"
+#include "PixelMonitoring/Components.h"
 #include "InDetIdentifier/PixelID.h"
 #include "LWHists/TH2F_LW.h"
 #include "LWHists/TProfile2D_LW.h"
 #include "GaudiKernel/StatusCode.h"     
 #include <string.h>
 
-PixelMon2DProfilesLW::PixelMon2DProfilesLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval)
-    : IBL3D(nullptr),
-      IBL2D(nullptr),
-      IBL(nullptr),
-      B0(nullptr),
-      B1(nullptr),
-      B2(nullptr),
-      A(nullptr),
-      C(nullptr),
-      DBMA(nullptr),
-      DBMC(nullptr),
-      m_config(config),
-      m_copy2DFEval(copy2DFEval)
-{
+PixelMon2DProfilesLW::PixelMon2DProfilesLW(std::string name, std::string title, const PixMon::HistConf& config, bool copy2DFEval) : HolderTemplate<TProfile2D_LW>(config, copy2DFEval) {
    std::string setatext = ";shifted eta index of module";
    std::string etatext = ";eta index of module";
    std::string phitext = ";phi index of module";
    std::string disktext = ";disk number";
    std::string layertext = ";layer number";
 
-   if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL3D)) {
-      IBL3D = TProfile2D_LW::create((name+"_IBL3D").c_str(), (title + ", IBL 3D modules " + etatext + phitext).c_str(),
-                                    PixMon::kNumModulesIBL3D, -.5, -.5 + PixMon::kNumModulesIBL3D,
-                                    PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+   if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL)) {
+      m_histograms.at(0).reset(TProfile2D_LW::create((name+"_IBL").c_str(), (title + ", IBL " + setatext + phitext).c_str(),
+                                                     PixMon::kNumModulesIBL, -16.5, -16.5 + PixMon::kNumModulesIBL,
+                                                     PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
    if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL2D) ){
-      IBL2D = TProfile2D_LW::create((name+"_IBL2D").c_str(), (title + ", IBL planar modules " + setatext + phitext).c_str(),
-                                    PixMon::kNumModulesIBL2D, -6.5, -6.5 + PixMon::kNumModulesIBL2D,
-                                    PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+      m_histograms.at(1).reset(TProfile2D_LW::create((name+"_IBL2D").c_str(), (title + ", IBL planar modules " + setatext + phitext).c_str(),
+                                                     PixMon::kNumModulesIBL2D, -6.5, -6.5 + PixMon::kNumModulesIBL2D,
+                                                     PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
-   if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL)) {
-      IBL = TProfile2D_LW::create((name+"_IBL").c_str(), (title + ", IBL " + setatext + phitext).c_str(),
-                                  PixMon::kNumModulesIBL, -16.5, -16.5 + PixMon::kNumModulesIBL,
-                                  PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL);
+   if (m_doIBL && PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kIBL3D)) {
+      m_histograms.at(2).reset(TProfile2D_LW::create((name+"_IBL3D").c_str(), (title + ", IBL 3D modules " + etatext + phitext).c_str(),
+                                                     PixMon::kNumModulesIBL3D, -.5, -.5 + PixMon::kNumModulesIBL3D,
+                                                     PixMon::kNumStavesIBL, -0.5, -0.5 + PixMon::kNumStavesIBL));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB0)) {
-      B0 = TProfile2D_LW::create((name+"_B0").c_str(), (title + ", B0 " + etatext + phitext).c_str(),
-                                 PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                                 PixMon::kNumStavesL0, -0.5, -0.5 + PixMon::kNumStavesL0);
+      m_histograms.at(3).reset(TProfile2D_LW::create((name+"_B0").c_str(), (title + ", B0 " + etatext + phitext).c_str(),
+                                                     PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                                     PixMon::kNumStavesL0, -0.5, -0.5 + PixMon::kNumStavesL0));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB1)) {
-      B1 = TProfile2D_LW::create((name+"_B1").c_str(), (title + ", B1 " + etatext + phitext).c_str(),
-                                 PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                                 PixMon::kNumStavesL1, -0.5, -0.5 + PixMon::kNumStavesL1);
+      m_histograms.at(4).reset(TProfile2D_LW::create((name+"_B1").c_str(), (title + ", B1 " + etatext + phitext).c_str(),
+                                                     PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                                     PixMon::kNumStavesL1, -0.5, -0.5 + PixMon::kNumStavesL1));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kB2)) {
-      B2 = TProfile2D_LW::create((name+"_B2").c_str(), (title + ", B2 " + etatext + phitext).c_str(),
-                                 PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
-                                 PixMon::kNumStavesL2, -0.5, -0.5 + PixMon::kNumStavesL2);
+      m_histograms.at(5).reset(TProfile2D_LW::create((name+"_B2").c_str(), (title + ", B2 " + etatext + phitext).c_str(),
+                                                     PixMon::kNumModulesBarrel, -6.5, -6.5 + PixMon::kNumModulesBarrel,
+                                                     PixMon::kNumStavesL2, -0.5, -0.5 + PixMon::kNumStavesL2));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECA)) {
-      A = TProfile2D_LW::create((name+"_ECA" ).c_str(), (title + ", ECA " + disktext + phitext).c_str(),
-                                PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
-                                PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk);
+      m_histograms.at(6).reset(TProfile2D_LW::create((name+"_ECA" ).c_str(), (title + ", ECA " + disktext + phitext).c_str(),
+                                                     PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
+                                                     PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kECC)) {
-      C = TProfile2D_LW::create((name+"_ECC" ).c_str(), (title + ", ECC " + disktext + phitext).c_str(),
-                                PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
-                                PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk);
+      m_histograms.at(7).reset(TProfile2D_LW::create((name+"_ECC" ).c_str(), (title + ", ECC " + disktext + phitext).c_str(),
+                                                     PixMon::kNumLayersDisk, -0.5, -0.5 + PixMon::kNumLayersDisk,
+                                                     PixMon::kNumModulesDisk, -0.5, -0.5 + PixMon::kNumModulesDisk));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMA)) {
-      DBMA = TProfile2D_LW::create((name+"_DBMA").c_str(), (title + ", DBMA " + layertext + phitext).c_str(),
-                                   PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
-                                   PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM);
+      m_histograms.at(8).reset(TProfile2D_LW::create((name+"_DBMA").c_str(), (title + ", DBMA " + layertext + phitext).c_str(),
+                                                     PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
+                                                     PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM));
    }
    if (PixMon::HasComponent(m_config, PixMon::LayerIBL2D3DDBM::kDBMC)) {
-      DBMC = TProfile2D_LW::create((name+"_DBMC").c_str(), (title + ", DBMC " + layertext + phitext).c_str(),
-                                   PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
-                                   PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM);
+      m_histograms.at(9).reset(TProfile2D_LW::create((name+"_DBMC").c_str(), (title + ", DBMC " + layertext + phitext).c_str(),
+                                                     PixMon::kNumLayersDBM, -0.5, -0.5 + PixMon::kNumLayersDBM,
+                                                     PixMon::kNumModulesDBM, -0.5, -0.5 + PixMon::kNumModulesDBM));
    }
 
-   m_histograms = {IBL, IBL2D, IBL3D, B0, B1, B2, A, C, DBMA, DBMC};
-
+   setHistogramPointers();
    formatHist();
 }
 
-PixelMon2DProfilesLW::~PixelMon2DProfilesLW()
-{
-   for (auto& hist : m_histograms) {
-      if (hist) LWHist::safeDelete(hist);
-   }
-}
-
 void PixelMon2DProfilesLW::SetMaxValue(float max)
 {
    for (auto& hist : m_histograms) {
@@ -214,7 +193,7 @@ void PixelMon2DProfilesLW::formatHist()
 
    for (auto& hist : m_histograms) {
       if (!hist) continue;
-      if (hist == A || hist == C) {
+      if (hist.get() == A || hist.get() == C) {
          hist->GetYaxis()->SetLabelSize(0.02);
       } else {
          hist->GetYaxis()->SetLabelSize(0.03);
@@ -254,9 +233,9 @@ void PixelMon2DProfilesLW::FillFromMap(PixelMon2DMapsLW* inputmap, bool clear_in
       for (unsigned int x = 1; x <= hist->GetNbinsX(); x++) {
          for (unsigned int y = 1; y <= hist->GetNbinsY(); y++) {
             auto content = map->GetBinContent(x, y);
-            if (hist == IBL || hist == IBL3D || hist == DBMA || hist == DBMC) {
+            if (hist.get() == IBL || hist.get() == IBL3D || hist.get() == DBMA || hist.get() == DBMC) {
                content *= weightIBL;
-            } else if (hist == IBL2D) {
+            } else if (hist.get() == IBL2D) {
                content *= weightIBL * 0.5;
             } else {
                content *= weightPixel;
@@ -267,19 +246,3 @@ void PixelMon2DProfilesLW::FillFromMap(PixelMon2DMapsLW* inputmap, bool clear_in
       if (clear_inputmap) map->Reset();
    }
 }
-
-StatusCode PixelMon2DProfilesLW::regHist(ManagedMonitorToolBase::MonGroup &group)
-{
-   StatusCode sc = StatusCode::SUCCESS;
-
-   for (auto& hist : m_histograms) {
-      if (!hist) continue;
-      if (group.regHist(hist).isFailure()) {
-         sc = StatusCode::FAILURE;
-      }
-   }
-  
-   return sc;
-}
-
-const bool PixelMon2DProfilesLW::m_doIBL{true};
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
index 606ee96b65fb722d7364201c04ba7b4e9c36344d..50db27390ba7138a04f389f51b9f7408a122bbe4 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/PixelMonModules.cxx
@@ -14,10 +14,6 @@
 #include "GaudiKernel/StatusCode.h"       
 #include <string.h>
 
-PixelMonModules::~PixelMonModules()
-{
-}
-
 PixelMonModulesProf::PixelMonModulesProf(std::string name, std::string title, int nbins, double* arr)
 {
    m_nBins=nbins;
@@ -48,13 +44,6 @@ PixelMonModulesProf::PixelMonModulesProf(std::string name, std::string title, in
    m_Dummy = 0;
 }
 
-PixelMonModulesProf::~PixelMonModulesProf()
-{
-   for (int i = 0; i < 2024; i++) {
-      if (getHist(i)) LWHist::safeDelete(getHist(i));
-   }
-}
-
 PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nbins, double* arr)
 {
    m_nBins = nbins;
@@ -85,13 +74,6 @@ PixelMonModules1D::PixelMonModules1D(std::string name, std::string title, int nb
    m_Dummy = 0;
 }
 
-PixelMonModules1D::~PixelMonModules1D()
-{
-   for (int i=0; i < 2024; i++) {
-      if (getHist(i)) delete getHist(i);
-   }
-}
-
 PixelMonModules2D::PixelMonModules2D(std::string name, std::string title, int nbins0, double low0, double high0, int nbins1, double low1, double high1)
 {
    m_nBins = nbins0 * nbins1;
@@ -107,13 +89,6 @@ PixelMonModules2D::PixelMonModules2D(std::string name, std::string title, int nb
    m_Dummy = 0;
 }
 
-PixelMonModules2D::~PixelMonModules2D()
-{
-   for (int i = 0; i < 2024; i++) {
-      if (getHist(i)) delete getHist(i);
-   }
-}
-
 void PixelMonModulesProf::Reset()
 {
    for (int i = 0; i < 2024; i++) {
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
index 4d64a8ffad036a28246de36a5c19698185558617..21002552b7786d29c5be282c02fbd553d61d79b3 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Status.cxx
@@ -46,24 +46,24 @@ StatusCode PixelMainMon::BookStatusMon(void)
 
   StatusCode sc;
 
-  m_status = new PixelMon2DProfilesLW("Map_Of_Modules_Status", ("Modules Status (0=Active+Good, 1=Active+Bad, 2=Inactive)" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+  m_status = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("Map_Of_Modules_Status", ("Modules Status (0=Active+Good, 1=Active+Bad, 2=Inactive)" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
   sc = m_status->regHist(statusHistos);
   m_status->SetMaxValue( 2.0 );
 
-  m_status_mon = new PixelMon2DProfilesLW("Map_Of_Modules_Status_Mon", ("Modules Status (0=Active+Good, 1=Active+Bad, 2=Inactive) for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+  m_status_mon = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("Map_Of_Modules_Status_Mon", ("Modules Status (0=Active+Good, 1=Active+Bad, 2=Inactive) for monitoring" + m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
   sc = m_status_mon->regHist(statusHistos);
   m_status_mon->SetMaxValue( 2.0 );
 
   if (m_doModules)
     {
-      m_Status_modules = new PixelMonModules1D("Status_of_Module", ("Module Status (0=Active+Good, 1=Active+Bad, 2=Inactive)" + m_histTitleExt + ";Status").c_str(),2,0,2);
+      m_Status_modules = std::make_unique<PixelMonModules1D>(PixelMonModules1D("Status_of_Module", ("Module Status (0=Active+Good, 1=Active+Bad, 2=Inactive)" + m_histTitleExt + ";Status").c_str(),2,0,2));
       sc = m_Status_modules->regHist(this, (path+"/Modules_Status").c_str(),run);
       m_Status_modules->SetBinLabel( "Status",2 ); 
       m_Status_modules->formatHist("status");
     }
   if (m_doOffline)
     { 
-      m_dqStatus = new PixelMon2DMapsLW("Ok_modules", ("module problems, empty bin means dead module not listed in status database"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D);
+      m_dqStatus = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("Ok_modules", ("module problems, empty bin means dead module not listed in status database"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixDBMIBL2D3D));
       sc = m_dqStatus->regHist(statusHistos);
     }
 
@@ -106,7 +106,7 @@ StatusCode PixelMainMon::BookStatusLumiBlockMon(void)
   if (m_doOnTrack)      path.replace(path.begin(), path.end(), "Pixel/LumiBlockOnTrack");
   MonGroup lumiBlockHist(this, path.c_str(), lowStat, ATTRIB_MANAGED);
 
-  m_status_LB = new PixelMon2DProfilesLW("Map_Of_Modules_Status_LB", ("Module Status (0=Active+Good, 1=Active+Bad, 2=Inactive)"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true);
+  m_status_LB = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("Map_Of_Modules_Status_LB", ("Module Status (0=Active+Good, 1=Active+Bad, 2=Inactive)"+ m_histTitleExt).c_str(), PixMon::HistConf::kPixIBL2D3D, true));
   StatusCode sc = m_status_LB->regHist(lumiBlockHist);
   m_status_LB->SetMaxValue( 2.0 );
      
diff --git a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
index b16e89dd2ba423774a65670272d5f3c125c354bb..e9e8c60ebef58b9dcf22a7b73a52abab9fa67140 100644
--- a/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
+++ b/InnerDetector/InDetMonitoring/PixelMonitoring/src/Track.cxx
@@ -105,33 +105,33 @@ StatusCode PixelMainMon::BookTrackMon(void)
   if (m_LorentzAngle_B2)    m_LorentzAngle_B2->SetOption("colz");
     
   if (m_do2DMaps && !m_doOnline) {
-    m_tsos_hitmap = new PixelMon2DMapsLW("TSOS_Measurement", ("TSOS of type Measurement" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true);
+    m_tsos_hitmap = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("TSOS_Measurement", ("TSOS of type Measurement" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true));
     sc = m_tsos_hitmap->regHist(trackHistos);
-    m_tsos_holemap = new PixelMon2DMapsLW("TSOS_Hole", ("TSOS of type Hole" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true);
+    m_tsos_holemap = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("TSOS_Hole", ("TSOS of type Hole" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true));
     sc = m_tsos_holemap->regHist(trackHistos);
-    m_tsos_outliermap = new PixelMon2DMapsLW("TSOS_Outlier", ("TSOS of type Outlier" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true);
+    m_tsos_outliermap = std::make_unique<PixelMon2DMapsLW>(PixelMon2DMapsLW("TSOS_Outlier", ("TSOS of type Outlier" + m_histTitleExt), PixMon::HistConf::kPixDBMIBL2D3D, true));
     sc = m_tsos_outliermap->regHist(trackHistos);
     
-    //m_tsos_measratio = new PixelMon2DProfilesLW("TSOS_MeasRatio", ("TSOS of type Meas per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    //m_tsos_measratio = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("TSOS_MeasRatio", ("TSOS of type Meas per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     //sc = m_tsos_measratio->regHist(trackHistos);
-    //m_tsos_holeratio = new PixelMon2DProfilesLW("TSOS_HoleRatio", ("TSOS of type Hole per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    //m_tsos_holeratio = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("TSOS_HoleRatio", ("TSOS of type Hole per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     //sc = m_tsos_holeratio->regHist(trackHistos);
-    //m_misshits_ratio = new PixelMon2DProfilesLW("MissHitsRatioOnTrack", ("Hole+Outlier per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    //m_misshits_ratio = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("MissHitsRatioOnTrack", ("Hole+Outlier per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     //sc = m_misshits_ratio->regHist(trackHistos);
   }
   if (m_doOnline) {
-    m_tsos_holeratio_tmp = new PixelMon2DProfilesLW("HoleRatio_tmp", ("TSOS of type Hole per track tmp" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    m_tsos_holeratio_tmp = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("HoleRatio_tmp", ("TSOS of type Hole per track tmp" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     sc = m_tsos_holeratio_tmp->regHist(trackHistos);
-    m_tsos_holeratio_mon = new PixelMon2DProfilesLW("HoleRatio_mon", ("TSOS of type Hole per track for monitoring" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    m_tsos_holeratio_mon = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("HoleRatio_mon", ("TSOS of type Hole per track for monitoring" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     sc = m_tsos_holeratio_mon->regHist(trackHistos);
-    m_misshits_ratio_tmp = new PixelMon2DProfilesLW("MissHitsRatioOnTrack_tmp", ("Hole+Outlier per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    m_misshits_ratio_tmp = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("MissHitsRatioOnTrack_tmp", ("Hole+Outlier per track" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     sc = m_misshits_ratio_tmp->regHist(trackHistos);
-    m_misshits_ratio_mon = new PixelMon2DProfilesLW("MissHitsRatioOnTrack_mon", ("Hole+Outlier per track for monitoring" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true);
+    m_misshits_ratio_mon = std::make_unique<PixelMon2DProfilesLW>(PixelMon2DProfilesLW("MissHitsRatioOnTrack_mon", ("Hole+Outlier per track for monitoring" + m_histTitleExt), PixMon::HistConf::kPixIBL2D3D, true));
     sc = m_misshits_ratio_mon->regHist(trackHistos);
   }
   
   if (m_doModules && !m_doOnTrack) { // tbc essentially code weren't used since doModules was enabled only for AllHits; to keep it disabled also now !m_doOnTrack switch was added
-    m_tsos_hiteff_vs_lumi = new PixelMonModulesProf("TSOS_HitEfficiency",("TSOS-based hit efficiency in module" + m_histTitleExt).c_str(),2500,-0.5,2499.5);
+    m_tsos_hiteff_vs_lumi = std::make_unique<PixelMonModulesProf>(PixelMonModulesProf("TSOS_HitEfficiency",("TSOS-based hit efficiency in module" + m_histTitleExt).c_str(),2500,-0.5,2499.5));
     sc = m_tsos_hiteff_vs_lumi->regHist(this,(path+"/Modules_TSOSHitEff").c_str(),run);
     if (!m_doOnline) {
       sc=trackHistos.regHist(m_clustot_lowpt = TH1F_LW::create("m_clustot_lowpt",("Cluster ToT vs Track pT (pT<10GeV)" + m_histTitleExt + "; Track pT; Cluster ToT (on track)").c_str(),250,0,250));
@@ -511,8 +511,8 @@ StatusCode PixelMainMon::FillTrackMon(void)
 
    if (m_doOnline) {
       if (m_doRefresh5min) {
-         if (m_tsos_holeratio_mon && m_tsos_holeratio_tmp) m_tsos_holeratio_mon->Fill2DMon(m_tsos_holeratio_tmp);
-         if (m_misshits_ratio_mon && m_misshits_ratio_tmp) m_misshits_ratio_mon->Fill2DMon(m_misshits_ratio_tmp);
+         if (m_tsos_holeratio_mon && m_tsos_holeratio_tmp) m_tsos_holeratio_mon->Fill2DMon(m_tsos_holeratio_tmp.get());
+         if (m_misshits_ratio_mon && m_misshits_ratio_tmp) m_misshits_ratio_mon->Fill2DMon(m_misshits_ratio_tmp.get());
       }
    }