diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt
index 42fef727f708b5ce2e2ce4c9799f8efb496f91f5..92d3652112c5ef490b74434bbc4fea4c26f907c5 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt
@@ -8,6 +8,7 @@ atlas_subdir( TrigInDetAnalysisExample )
 # Declare the package's dependencies:
 atlas_depends_on_subdirs( PUBLIC
                           Event/EventInfo
+			  Event/xAOD/xAODEventInfo
                           Generators/GeneratorObjects
                           InnerDetector/InDetConditions/InDetBeamSpotService
                           PhysicsAnalysis/TruthParticleID/McParticleEvent
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h
index 0bba597d1db00eca6d95a399e5a55deff41806cd..41bd5cdf91c5a79d4be00242207d500659d75ff5 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h
@@ -13,6 +13,8 @@
 #include "TrigInDetAnalysis/TrackAnalysis.h"
 #include "TrigInDetAnalysis/TIDDirectory.h"
 
+#include "TrigInDetAnalysisExample/VtxAnalysis.h"
+
 class Analysis_Tier0 : public TrackAnalysis { 
   
  public:
@@ -25,6 +27,10 @@ class Analysis_Tier0 : public TrackAnalysis {
 		       const std::vector<TIDA::Track*>& testTracks,
 		       TrackAssociator* associator);
   
+
+  virtual void execute_vtx(const std::vector<TIDA::Vertex*>& vtx0,
+			   const std::vector<TIDA::Vertex*>& vtx1 );
+  
   virtual void finalise();
 
   void setvertices(int numvtx) {m_nVtx = numvtx;}
@@ -151,6 +157,8 @@ class Analysis_Tier0 : public TrackAnalysis {
 
   bool m_debug;
 
+  VtxAnalysis* m_vtxanal;
+
 };
 
 
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h
index 891cdf3dcca7353e6459f461158a5b0e6ead4ac7..cd0bb7c308bb79ba1ad1e2810f0691ef404d29af 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h
@@ -32,6 +32,7 @@
 #include "TrigInDetAnalysisUtils/T_AnalysisConfig.h"
 
 #include "TrigInDetAnalysisExample/Analysis_Tier0.h"
+#include "TrigInDetAnalysisExample/VtxAnalysis.h"
 #include "TrigInDetAnalysisExample/ChainString.h"
 
 #include "TTree.h"
@@ -49,6 +50,7 @@
 
 #include "EventInfo/EventInfo.h"
 #include "EventInfo/EventID.h"
+#include "xAODEventInfo/EventInfo.h"
 
 
 
@@ -220,10 +222,9 @@ protected:
 
       std::vector<std::string> configuredChains  = (*(m_tdt))->getListOfTriggers("L2_.*, EF_.*, HLT_.*");
 
-      if(m_provider->msg().level() <= MSG::VERBOSE) {
+      if(m_provider->msg().level() <= MSG::INFO) {
         for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) {
-          if( m_provider->msg().level() <= MSG::VERBOSE)
-            m_provider->msg(MSG::VERBOSE)  << "Chain " << configuredChains[i]  << endreq;
+	  m_provider->msg(MSG::INFO)  << "Chain " << configuredChains[i]  << endreq;
         }
       }
 
@@ -266,6 +267,7 @@ protected:
           if ( chainName.extra()!="" )   selectChains[iselected] += ":index="+chainName.extra();
           if ( chainName.element()!="" ) selectChains[iselected] += ":te="+chainName.element();
           if ( chainName.roi()!="" )     selectChains[iselected] += ":roi="+chainName.roi();
+          if ( chainName.vtx()!="" )     selectChains[iselected] += ":vtx="+chainName.vtx();
           if ( !chainName.passed() )     selectChains[iselected] += ";DTE";
 
           /// replace wildcard with actual matching chains ...
@@ -326,7 +328,11 @@ protected:
     m_event->clear();
 
     /// (obviously) get the event info
+#ifndef  XAODTRACKING_TRACKPARTICLE_H
     const EventInfo* pEventInfo;
+#else
+    const xAOD::EventInfo* pEventInfo;
+#endif
     unsigned run_number        = 0;
     unsigned event_number      = 0;
     unsigned lumi_block        = 0;
@@ -337,12 +343,22 @@ protected:
     if ( m_provider->evtStore()->retrieve(pEventInfo).isFailure() ) {
       m_provider->msg(MSG::WARNING) << "Failed to get EventInfo " << endreq;
     } else {
+
+#ifndef  XAODTRACKING_TRACKPARTICLE_H
       run_number        = pEventInfo->event_ID()->run_number();
       event_number      = pEventInfo->event_ID()->event_number();
       lumi_block        = pEventInfo->event_ID()->lumi_block();
       time_stamp        = pEventInfo->event_ID()->time_stamp();
       bunch_crossing_id = pEventInfo->event_ID()->bunch_crossing_id();
       mu_val            = pEventInfo->averageInteractionsPerCrossing();
+#else
+      run_number        = pEventInfo->runNumber();
+      event_number      = pEventInfo->eventNumber();
+      lumi_block        = pEventInfo->lumiBlock();
+      time_stamp        = pEventInfo->timeStamp();
+      bunch_crossing_id = pEventInfo->bcid();
+      mu_val            = pEventInfo->averageInteractionsPerCrossing();
+#endif
     }
   
     if(m_provider->msg().level() <= MSG::VERBOSE){
@@ -373,31 +389,36 @@ protected:
 
     bool analyse = false;
   
+    // Check HLTResult
+
     for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
       const std::string& chainname = m_chainNames[ichain].head();
 
 
       //Only for trigger chains
       if ( chainname.find("L2")  == std::string::npos &&
-        chainname.find("EF")  == std::string::npos &&
-        chainname.find("HLT") == std::string::npos ) continue;
-
+	   chainname.find("EF")  == std::string::npos &&
+	   chainname.find("HLT") == std::string::npos ) continue;
+      
       if ( m_provider->msg().level() <= MSG::DEBUG ) {
         m_provider->msg(MSG::DEBUG) << "Chain "  << chainname
                                     << "\tpass " << (*m_tdt)->isPassed(chainname)
                                     << "\tpres " << (*m_tdt)->getPrescale(chainname) << endreq;
       }
-
+      
       if ( (*(m_tdt))->isPassed(chainname) || (*(m_tdt))->getPrescale(chainname) ) analyse = true;
-
+      
     }
     
     first = false;
 
-      
-    
+    if ( (*m_tdt)->ExperimentalAndExpertMethods()->isHLTTruncated() ) {
+      m_provider->msg(MSG::WARNING) << "HLTResult truncated, skipping event" << endreq;
+      return;
+    }
+
     if ( !this->m_keepAllEvents && !analyse ) {
-      m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endreq;
+      m_provider->msg(MSG::INFO) << "No chains passed unprescaled - not processing this event" << endreq;
       if(m_provider->msg().level() <= MSG::VERBOSE)
         m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endreq;
       return;
@@ -431,6 +452,10 @@ protected:
     /// get the offline vertices into our structure
 
     std::vector<TIDA::Vertex> vertices;
+    std::vector<TIDA::Vertex> vertices_rec;
+
+
+#ifndef XAODTRACKING_TRACKPARTICLE_H
 
     const VxContainer* primaryVtxCollection;
 
@@ -445,18 +470,56 @@ protected:
           for ( ; vtxitr != primaryVtxCollection->end(); ++vtxitr) {
             if ( (*vtxitr)->vxTrackAtVertex()->size()>0 ) {
               vertices.push_back( TIDA::Vertex( (*vtxitr)->recVertex().position().x(),
-                (*vtxitr)->recVertex().position().y(),
-                (*vtxitr)->recVertex().position().z(),
-                0,0,0,
-                (*vtxitr)->vxTrackAtVertex()->size() ) );
+						(*vtxitr)->recVertex().position().y(),
+						(*vtxitr)->recVertex().position().z(),
+						0,0,0,
+						(*vtxitr)->vxTrackAtVertex()->size() ) );
             }
           }
         }
-
+	
         // filter_vertex.setVertex(vertices);
       }
     }
 
+#else
+
+    //std::vector<TIDA::Vertex> vertices;
+    
+    m_provider->msg(MSG::INFO) << "fetching AOD Primary vertex container" << endreq;
+
+    const xAOD::VertexContainer* xaodVtxCollection = 0;
+
+    if ( m_provider->evtStore()->retrieve( xaodVtxCollection, "PrimaryVertices" ).isFailure()) {
+      m_provider->msg(MSG::WARNING) << "xAOD Primary vertex container not found with key " << "PrimaryVertices" <<  endreq;
+    }
+    
+    if ( xaodVtxCollection!=0 ) { 
+        
+      m_provider->msg(MSG::INFO) << "xAOD Primary vertex container " << xaodVtxCollection->size() <<  " entries" << endreq;
+
+      xAOD::VertexContainer::const_iterator vtxitr = xaodVtxCollection->begin();
+      for ( ; vtxitr != xaodVtxCollection->end(); vtxitr++ ) {
+	if ( (*vtxitr)->nTrackParticles()>0 ) {
+	  vertices.push_back( TIDA::Vertex( (*vtxitr)->x(),
+					    (*vtxitr)->y(),
+					    (*vtxitr)->z(),
+					    /// variances
+					    (*vtxitr)->covariancePosition()(Trk::x,Trk::x),
+					    (*vtxitr)->covariancePosition()(Trk::y,Trk::y),
+					    (*vtxitr)->covariancePosition()(Trk::z,Trk::z),
+					    (*vtxitr)->nTrackParticles(),
+					    /// quality
+					    (*vtxitr)->chiSquared(),
+					    (*vtxitr)->numberDoF() ) );
+	}
+      }
+    }
+
+
+#endif
+
+
     // std::cout << "here " << __LINE__ << std::endl;
 
     /// add the truth particles if needed
@@ -506,8 +569,9 @@ protected:
 
       // std::string& chainname = chains[ichain];
       const std::string& chainname = m_chainNames[ichain].head();
+      const std::string&       key = m_chainNames[ichain].tail();
+      const std::string&  vtx_name = m_chainNames[ichain].vtx();
 
-      const std::string& key = m_chainNames[ichain].tail();
 
       unsigned _decisiontype = TrigDefs::Physics;
       unsigned  decisiontype;
@@ -581,8 +645,8 @@ protected:
         // std::vector< Trig::Feature<TrigRoiDescriptor> > initRois = c->get<TrigRoiDescriptor>("forID", TrigDefs::alsoDeactivateTEs);
 
         std::vector< Trig::Feature<TrigRoiDescriptor> > initRois;
-
-	std::string roi_key = m_chainNames[ichain].roi();
+	
+        std::string roi_key = m_chainNames[ichain].roi();
 
 	if ( roi_key!="" ) { 
 	  initRois = c->get<TrigRoiDescriptor>(roi_key, decisiontype );
@@ -689,12 +753,62 @@ protected:
 
         if ( roiInfo ) delete roiInfo;
 
+	/// get vertex information 
+
+	/// now also add xAOD vertices
+
+	if ( vtx_name!="" ) { 
+
+	  m_provider->msg(MSG::INFO) << "\tFetch xAOD::VertexContainer for chain " << chainName << " with key " << vtx_name << endreq;
+
+	  std::vector< Trig::Feature<xAOD::VertexContainer> > xaodtrigvertices = c->get<xAOD::VertexContainer>(vtx_name);
+	  
+	  if ( xaodtrigvertices.empty() ) { 
+	    m_provider->msg(MSG::WARNING) << "\tNo xAOD::VertexContainer for chain " << chainName << " for key " << vtx_name << endreq;
+	  }
+	  else {
+	    
+	    m_provider->msg(MSG::INFO) << "\txAOD::VertexContainer found with size  " << xaodtrigvertices.size() << "\t" << vtx_name << endreq;
+	    
+	    for (  unsigned iv=0  ;  iv<xaodtrigvertices.size()  ;  iv++ ) {
+	      
+	      const xAOD::VertexContainer* vert = xaodtrigvertices[iv].cptr();
+	      
+	      m_provider->msg(MSG::INFO) << "\t" << iv << "  xAOD VxContainer for " << chainName << " " << vert << " key " << vtx_name << endreq;
+	      
+	      xAOD::VertexContainer::const_iterator vtxitr = vert->begin();
+	      
+	      for ( ; vtxitr != vert->end(); ++vtxitr) {
+		if ( (*vtxitr)->nTrackParticles()>0 ) {
+		  // vertices_rec.push_back( TIDA::Vertex( (*vtxitr)->x(),
+		  chain.back().addVertex( TIDA::Vertex( (*vtxitr)->x(),
+							(*vtxitr)->y(),
+							(*vtxitr)->z(),
+							/// variances
+							(*vtxitr)->covariancePosition()(Trk::x,Trk::x),
+							(*vtxitr)->covariancePosition()(Trk::y,Trk::y),
+							(*vtxitr)->covariancePosition()(Trk::z,Trk::z),
+							(*vtxitr)->nTrackParticles(),
+							/// quality
+							(*vtxitr)->chiSquared(),
+							(*vtxitr)->numberDoF() ) );
+		}
+	      }
+	    }
+	    
+	  }
+
+	}  /// retrieve online vertices
+
       }
 
       if(m_provider->msg().level() <= MSG::VERBOSE) {
         m_provider->msg(MSG::VERBOSE) << "event: " << *m_event << endreq;
       }
 
+
+      /// now loop pver the rois (again) 
+
       for ( unsigned  iroi=0 ; iroi<chain.size() ; iroi++ ) {
 
         m_selectorRef->clear();
@@ -957,13 +1071,26 @@ protected:
 	  m_associator->match( ref_tracks, test_tracks );
 	  
 	  _analysis->execute( ref_tracks, test_tracks, m_associator );
+	  
+	  if ( vtx_name!="" ) { 
+	    /// get vertices for this roi - have to copy to a vector<Vertex*>
+	    std::vector<TIDA::Vertex> vr = chain.rois().at(iroi).vertices();
+	    std::vector<TIDA::Vertex*> vtx_rec;    
+	    for ( unsigned iv=0 ; iv<vr.size() ; iv++ ) vtx_rec.push_back( &vr[iv] );
+
+	    std::vector<TIDA::Vertex*> vtx;
+	    for ( unsigned iv=0 ; iv<vertices.size() ; iv++ ) vtx.push_back( &vertices[iv] );
+
+	    _analysis->execute_vtx( vtx, vtx_rec );
+	  }
+
 	}
  
 	if ( _analysis->debug() ) { 
 	  m_provider->msg(MSG::INFO) << "Missing track for " << m_chainNames[ichain]  
-				     << "\trun "   << run_number 
-				     << "\tevent " << event_number 
-				     << "\tlb "    << lumi_block << endreq;     
+				     << "\trun "             << run_number 
+				     << "\tevent "           << event_number 
+				     << "\tlb "              << lumi_block << endreq;     
 	}
 
       }
@@ -975,6 +1102,7 @@ protected:
   }
 
 
+
   virtual void book() {
 
     if(m_provider->msg().level() <= MSG::VERBOSE)
@@ -1053,6 +1181,7 @@ protected:
         if ( chainName.extra()!="" )   selectChains[iselected] += ":"+chainName.extra();
         if ( chainName.element()!="" ) selectChains[iselected] += ":"+chainName.element();
         if ( chainName.roi()!="" )     selectChains[iselected] += ":"+chainName.roi();
+        if ( chainName.vtx()!="" )     selectChains[iselected] += ":"+chainName.vtx();
         if ( !chainName.passed() )     selectChains[iselected] += ";DTE";
 
         /// replace wildcard with actual matching chains ...
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h
new file mode 100644
index 0000000000000000000000000000000000000000..7a8de9902b43a4dd16bb6ca65e70de0d3e32684a
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h
@@ -0,0 +1,112 @@
+// emacs: this is -*- c++ -*-
+//
+//   @file    VtxAnalysis.h        
+//
+//                   
+//  
+//   Copyright (C) 2015 M.Sutton (sutt@cern.ch)    
+//
+//   $Id: VtxAnalysis.h, v0.0   Sun  9 Aug 2015 00:02:23 CEST sutt $
+
+
+#ifndef  VTXANALYSIS_H
+#define  VTXANALYSIS_H
+
+#include <iostream>
+// #include <map>
+#include <vector>
+
+#include "TrigInDetAnalysis/VertexAnalysis.h"
+#include "TrigInDetAnalysis/TIDDirectory.h"
+
+#include "TH1F.h"
+#include "TProfile.h"
+
+class VtxAnalysis : public VertexAnalysis {
+
+public:
+
+  VtxAnalysis( const std::string& n );
+
+  virtual ~VtxAnalysis() { if ( mdir ) delete mdir; } 
+
+  void initialise();
+
+  void execute(const std::vector<TIDA::Vertex*>& vtx0,
+	       const std::vector<TIDA::Vertex*>& vtx1 );
+  
+  void finalise();
+
+  void addHistogram( TH1* h ) {
+    //    std::string name = h->GetName();
+    //   m_histos.insert( std::map<std::string, TObject*>::value_type( name, h) );
+    m_histos.push_back( h );
+  }
+
+
+  void addHistogram( TProfile* h ) {
+    //    std::string name = h->GetName();
+    //   m_histos.insert( std::map<std::string, TObject*>::value_type( name, h) );
+    m_profs.push_back( h );
+  }
+
+  //  void addHistogram( TProfile* h ) {
+  //    std::string name = h->GetName();
+  //    m_effhistos.insert( std::map<std::string, TProfile*>::value_type( name, h) );
+  //  }
+
+  std::vector<TH1*>       objects() { return m_histos; }
+  std::vector<TProfile*>  profs()   { return m_profs; }
+
+private:
+
+  //  std::map<std::string, TObject*>  m_histos;
+  std::vector<TH1*>       m_histos;
+  std::vector<TProfile*>  m_profs;
+  //  std::map<std::string, TProfile*> m_effhistos;
+
+private:
+
+  bool m_initialised;
+
+  TIDDirectory* mdir;
+
+  TH1F*    hnvtx;
+  TH1F*    hzed;
+  TH1F*    hntrax;
+
+  TH1F*    hnvtx_rec;
+  TH1F*    hzed_rec;
+  TH1F*    hntrax_rec;
+
+  TH1F*    hzed_res;
+
+  TProfile* rdz_vs_zed;
+  TProfile* rdz_vs_ntrax;
+  TProfile* rdz_vs_nvtx;
+  TProfile* rdz_vs_mu;
+
+  TProfile* eff_zed;
+  TProfile* eff_ntrax;
+  TProfile* eff_nvtx;
+  TProfile* eff_mu;
+ 
+};
+
+
+inline std::ostream& operator<<( std::ostream& s, const VtxAnalysis&  ) { 
+  return s;
+}
+
+
+#endif  // VTXANALYSIS_H 
+
+
+
+
+
+
+
+
+
+
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements
index ee57b14403db5ce18d781e2f33edf009d1007178..d79e735f7103f37925d5fedb209e586dac13d0e8 100755
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements
@@ -1,6 +1,5 @@
 package TrigInDetAnalysisExample
 
-
 # ============================================================================================
 public
 
@@ -29,6 +28,7 @@ use     tauEvent                tauEvent-*                      Reconstruction
 
 use     AtlasHepMC              AtlasHepMC-*                    External
 use     EventInfo               EventInfo-*             	Event
+use     xAODEventInfo           xAODEventInfo-*             	Event/xAOD
 use 	GeneratorObjects 	GeneratorObjects-* 		Generators
 use     McParticleEvent         McParticleEvent-*               PhysicsAnalysis/TruthParticleID
 
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx
index 7e9e7199475ec3839d51f159da27c8110fb22ed6..243a32539ce7ce11f382e7e0e7ddab6680663514 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx
@@ -22,6 +22,8 @@
 
 #include "EventInfo/EventInfo.h"
 #include "EventInfo/EventID.h"
+#include "xAODEventInfo/EventInfo.h"
+
 
 #include "TrigInDetAnalysis/TIDDirectory.h"
 #include "TrigInDetAnalysisUtils/TIDARoiDescriptorBuilder.h"
@@ -194,9 +196,9 @@ void AnalysisConfig_Ntuple::loop() {
 
 		std::vector<std::string> configuredChains  = (*m_tdt)->getListOfTriggers("L2_.*, EF_.*, HLT_.*");
 
-		m_provider->msg(MSG::DEBUG) << "" << configuredChains.size() << " Configured Chains" << "" << endreq;
+		m_provider->msg(MSG::INFO) << "" << configuredChains.size() << " Configured Chains" << "" << endreq;
 		for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) { 
-		  m_provider->msg(MSG::DEBUG) << "" << "Chain " << configuredChains[i] << "   (ACN)" << endreq;
+		  m_provider->msg(MSG::INFO) << "" << "Chain " << configuredChains[i] << "   (ACN)" << endreq;
 		  configuredHLTChains.insert( configuredChains[i] );
 		  
 		}
@@ -292,7 +294,12 @@ void AnalysisConfig_Ntuple::loop() {
 	m_event->clear();
 
 
+#if 0
 	const EventInfo* pEventInfo = 0;
+#else
+	const xAOD::EventInfo* pEventInfo = 0;
+#endif
+
 	unsigned run_number         = 0;
 	unsigned event_number       = 0;
 
@@ -306,12 +313,21 @@ void AnalysisConfig_Ntuple::loop() {
 		m_provider->msg(MSG::DEBUG) << "Failed to get EventInfo " << endreq;
 	} 
 	else {
+#if 0
 		run_number        = pEventInfo->event_ID()->run_number();
 		event_number      = pEventInfo->event_ID()->event_number();
 		lumi_block        = pEventInfo->event_ID()->lumi_block();
 		time_stamp        = pEventInfo->event_ID()->time_stamp();
 		bunch_crossing_id = pEventInfo->event_ID()->bunch_crossing_id();
 		mu_val            = pEventInfo->averageInteractionsPerCrossing();
+#else
+		run_number        = pEventInfo->runNumber();
+		event_number      = pEventInfo->eventNumber();
+		lumi_block        = pEventInfo->lumiBlock();
+		time_stamp        = pEventInfo->timeStamp();
+		bunch_crossing_id = pEventInfo->bcid();
+		mu_val            = pEventInfo->averageInteractionsPerCrossing();
+#endif
 	}
 
 	m_provider->msg(MSG::INFO) << "run "     << run_number 
@@ -350,6 +366,8 @@ void AnalysisConfig_Ntuple::loop() {
 		<< endreq;
 
 	
+	
+
 	std::vector<std::string> _conf = (*m_tdt)->getListOfTriggers("HLT_.*");
 	
 	m_provider->msg(MSG::INFO) << endreq;
@@ -359,8 +377,8 @@ void AnalysisConfig_Ntuple::loop() {
 	for ( unsigned ic=0 ; ic<_conf.size() ; ic++ ) { 
 	  bool p = (*m_tdt)->isPassed( _conf[ic] );
 	  
-	  if ( p ) m_provider->msg(MSG::INFO) << "" << " Configured Chain " << _conf[ic] << " " << p << "" << endreq;
-	  else     m_provider->msg(MSG::INFO)               << " Configured Chain " << _conf[ic] << " " << p           << endreq;
+	  if ( p ) m_provider->msg(MSG::INFO) << "" << " Configured Chain " << _conf[ic] << " " << p << "\tpassed <<<<" << "" << endreq;
+	  else     m_provider->msg(MSG::INFO)               << " Configured Chain " << _conf[ic] << " " << p << "\t not passed" << endreq;
 
 	}
 
@@ -878,13 +896,6 @@ void AnalysisConfig_Ntuple::loop() {
 	  m_doElectrons_tightLH,   m_doElectrons_mediumLH,   m_doElectrons_looseLH };
 
 	for ( int ielec=0 ; ielec<7 ; ielec++ ) {
-	  /// Fixme: not sure if this code is correct - it always adds selectorRef.tracks() 
-	  ///        so presumbably only ever *one* of the m_doElectrons can be set, otherwise 
-	  ///        something is messed up here
-	  ///        get electrons
-	  //
-	  //  CK: Maybe just add a check that you don't have more than one m_doElectrons as
-	  //      as true, and throw an error if there is more than one as true?
 	  if ( ElectronTypes[ielec] ) {   
 	    Nel = processElectrons( selectorRef, ielec ); ///
 	    m_event->addChain( ElectronRef[ielec] );
@@ -941,10 +952,8 @@ void AnalysisConfig_Ntuple::loop() {
 	  m_doTaus_tight_1Prong,   m_doTaus_medium_1Prong,   m_doTaus_loose_1Prong };
 
 	for ( int itau=0 ; itau<4 ; itau++ ) {
-	  // CK: See comments for doElectrons section above for possible issues with the looping
-	  //     functionality here
 	  if ( TauTypes_1Prong[itau] ) {
-	    Ntau1 = processTaus( selectorRef,false, 20000, itau  );
+	    Ntau1 = processTaus( selectorRef, false, itau, 25000 );
 	    m_event->addChain( TauRef_1Prong[itau] );
 	    m_event->back().addRoi(TIDARoiDescriptor(true));
 	    m_event->back().back().addTracks(selectorRef.tracks());
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx
index 9e020615826919de25e3a176e8e9cf62e6ded0c2..05b02732f3b787c1804b46db2e8b581747a989c9 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx
@@ -8,10 +8,12 @@
 
 
 Analysis_Tier0::Analysis_Tier0(const std::string& name, double pTCut, double etaCut, double d0Cut, double z0Cut) :
-  TrackAnalysis(name), m_pTCut(pTCut), m_etaCut(etaCut), m_d0Cut(d0Cut), m_z0Cut(z0Cut), m_debug(false) {                                   ;}
+  TrackAnalysis(name), m_pTCut(pTCut), m_etaCut(etaCut), m_d0Cut(d0Cut), m_z0Cut(z0Cut), m_debug(false) {  }
 
 void Analysis_Tier0::initialise() {
 
+  //  std::cout << "Analysis_Tier0::initialise() name " << name() << std::endl; 
+
   m_debug = false;
 
   h_chain = new TH1D( "Chain", name().c_str(), 1, 0, 1 );
@@ -232,6 +234,23 @@ void Analysis_Tier0::initialise() {
   //  addHistogram( h2d_d0vsphi ); 
   //  addHistogram( h2d_d0vsphi_rec ); 
 
+  m_vtxanal = 0;
+
+#if 0
+  /// vertex analyses if required ...
+  if ( name().find("vtx")!=std::string::npos || name().find("Vtx")!=std::string::npos ) { 
+    m_vtxanal = new VtxAnalysis("VTX");
+    store().insert( m_vtxanal, "VTX" );
+
+    /// initialise the vtx analysis
+    m_vtxanal->initialise();
+
+    /// store the historams
+    for ( unsigned i=0 ; i<m_vtxanal->objects().size() ; i++ ) addHistogram( m_vtxanal->objects()[i] );
+    for ( unsigned i=0 ; i<m_vtxanal->profs().size() ; i++ )   addHistogram( m_vtxanal->profs()[i] );
+  }
+#endif
+
 }
 
 
@@ -393,8 +412,14 @@ void Analysis_Tier0::execute(const std::vector<TIDA::Track*>& referenceTracks,
 
 
 
-void Analysis_Tier0::finalise() {
 
+void Analysis_Tier0::execute_vtx(const std::vector<TIDA::Vertex*>& vtx0, 
+				 const std::vector<TIDA::Vertex*>& vtx1 ) { 
+  if ( m_vtxanal ) m_vtxanal->execute( vtx0, vtx1 );
+}
+
+void Analysis_Tier0::finalise() {
+  if ( m_vtxanal ) m_vtxanal->finalise();
 } 
 
 
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx
index a83f5c7d481256965e1cbce3c942b5870c9ce082..8dc43bf2d2e9fc329417fe96899dbaa55129d351 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx
@@ -154,6 +154,13 @@ StatusCode TrigTestBase::book(bool newEventsBlock, bool newLumiBlock, bool newRu
   msg(MSG::INFO) << "TrigTestBase::book() " << gDirectory->GetName() << endreq;
 
 
+#ifdef ManagedMonitorToolBase_Uses_API_201401
+  bool newEventsBlock = newEventsBlockFlag();
+  bool newLumiBlock   = newLumiBlockFlag();
+  bool newRun         = newRunFlag();
+#endif
+
+
   msg(MSG::DEBUG) << "TrigTestBase::book() SUTT buildNtuple " << m_buildNtuple
       << "\tNewEventBlock " << newEventsBlock
       << "\tNewLumiBlock "  << newLumiBlock
@@ -428,9 +435,12 @@ StatusCode TrigTestBase::proc(bool /*endOfEventsBlock*/, bool /*endOfLumiBlock*/
 #endif
   // StatusCode TrigTestBase::procHistograms() {
 
+#ifdef ManagedMonitorToolBase_Uses_API_201401
+  bool endOfRun       = endOfRunFlag();
+#endif
 
   msg(MSG::INFO) << " ----- enter proc() ----- " << endreq;
-  if ( m_initialisePerRun && endOfRun) {
+  if ( m_initialisePerRun && endOfRun ) {
     for ( unsigned i=0 ; i<m_sequences.size() ; i++ ) m_sequences[i]->finalize();
     m_fileopen = false;
   }
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx
index 16084873143520303dc9fd3a8ac7448b1bed958f..9e3e7c1c78164b56fc7c863f3a7772b8f1e09a14 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx
@@ -153,6 +153,11 @@ StatusCode TrigTestMonToolAC::book(bool newEventsBlock, bool newLumiBlock, bool
 
   msg(MSG::INFO) << "TrigTestMonToolAC::book() " << gDirectory->GetName() << endreq;
 
+#ifdef ManagedMonitorToolBase_Uses_API_201401
+  bool newEventsBlock = newEventsBlockFlag();
+  bool newLumiBlock   = newLumiBlockFlag();
+  bool newRun         = newRunFlag();
+#endif
 
   msg(MSG::DEBUG) << "TrigTestMonToolAC::book() SUTT buildNtuple " << m_buildNtuple 
 		  << "\tNewEventBlock " << newEventsBlock 
@@ -324,6 +329,10 @@ StatusCode TrigTestMonToolAC::proc() {
 StatusCode TrigTestMonToolAC::proc(bool /* endOfEventsBlock*/, bool /* endOfLumiBlock*/, bool endOfRun) {
 #endif
 
+#ifdef ManagedMonitorToolBase_Uses_API_201401
+  bool endOfRun       = endOfRunFlag();
+#endif
+
   msg(MSG::DEBUG) << " ----- enter proc() ----- " << endreq;
 
   msg(MSG::DEBUG) << " ----- initialisePerRun: " <<  m_initialisePerRun << "\tendOfRun: " << endOfRun << "  -----" << endreq;
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx
index 01eec2a770558ba5abb122af3f2939341c2fb40a..a9789b5549b7d9268fff79995e77ee1ddf4b20e7 100644
--- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx
@@ -51,12 +51,14 @@ StatusCode TrigTestPhysValMon::bookHistograms(bool newEventsBlock, bool newLumiB
   
   ATH_MSG_DEBUG("TrigTestPhysValMon::bookHistograms() " << gDirectory->GetName());
     
-  ATH_MSG_INFO("TrigTestPhysValMon::bookHistograms() " 
-	       << "\tbuildNtuple "   << m_buildNtuple
-	       << "\tNewEventBlock " << newEventsBlock 
-	       << "\tNewLumiBlock "  << newLumiBlock 
-	       << "\tNewRun "        << newRun);
+
+  ATH_MSG_INFO("TrigTestPhysValMon::bookHistograms()"); 
+  //	       << "\tbuildNtuple "   << m_buildNtuple
+  //	       << "\tNewEventBlock " << newEventsBlock 
+  //	       << "\tNewLumiBlock "  << newLumiBlock 
+  //	       << "\tNewRun "        << newRun);
   
+
 #ifdef ManagedMonitorToolBase_Uses_API_201401
   StatusCode sc = TrigTestBase::book();
 #else
diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..bdb82ff5727f3e7b98026d5678cce4fd2abad839
--- /dev/null
+++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx
@@ -0,0 +1,150 @@
+//
+//   @file    VtxAnalysis.cxx         
+//   
+//
+//   @author M.Sutton
+// 
+//   Copyright (C) 2015 M.Sutton (sutt@cern.ch)    
+//
+//   $Id: VtxAnalysis.cxx, v0.0   Sun  9 Aug 2015 21:53:46 CEST sutt $
+
+
+#include "TrigInDetAnalysisExample/VtxAnalysis.h"
+
+#include "TrigInDetAnalysisUtils/VertexMatcher.h"
+
+
+VtxAnalysis::VtxAnalysis( const std::string& n ) : VertexAnalysis( n ), m_initialised(false), mdir(0) { } 
+
+
+void VtxAnalysis::initialise() { 
+
+  m_initialised = true;
+
+  //  std::cout << "VtxAnalysis::initialise() " << name() << std::endl;
+
+
+  mdir = new TIDDirectory(name());
+  mdir->push();
+
+  hnvtx   = new TH1F( "nvtx", ";number of vertices",   100, -0.5,  100.5   );
+  hzed    = new TH1F( "zed",   ";vtx z [mm]",       200, -300,   300   );
+  hntrax  = new TH1F( "ntrax", ";number of tracks", 201,   -0.5, 200.5 );
+
+  addHistogram( hnvtx );
+  addHistogram( hzed );
+  addHistogram( hntrax );
+
+
+  hnvtx_rec  = new TH1F( "nvtx_rec",  ";number of vertices",   100, -0.5,  100.5   );
+  hzed_rec   = new TH1F( "zed_rec",   ";vtx z [mm]",       200, -300,   300   );
+  hntrax_rec = new TH1F( "ntrax_rec", ";number of tracks", 201,   -0.5, 200.5 );
+
+  addHistogram( hnvtx_rec );
+  addHistogram( hzed_rec );
+  addHistogram( hntrax_rec );
+
+  hzed_res = new TH1F( "zed_res", "Delta z [mm]", 400, -10, 10 );
+
+  addHistogram( hzed_res );
+
+  rdz_vs_zed    = new TProfile(   "rdz_vs_zed",   "rdz_vs_zed; vtx z [mm];z residual [mm]",          100,   -300,    300 ); 
+  rdz_vs_ntrax  = new TProfile( "rdz_vs_ntrax", "rdz_vs_ntrax;number of tracks;z residual [mm]",     200,   -0.5,  200.5 ); 
+  rdz_vs_nvtx   = new TProfile(  "rdz_vs_nvtx",  "rdz_vs_nvtx;number of vertices;z residual [mm]",    51, -0.125, 50.125 );
+
+  addHistogram( rdz_vs_zed );
+  addHistogram( rdz_vs_ntrax );
+  addHistogram( rdz_vs_nvtx );
+ 
+  //  rdz_vs_mu     = new TProfile( "rdz_vs_mu",    30,     0,    30,    400, -20, 20 ); 
+
+  eff_zed   = new TProfile( "zed_eff", "zed_eff;efficiency [%];offline vtx z [mm]",     200, -300,   300   );
+  eff_ntrax = new TProfile( "ntrax_eff", "ntrax_eff;number of tracks;efficiency [%]",   201,   -0.5, 200.5 );
+  eff_nvtx  = new TProfile( "nvtx_eff",  "nvtx_eff;number of vertices;efficiency [%]",  100, -0.5,  100.5   );
+  //  eff_mu    = new Efficiency( hmu, "mu_eff" );
+ 
+  addHistogram( eff_zed );
+  addHistogram( eff_ntrax );
+  addHistogram( eff_nvtx );
+
+  mdir->pop();
+
+}
+
+
+void VtxAnalysis::execute( const std::vector<TIDA::Vertex*>& vtx0,
+			       const std::vector<TIDA::Vertex*>& vtx1 ) { 
+
+
+  if ( !m_initialised ) return;
+
+  //  if ( vtx1.size()<2 ) return;
+
+#if 1
+    std::cout << "VtxAnalysis::execute() " << name()
+	      << "\tvtx0.size() " << vtx0.size()
+	      << "\tvtx1.size() " << vtx1.size()
+	      << std::endl;
+#endif
+
+
+    VertexMatcher m("vtx_matcher", 10 );
+
+    m.match( vtx0, vtx1 );
+
+    hnvtx->Fill( vtx0.size() );
+    hnvtx_rec->Fill( vtx1.size() );
+    
+    //    for ( unsigned i=0 ; i<vtx0.size() ; i++ ) { 
+    for ( unsigned i=0 ; i<vtx0.size() ; i++ ) { 
+
+      if ( i>0 ) break;
+
+      std::cout << i << "\tref z " << vtx0[i]->z();
+
+      hzed->Fill( vtx0[i]->z() );
+      hntrax->Fill( vtx0[i]->Ntracks() );
+
+      const TIDA::Vertex* mv = m.matched( vtx0[i] ); 
+
+      if ( mv ) { 
+
+	std::cout << "\ttest z " << mv->z() << "  : delta z " << (mv->z()-vtx0[i]->z()) << std::endl;
+      
+	/// ah ha ! can fill some silly old histograms here 
+	/// ...
+	
+	hzed_rec->Fill( mv->z() );
+	hntrax_rec->Fill( mv->Ntracks() );
+
+	hzed_res->Fill( mv->z() - vtx0[i]->z() );
+       
+	rdz_vs_zed->Fill(   vtx0[i]->z(),       mv->z() - vtx0[i]->z() );
+	rdz_vs_ntrax->Fill( vtx0[i]->Ntracks(), mv->z() - vtx0[i]->z() );
+	rdz_vs_nvtx->Fill( vtx0.size(),  mv->z() - vtx0[i]->z() ); /// this isn't really legitimate
+
+	eff_zed->Fill( vtx0[i]->z(), 1 );
+	eff_ntrax->Fill( vtx0[i]->Ntracks(), 1 );
+	eff_nvtx->Fill( vtx0.size(), 1 );
+
+      }
+      else {
+	std::cout << "\t" << "------" << std::endl;
+ 
+	eff_zed->Fill( vtx0[i]->z(), 0 );
+	eff_ntrax->Fill( vtx0[i]->Ntracks(), 0 );
+	eff_nvtx->Fill( vtx0.size(), 0 );
+	
+      }
+      
+    }
+
+}
+
+
+
+  
+void VtxAnalysis::finalise() { 
+  std::cout << "VtxAnalysis::finalise() " << name() << std::endl;
+}
+