diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
index 301f6400d608b5d66d412d9c7ec65ab33232b141..85c485645d0a8e012baa8bf735518de26899acb0 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/share/InDetPVMPlotDefCommon.xml
@@ -814,7 +814,31 @@
 </h>
 <h id="vx_hs_truth_trans_reso_vs_PU" type="TH2" title="Truth Transverse Resolution vs. PU (2D)">
   <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
-  <y title="|Reco-truth| transverse resolution [mm]" n="20" lo="0.0" hi="0.02"/>
+   <y title="|Reco-truth| transverse resolution [mm]" n="40" lo="-0.08" hi="0.08"/>
+</h>
+<h id="vx_hs_truth_long_pull_vs_PU" type="TH2" title="Truth Longitudinal Pull vs. PU (2D)">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco-truth| longitudinal resolution [mm]" n="100" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_hs_truth_trans_pull_vs_PU" type="TH2" title="Truth Transverse Pull vs. PU (2D)">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco-truth| transverse resolution [mm]" n="100" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_hs_truth_long_pull_vs_nTrk" type="TH2" title="Truth Longitudinal Pull vs. nTrk (2D)">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco-truth| longitudinal resolution [mm]" n="100" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_hs_truth_trans_pull_vs_nTrk" type="TH2" title="Truth Transverse Pull vs. nTrk (2D)">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco-truth| transverse resolution [mm]" n="100" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_hs_truth_long_reso_vs_nTrk" type="TH2" title="Truth Longitudinal Resolution vs. nTrk (2D)">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco-truth| longitudinal resolution [mm]" n="40" lo="-0.08" hi="0.08"/>
+</h>
+<h id="vx_hs_truth_trans_reso_vs_nTrk" type="TH2" title="Truth Transverse Resolution vs. nTrk (2D)">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco-truth| longitudinal resolution [mm]" n="40" lo="-0.08" hi="0.08"/>
 </h>
 <h id="vx_hs_truth_long_reso" type="TH1" title="Truth Longitudinal Resolution">
   <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
@@ -824,6 +848,86 @@
   <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
   <y title="|Reco-truth| transverse resolution [mm]" lo="0.0" hi="1.0"/>
 </h>
+
+
+<h id="vx_TYPE_truth_reso_z_vs_PU" type="TH2" title="Vertex Resolution vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_z-truth_z| [mm]" n="60" lo="-0.2" hi="0.2"/>
+</h>
+<h id="vx_TYPE_truth_reso_x_vs_PU" type="TH2" title="Vertex Resolution vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_x-truth_x| [mm]" n="60" lo="-0.1" hi="0.1"/>
+</h>
+<h id="vx_TYPE_truth_reso_y_vs_PU" type="TH2" title="Vertex Resolution vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_y-truth_y| [mm]" n="60" lo="-0.1" hi="0.1"/>
+</h>
+<h id="vx_TYPE_truth_pull_z_vs_PU" type="TH2" title="Vertex Pull vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_z-truth_z|/err_z" n="60" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_TYPE_truth_pull_x_vs_PU" type="TH2" title="Vertex Pull vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_x-truth_x|/err_x" n="60" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_TYPE_truth_pull_y_vs_PU" type="TH2" title="Vertex Pull vs PU Density">
+  <x title="Local PU density [vertices/mm]" n="4" lo="0.0" hi="2.0"/>
+  <y title="|Reco_y-truth_y|/err_y" n="60" lo="-5.0" hi="5.0"/>
+</h>
+
+<h id="vx_TYPE_truth_reso_z_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_z-truth_z| [mm]" n="60" lo="-0.2" hi="0.2"/>
+</h>
+<h id="vx_TYPE_truth_reso_x_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_x-truth_x| [mm]" n="60" lo="-0.1" hi="0.1"/>
+</h>
+<h id="vx_TYPE_truth_reso_y_vs_nTrk" type="TH2" title="Vertex Resolution vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_y-truth_y| [mm]" n="60" lo="-0.1" hi="0.1"/>
+</h>
+<h id="vx_TYPE_truth_pull_z_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_z-truth_z|/err_z" n="60" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_TYPE_truth_pull_x_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_x-truth_x|/err_x" n="60" lo="-5.0" hi="5.0"/>
+</h>
+<h id="vx_TYPE_truth_pull_y_vs_nTrk" type="TH2" title="Vertex Pull vs Number of Tracks">
+  <x title="Number of Tracks" n="50" lo="0.0" hi="100"/>
+  <y title="|Reco_y-truth_y|/err_y" n="60" lo="-5.0" hi="5.0"/>
+</h>
+
+
+
+<h id="vx_TYPE_z_pull" type="TH1" title="Vertex Z Pull">
+  <x title="|Reco_z-Truth_z|/Err_z" n="25" lo="-5.0" hi="5.0"/>
+  <y title="Number of Enries"/>
+</h>
+<h id="vx_TYPE_y_pull" type="TH1" title="Vertex Y Pull">
+  <x title="|Reco_y-Truth_y|/Err_y" n="25" lo="-5.0" hi="5.0"/>
+  <y title="Number of Enries"/>
+</h>
+<h id="vx_TYPE_x_pull" type="TH1" title="Vertex X Pull">
+  <x title="|Reco_x-Truth_x|/Err_x" n="25" lo="-5.0" hi="5.0"/>
+  <y title="Number of Enries"/>
+</h>
+<h id="vx_TYPE_z_reso" type="TH1" title="Vertex Z Resolution">
+  <x title="|Reco_z-Truth_z|" n="60" lo="-0.2" hi="0.2"/>
+  <y title="Number of Enries"/>
+</h>
+<h id="vx_TYPE_y_reso" type="TH1" title="Vertex Y Resolution">
+  <x title="|Reco_y-Truth_y|" n="60" lo="-0.2" hi="0.2"/>
+  <y title="Number of Enries"/>
+</h>
+<h id="vx_TYPE_x_reso" type="TH1" title="Vertex X Resolution">
+  <x title="|Reco_x-Truth_x|" n="60" lo="-0.2" hi="0.2"/>
+  <y title="Number of Enries"/>
+</h>
+
+
 <h id="vx_nTracks" type="TH1F" title="Number of tracks at vertex">
   <x title="Number of Tracks" n="150" lo="0" hi="150"/>
   <y title="Entries"/>
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx
index 2dc45bf250b2cdf2b9fdbd25af769587651b04c3..2fe81931ffbf252b376c776bb21cadf771c3cf4b 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_Vertex.cxx
@@ -36,31 +36,31 @@ InDetPerfPlot_Vertex::InDetPerfPlot_Vertex(InDetPlotBase* pParent, const std::st
 
 void
 InDetPerfPlot_Vertex::initializePlots() {
-  IDPVM_BOOK(m_vx_x);
-  IDPVM_BOOK(m_vx_y);
-  IDPVM_BOOK(m_vx_z);
+  book(m_vx_x,"vx_x");
+  book(m_vx_y,"vx_y");
+  book(m_vx_z,"vx_z");
 
-  IDPVM_BOOK(m_vx_err_x);
-  IDPVM_BOOK(m_vx_err_y);
-  IDPVM_BOOK(m_vx_err_z);
+  book(m_vx_err_x,"vx_err_x");
+  book(m_vx_err_y,"vx_err_y");
+  book(m_vx_err_z,"vx_err_z");
 
-  IDPVM_BOOK(m_vx_chi2_over_ndf);
-  IDPVM_BOOK(m_vx_type);
+  book(m_vx_chi2_over_ndf,"vx_chi2_over_ndf");
+  book(m_vx_type,"vx_type");
   
-  IDPVM_BOOK(m_vx_nTracks);
-  IDPVM_BOOK(m_vx_track_weights);
+  book(m_vx_nTracks,"vx_nTracks");
+  book(m_vx_track_weights,"vx_track_weights");
 
 
 
   if (m_iDetailLevel >= 100) {
-    IDPVM_BOOK(m_vx_track_pt);
-    IDPVM_BOOK(m_vx_track_eta);
-    IDPVM_BOOK(m_vx_track_nSiHits);
-    IDPVM_BOOK(m_vx_track_nSiHoles);
-    IDPVM_BOOK(m_vx_track_d0);
-    IDPVM_BOOK(m_vx_track_err_d0);
-    IDPVM_BOOK(m_vx_track_z0);
-    IDPVM_BOOK(m_vx_track_err_z0);
+    book(m_vx_track_pt,"vx_track_pt");
+    book(m_vx_track_eta,"vx_track_eta");
+    book(m_vx_track_nSiHits,"vx_track_nSiHits");
+    book(m_vx_track_nSiHoles,"vx_track_nSiHoles");
+    book(m_vx_track_d0,"vx_track_d0");
+    book(m_vx_track_err_d0,"vx_track_err_d0");
+    book(m_vx_track_z0,"vx_track_z0");
+    book(m_vx_track_err_z0,"vx_track_err_z0");
   }
 }
 
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
index 62f5a53a690ee847c4eb935ed5c4f3b5ad0bc621..a6b21a33004b4279d8091b5c4a907d7180763539 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.cxx
@@ -8,6 +8,8 @@
  **/
 
 #include "InDetPerfPlot_VertexTruthMatching.h"
+#include "EventPrimitives/EventPrimitives.h"
+#include "EventPrimitives/EventPrimitivesHelpers.h"
 
 using namespace IDPVM;
 
@@ -34,35 +36,117 @@ InDetPerfPlot_VertexTruthMatching::InDetPerfPlot_VertexTruthMatching(InDetPlotBa
     m_vx_hs_truth_long_reso_vs_PU(nullptr),
     m_vx_hs_truth_trans_reso_vs_PU(nullptr),
     m_vx_hs_truth_long_reso(nullptr),
-    m_vx_hs_truth_trans_reso(nullptr)
+    m_vx_hs_truth_trans_reso(nullptr),
+    m_vx_hs_z_pull(nullptr),
+    m_vx_hs_y_pull(nullptr),
+    m_vx_hs_x_pull(nullptr),
+    m_vx_all_z_pull(nullptr),
+    m_vx_all_y_pull(nullptr),
+    m_vx_all_x_pull(nullptr),
+    m_vx_hs_z_res(nullptr),
+    m_vx_hs_y_res(nullptr),
+    m_vx_hs_x_res(nullptr),
+    m_vx_all_z_res(nullptr),
+    m_vx_all_y_res(nullptr),
+    m_vx_all_x_res(nullptr),
+    m_vx_all_truth_z_res_vs_PU(nullptr),
+    m_vx_all_truth_x_res_vs_PU(nullptr),
+    m_vx_all_truth_y_res_vs_PU(nullptr),
+    m_vx_all_truth_z_pull_vs_PU(nullptr),
+    m_vx_all_truth_x_pull_vs_PU(nullptr),
+    m_vx_all_truth_y_pull_vs_PU(nullptr),
+    m_vx_all_truth_z_res_vs_nTrk(nullptr),
+    m_vx_all_truth_x_res_vs_nTrk(nullptr),
+    m_vx_all_truth_y_res_vs_nTrk(nullptr),
+    m_vx_all_truth_z_pull_vs_nTrk(nullptr),
+    m_vx_all_truth_x_pull_vs_nTrk(nullptr),
+    m_vx_all_truth_y_pull_vs_nTrk(nullptr),
+    m_vx_hs_truth_z_res_vs_PU(nullptr),
+    m_vx_hs_truth_x_res_vs_PU(nullptr),
+    m_vx_hs_truth_y_res_vs_PU(nullptr),
+    m_vx_hs_truth_z_pull_vs_PU(nullptr),
+    m_vx_hs_truth_x_pull_vs_PU(nullptr),
+    m_vx_hs_truth_y_pull_vs_PU(nullptr),
+    m_vx_hs_truth_z_res_vs_nTrk(nullptr),
+    m_vx_hs_truth_x_res_vs_nTrk(nullptr),
+    m_vx_hs_truth_y_res_vs_nTrk(nullptr),
+    m_vx_hs_truth_z_pull_vs_nTrk(nullptr),
+    m_vx_hs_truth_x_pull_vs_nTrk(nullptr),
+    m_vx_hs_truth_y_pull_vs_nTrk(nullptr)
+
 {
   // nop
 }
 
 void InDetPerfPlot_VertexTruthMatching::initializePlots() {
 
-    IDPVM_BOOK(m_vx_type_truth);
+    book(m_vx_type_truth,"vx_type_truth");
     if (m_iDetailLevel >= 200) {
-        IDPVM_BOOK(m_vx_hs_classification);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_inclusive);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_matched);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_merged);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_split);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_fake);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_dummy);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_clean);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_lowpu);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_highpu);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_hssplit);
-        IDPVM_BOOK(m_vx_nReco_vs_nTruth_none);
-        IDPVM_BOOK(m_vx_hs_reco_eff);
-        IDPVM_BOOK(m_vx_hs_sel_eff);
-        IDPVM_BOOK(m_vx_hs_reco_long_reso);
-        IDPVM_BOOK(m_vx_hs_reco_trans_reso);
-        IDPVM_BOOK(m_vx_hs_truth_long_reso);
-        IDPVM_BOOK(m_vx_hs_truth_trans_reso);
-        IDPVM_BOOK(m_vx_hs_truth_long_reso_vs_PU);
-        IDPVM_BOOK(m_vx_hs_truth_trans_reso_vs_PU);
+        book(m_vx_hs_classification,"vx_hs_classification");
+        book(m_vx_nReco_vs_nTruth_inclusive,"vx_nReco_vs_nTruth_inclusive");
+        book(m_vx_nReco_vs_nTruth_matched,"vx_nReco_vs_nTruth_matched");
+        book(m_vx_nReco_vs_nTruth_merged,"vx_nReco_vs_nTruth_merged");
+        book(m_vx_nReco_vs_nTruth_split,"vx_nReco_vs_nTruth_split");
+        book(m_vx_nReco_vs_nTruth_fake,"vx_nReco_vs_nTruth_fake");
+        book(m_vx_nReco_vs_nTruth_dummy,"vx_nReco_vs_nTruth_dummy");
+        book(m_vx_nReco_vs_nTruth_clean,"vx_nReco_vs_nTruth_clean");
+        book(m_vx_nReco_vs_nTruth_lowpu,"vx_nReco_vs_nTruth_lowpu");
+        book(m_vx_nReco_vs_nTruth_highpu,"vx_nReco_vs_nTruth_highpu");
+        book(m_vx_nReco_vs_nTruth_hssplit,"vx_nReco_vs_nTruth_hssplit");
+        book(m_vx_nReco_vs_nTruth_none,"vx_nReco_vs_nTruth_none");
+        book(m_vx_hs_reco_eff,"vx_hs_reco_eff");
+        book(m_vx_hs_sel_eff,"vx_hs_sel_eff");
+        book(m_vx_hs_reco_long_reso,"vx_hs_reco_long_reso");
+        book(m_vx_hs_reco_trans_reso,"vx_hs_reco_trans_reso");
+        book(m_vx_hs_truth_long_reso,"vx_hs_truth_long_reso");
+        book(m_vx_hs_truth_trans_reso,"vx_hs_truth_trans_reso");
+        book(m_vx_hs_truth_long_reso_vs_PU,"vx_hs_truth_long_reso_vs_PU");
+        book(m_vx_hs_truth_trans_reso_vs_PU,"vx_hs_truth_trans_reso_vs_PU");
+ 
+        book(m_vx_hs_z_pull,"vx_TYPE_z_pull","vx_hs_z_pull");
+        book(m_vx_hs_y_pull,"vx_TYPE_y_pull","vx_hs_y_pull");
+        book(m_vx_hs_x_pull,"vx_TYPE_x_pull","vx_hs_x_pull");
+   
+        book(m_vx_all_z_pull,"vx_TYPE_z_pull","vx_all_z_pull");
+        book(m_vx_all_y_pull,"vx_TYPE_y_pull","vx_all_y_pull");
+        book(m_vx_all_x_pull,"vx_TYPE_x_pull","vx_all_x_pull");
+
+        book(m_vx_hs_z_res,"vx_TYPE_z_reso","vx_hs_z_res");
+        book(m_vx_hs_y_res,"vx_TYPE_y_reso","vx_hs_y_res");
+        book(m_vx_hs_x_res,"vx_TYPE_x_reso","vx_hs_x_res");
+        book(m_vx_all_z_res,"vx_TYPE_z_reso","vx_all_z_res");
+        book(m_vx_all_y_res,"vx_TYPE_y_reso","vx_all_y_res");
+        book(m_vx_all_x_res,"vx_TYPE_x_reso","vx_all_x_res");
+
+        book(m_vx_all_truth_z_res_vs_PU, "vx_TYPE_truth_reso_z_vs_PU", "vx_all_truth_reso_z_vs_PU");
+        book(m_vx_all_truth_x_res_vs_PU, "vx_TYPE_truth_reso_x_vs_PU", "vx_all_truth_reso_x_vs_PU");
+        book(m_vx_all_truth_y_res_vs_PU, "vx_TYPE_truth_reso_y_vs_PU", "vx_all_truth_reso_y_vs_PU");
+        book(m_vx_all_truth_z_res_vs_nTrk, "vx_TYPE_truth_reso_z_vs_nTrk", "vx_all_truth_reso_z_vs_nTrk");
+        book(m_vx_all_truth_x_res_vs_nTrk, "vx_TYPE_truth_reso_x_vs_nTrk", "vx_all_truth_reso_x_vs_nTrk");
+        book(m_vx_all_truth_y_res_vs_nTrk, "vx_TYPE_truth_reso_y_vs_nTrk", "vx_all_truth_reso_y_vs_nTrk");
+
+        book(m_vx_all_truth_z_pull_vs_PU, "vx_TYPE_truth_pull_z_vs_PU", "vx_all_truth_pull_z_vs_PU");
+        book(m_vx_all_truth_x_pull_vs_PU, "vx_TYPE_truth_pull_x_vs_PU", "vx_all_truth_pull_x_vs_PU");
+        book(m_vx_all_truth_y_pull_vs_PU, "vx_TYPE_truth_pull_y_vs_PU", "vx_all_truth_pull_y_vs_PU");
+        book(m_vx_all_truth_z_pull_vs_nTrk, "vx_TYPE_truth_pull_z_vs_nTrk", "vx_all_truth_pull_z_vs_nTrk");
+        book(m_vx_all_truth_x_pull_vs_nTrk, "vx_TYPE_truth_pull_x_vs_nTrk", "vx_all_truth_pull_x_vs_nTrk");
+        book(m_vx_all_truth_y_pull_vs_nTrk, "vx_TYPE_truth_pull_y_vs_nTrk", "vx_all_truth_pull_y_vs_nTrk");
+
+        book(m_vx_hs_truth_z_res_vs_PU, "vx_TYPE_truth_reso_z_vs_PU", "vx_hs_truth_reso_z_vs_PU");
+        book(m_vx_hs_truth_x_res_vs_PU, "vx_TYPE_truth_reso_x_vs_PU", "vx_hs_truth_reso_x_vs_PU");
+        book(m_vx_hs_truth_y_res_vs_PU, "vx_TYPE_truth_reso_y_vs_PU", "vx_hs_truth_reso_y_vs_PU");
+        book(m_vx_hs_truth_z_res_vs_nTrk, "vx_TYPE_truth_reso_z_vs_nTrk", "vx_hs_truth_reso_z_vs_nTrk");
+        book(m_vx_hs_truth_x_res_vs_nTrk, "vx_TYPE_truth_reso_x_vs_nTrk", "vx_hs_truth_reso_x_vs_nTrk");
+        book(m_vx_hs_truth_y_res_vs_nTrk, "vx_TYPE_truth_reso_y_vs_nTrk", "vx_hs_truth_reso_y_vs_nTrk");
+
+        book(m_vx_hs_truth_z_pull_vs_PU, "vx_TYPE_truth_pull_z_vs_PU", "vx_hs_truth_pull_z_vs_PU");
+        book(m_vx_hs_truth_x_pull_vs_PU, "vx_TYPE_truth_pull_x_vs_PU", "vx_hs_truth_pull_x_vs_PU");
+        book(m_vx_hs_truth_y_pull_vs_PU, "vx_TYPE_truth_pull_y_vs_PU", "vx_hs_truth_pull_y_vs_PU");
+        book(m_vx_hs_truth_z_pull_vs_nTrk, "vx_TYPE_truth_pull_z_vs_nTrk", "vx_hs_truth_pull_z_vs_nTrk");
+        book(m_vx_hs_truth_x_pull_vs_nTrk, "vx_TYPE_truth_pull_x_vs_nTrk", "vx_hs_truth_pull_x_vs_nTrk");
+        book(m_vx_hs_truth_y_pull_vs_nTrk, "vx_TYPE_truth_pull_y_vs_nTrk", "vx_hs_truth_pull_y_vs_nTrk");
+
+
     }
 
 }
@@ -324,6 +408,42 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
                     minTruthRecoRadialDiff2 = truthRecoRadialDiff2;
                 }
             }
+          
+            const xAOD::TruthVertex *matchVertex = getTruthVertex(vertex);
+            if(!matchVertex) continue;
+            float residual_z = matchVertex->z() - vertex->z();
+            float residual_x = matchVertex->x() - vertex->x();
+            float residual_y = matchVertex->y() - vertex->y();
+            const AmgSymMatrix(3)& covariance = vertex->covariancePosition();
+            float vtxerr_x = fabs(Amg::error(covariance, 0)) > 1e-7 ? Amg::error(covariance, 0) : 1000.;
+            float vtxerr_y = fabs(Amg::error(covariance, 1)) > 1e-7 ? Amg::error(covariance, 1) : 1000.;
+            float vtxerr_z = fabs(Amg::error(covariance, 2)) > 1e-7 ? Amg::error(covariance, 2) : 1000.;
+            localPUDensity = getLocalPUDensity(matchVertex, truthHSVertices, truthPUVertices);
+    
+            fillHisto(m_vx_all_z_pull, residual_z/vtxerr_z);
+            fillHisto(m_vx_all_y_pull, residual_y/vtxerr_y);
+            fillHisto(m_vx_all_x_pull, residual_x/vtxerr_x);
+
+            fillHisto(m_vx_all_truth_z_res_vs_PU, localPUDensity, residual_z);
+            fillHisto(m_vx_all_truth_x_res_vs_PU, localPUDensity, residual_x);
+            fillHisto(m_vx_all_truth_y_res_vs_PU, localPUDensity, residual_y);
+
+            fillHisto(m_vx_all_z_res, residual_z);
+            fillHisto(m_vx_all_y_res, residual_y);
+            fillHisto(m_vx_all_x_res, residual_x);
+            
+            fillHisto(m_vx_all_truth_z_pull_vs_PU, localPUDensity, residual_z/vtxerr_z);
+            fillHisto(m_vx_all_truth_x_pull_vs_PU, localPUDensity, residual_x/vtxerr_y);
+            fillHisto(m_vx_all_truth_y_pull_vs_PU, localPUDensity, residual_y/vtxerr_x);
+
+            fillHisto(m_vx_all_truth_z_res_vs_nTrk, vertex->nTrackParticles(), residual_z);
+            fillHisto(m_vx_all_truth_x_res_vs_nTrk, vertex->nTrackParticles(), residual_x);
+            fillHisto(m_vx_all_truth_y_res_vs_nTrk, vertex->nTrackParticles(), residual_y);
+            
+            fillHisto(m_vx_all_truth_z_pull_vs_nTrk, vertex->nTrackParticles(), residual_z/vtxerr_z);
+            fillHisto(m_vx_all_truth_x_pull_vs_nTrk, vertex->nTrackParticles(), residual_x/vtxerr_y);
+            fillHisto(m_vx_all_truth_y_pull_vs_nTrk, vertex->nTrackParticles(), residual_y/vtxerr_x);
+
 
         } // end loop over vertices
 
@@ -331,11 +451,45 @@ void InDetPerfPlot_VertexTruthMatching::fill(const xAOD::VertexContainer& vertex
         if (truthHSVertices.size() != 0) {
             localPUDensity = getLocalPUDensity(truthHSVtx, truthHSVertices, truthPUVertices);
             if (truthHSVtxRecoed) {
+                float residual_z = truthHSVtx->z() - bestRecoHSVtx_truth->z();
+                float residual_r = std::sqrt(std::pow(truthHSVtx->x() - bestRecoHSVtx_truth->x(), 2) + std::pow(truthHSVtx->y() - bestRecoHSVtx_truth->y(), 2));
+                float residual_x = truthHSVtx->x() - bestRecoHSVtx_truth->x();
+                float residual_y = truthHSVtx->y() - bestRecoHSVtx_truth->y();
                 fillHisto(m_vx_hs_reco_eff, localPUDensity, 1);
                 fillHisto(m_vx_hs_reco_long_reso, localPUDensity, getRecoLongitudinalReso(bestRecoHSVtx_truth));
                 fillHisto(m_vx_hs_reco_trans_reso, localPUDensity, getRecoTransverseReso(bestRecoHSVtx_truth));
-                fillHisto(m_vx_hs_truth_long_reso_vs_PU, localPUDensity, truthHSVtx->z() - bestRecoHSVtx_truth->z());
-                fillHisto(m_vx_hs_truth_trans_reso_vs_PU, localPUDensity, std::sqrt(std::pow(truthHSVtx->x() - bestRecoHSVtx_truth->x(), 2) + std::pow(truthHSVtx->y() - bestRecoHSVtx_truth->y(), 2)));
+                fillHisto(m_vx_hs_truth_long_reso_vs_PU, localPUDensity, residual_z);
+                fillHisto(m_vx_hs_truth_trans_reso_vs_PU, localPUDensity, residual_r);
+
+                const AmgSymMatrix(3)& covariance = bestRecoHSVtx_truth->covariancePosition();
+                float vtxerr_x = Amg::error(covariance, 0);
+                float vtxerr_y = Amg::error(covariance, 1);
+                float vtxerr_z = Amg::error(covariance, 2);
+
+                if(fabs(vtxerr_z) > 1e-7) fillHisto(m_vx_hs_z_pull, residual_z/vtxerr_z);
+                if(fabs(vtxerr_y) > 1e-7) fillHisto(m_vx_hs_y_pull, residual_y/vtxerr_y);
+                if(fabs(vtxerr_x) > 1e-7) fillHisto(m_vx_hs_x_pull, residual_x/vtxerr_x);
+
+                fillHisto(m_vx_hs_truth_z_res_vs_PU, localPUDensity, residual_z);
+                fillHisto(m_vx_hs_truth_x_res_vs_PU, localPUDensity, residual_x);
+                fillHisto(m_vx_hs_truth_y_res_vs_PU, localPUDensity, residual_y);
+
+                fillHisto(m_vx_hs_z_res, residual_z);
+                fillHisto(m_vx_hs_y_res, residual_y);
+                fillHisto(m_vx_hs_x_res, residual_x);            
+
+                fillHisto(m_vx_hs_truth_z_pull_vs_PU, localPUDensity, residual_z/vtxerr_z);
+                fillHisto(m_vx_hs_truth_x_pull_vs_PU, localPUDensity, residual_x/vtxerr_y);
+                fillHisto(m_vx_hs_truth_y_pull_vs_PU, localPUDensity, residual_y/vtxerr_x);
+
+                fillHisto(m_vx_hs_truth_z_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_z);
+                fillHisto(m_vx_hs_truth_x_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_x);
+                fillHisto(m_vx_hs_truth_y_res_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_y);
+            
+                fillHisto(m_vx_hs_truth_z_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_z/vtxerr_z);
+                fillHisto(m_vx_hs_truth_x_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_x/vtxerr_y);
+                fillHisto(m_vx_hs_truth_y_pull_vs_nTrk, bestRecoHSVtx_truth->nTrackParticles(), residual_y/vtxerr_x);
+
             }
             else {
                 fillHisto(m_vx_hs_reco_eff, localPUDensity, 0);
diff --git a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
index 754427d18db61c7907d47040e4bfdcd7abf4c0d1..e1903fb2dd46766cceadc89c4c328151360f7f2b 100644
--- a/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
+++ b/InnerDetector/InDetValidation/InDetPhysValMonitoring/src/InDetPerfPlot_VertexTruthMatching.h
@@ -72,8 +72,68 @@ private:
     // For reco-truth resolutions:
     TH2* m_vx_hs_truth_long_reso_vs_PU;
     TH2* m_vx_hs_truth_trans_reso_vs_PU;
+    TH2* m_vx_all_truth_long_reso_vs_PU;
+    TH2* m_vx_all_truth_trans_reso_vs_PU;
+
+    TH2* m_vx_hs_truth_long_pull_vs_PU;
+    TH2* m_vx_hs_truth_trans_pull_vs_PU;
+    TH2* m_vx_all_truth_long_pull_vs_PU;
+    TH2* m_vx_all_truth_trans_pull_vs_PU;
+
+    TH2* m_vx_hs_truth_long_reso_vs_nTrk;
+    TH2* m_vx_hs_truth_trans_reso_vs_nTrk;
+    TH2* m_vx_all_truth_long_reso_vs_nTrk;
+    TH2* m_vx_all_truth_trans_reso_vs_nTrk;
+    TH2* m_vx_hs_truth_long_pull_vs_nTrk;
+    TH2* m_vx_hs_truth_trans_pull_vs_nTrk;
+    TH2* m_vx_all_truth_long_pull_vs_nTrk;
+    TH2* m_vx_all_truth_trans_pull_vs_nTrk;
+
     TH1* m_vx_hs_truth_long_reso;
     TH1* m_vx_hs_truth_trans_reso;
+     
+    TH1* m_vx_hs_z_pull;
+    TH1* m_vx_hs_y_pull;
+    TH1* m_vx_hs_x_pull;
+    TH1* m_vx_all_z_pull;
+    TH1* m_vx_all_y_pull;
+    TH1* m_vx_all_x_pull;
+    
+    TH1* m_vx_hs_z_res;
+    TH1* m_vx_hs_y_res;
+    TH1* m_vx_hs_x_res;
+    TH1* m_vx_all_z_res;
+    TH1* m_vx_all_y_res;
+    TH1* m_vx_all_x_res;
+
+    TH2* m_vx_all_truth_z_res_vs_PU;
+    TH2* m_vx_all_truth_x_res_vs_PU;
+    TH2* m_vx_all_truth_y_res_vs_PU;
+    TH2* m_vx_all_truth_z_pull_vs_PU;
+    TH2* m_vx_all_truth_x_pull_vs_PU;
+    TH2* m_vx_all_truth_y_pull_vs_PU;
+
+    TH2* m_vx_all_truth_z_res_vs_nTrk;
+    TH2* m_vx_all_truth_x_res_vs_nTrk;
+    TH2* m_vx_all_truth_y_res_vs_nTrk;
+    TH2* m_vx_all_truth_z_pull_vs_nTrk;
+    TH2* m_vx_all_truth_x_pull_vs_nTrk;
+    TH2* m_vx_all_truth_y_pull_vs_nTrk;
+
+    TH2* m_vx_hs_truth_z_res_vs_PU;
+    TH2* m_vx_hs_truth_x_res_vs_PU;
+    TH2* m_vx_hs_truth_y_res_vs_PU;
+    TH2* m_vx_hs_truth_z_pull_vs_PU;
+    TH2* m_vx_hs_truth_x_pull_vs_PU;
+    TH2* m_vx_hs_truth_y_pull_vs_PU;
+
+    TH2* m_vx_hs_truth_z_res_vs_nTrk;
+    TH2* m_vx_hs_truth_x_res_vs_nTrk;
+    TH2* m_vx_hs_truth_y_res_vs_nTrk;
+    TH2* m_vx_hs_truth_z_pull_vs_nTrk;
+    TH2* m_vx_hs_truth_x_pull_vs_nTrk;
+    TH2* m_vx_hs_truth_y_pull_vs_nTrk;
+
     ///@}
 private:
     // plot base has no default implementation of this; we use it to book the histos