diff --git a/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx b/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx
index 76c4c184f65b473d39641ed102394c510f7fbc60..54bb43d4b5a9c569d9a16f9df67321ec4efa68b4 100755
--- a/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx
+++ b/Trigger/TrigMonitoring/TrigBjetMonitoring/src/HLTBjetMonTool.cxx
@@ -644,6 +644,8 @@ StatusCode HLTBjetMonTool::book(){
     } // MCflag
     */
 
+    ATH_MSG_DEBUG("  ========= Start retrival of Offline histograms  ========== ");
+
     std::string HistDir = "/Offline";
     std::string HistExt = "";
     // Get offline PV - non FTK
@@ -652,7 +654,7 @@ StatusCode HLTBjetMonTool::book(){
     const xAOD::VertexContainer* offlinepv = 0;
     if ( evtStore()->contains<xAOD::VertexContainer>("PrimaryVertices") ) {
       ATH_CHECK( evtStore()->retrieve(offlinepv, "PrimaryVertices") );
-      ATH_MSG_DEBUG("RETRIEVED OFFLINE PV  - size: " << offlinepv->size());
+      ATH_MSG_DEBUG("RETRIEVED OFFLINE standard PV  - size: " << offlinepv->size());
       if ( offlinepv->size() ) {
 	Eofflinepv = true;
 	offlinepvz = offlinepv->front()->z();
@@ -677,7 +679,7 @@ StatusCode HLTBjetMonTool::book(){
 	EofflinepvFTK = true;
 	offlinepvzFTK = offlinepvFTK->front()->z();
 	if (EofflinepvFTK) ATH_MSG_DEBUG(" 1st zPV FTK a la Carlo: " << offlinepvzFTK);
-	/*
+	/* for the moment FTK offline vertices are not moniored
 	hist("nPV"+HistExt,"HLT/BjetMon/Shifter"+HistDir)->Fill(offlinepvFTK->size());
 	for (unsigned int j = 0; j<offlinepvFTK->size(); j++){
 	  hist("PVxFTK"+HistExt,"HLT/BjetMon/Shifter"+HistDir)->Fill((*(offlinepvFTK))[j]->x());
@@ -689,13 +691,12 @@ StatusCode HLTBjetMonTool::book(){
     } // evtStore
     //
 
-
-
-    ATH_MSG_DEBUG(" Offline histograms are stored successfully !");
+    ATH_MSG_DEBUG(" ======== Offline histograms are retrieved successfully ! ==== Start online histograms to retrieve ====== ");
 
     // Get online combinations
 
     bool SplitKey;
+    bool FTKchain;
 
     //  unsigned int ichain = 0;
     // Loop on trigger items
@@ -728,9 +729,12 @@ StatusCode HLTBjetMonTool::book(){
 	m_trackKey  = "InDetTrigTrackingxAODCnv_Bjet_IDTrig";
       }
       // FTK input chains: John Baines and Julie Hart 
+      FTKchain = false;
       std::size_t found1 = trigItem.find("FTK");
       if (found1!=std::string::npos) {
-	m_priVtxKey = "HLT_PrimVertexFTK";
+	FTKchain = true;
+	//	m_priVtxKey = "HLT_PrimVertexFTK";
+	m_priVtxKey = "PrimVertexFTK";  // Mark Sutton 17.09.17 
 	m_trackKey  = "InDetTrigTrackingxAODCnv_Bjet_FTK_IDTrig";
 	std::size_t found2 = trigItem.find("FTKRefit");
         if (found2!=std::string::npos) {
@@ -747,7 +751,7 @@ StatusCode HLTBjetMonTool::book(){
 	m_jetKey = "GSCJet";
       } // if found4
       ATH_MSG_DEBUG( " Trigger chain name: " << trigItem << " m_jetKey: " << m_jetKey << " m_priVtxKey: " << m_priVtxKey 
-		    << " m_trackKey: " << m_trackKey << " SplitKey: " << SplitKey );
+		    << " m_trackKey: " << m_trackKey << " SplitKey: " << SplitKey << " FTKchain: " << FTKchain);
       ATH_MSG_DEBUG("PROCESSING TRIGITEM  -  " << trigItem);
       // Set flag MuJet
       bool MuJet = false;
@@ -760,6 +764,31 @@ StatusCode HLTBjetMonTool::book(){
       bool HistTrack = !MuJet;
       bool HistBjet = !MuJet;
 
+      float m_zPrmVtx = 0.; // used for muon-jets
+
+      // Temporary work-around to retrieve online PV for FTK chains suggested by John Baines 2017/09/12
+      // Dummy vertices not treated here for the moment
+
+      if (FTKchain) {
+        const xAOD::VertexContainer * onlinepvFTK = 0;
+        if ( evtStore()->contains<xAOD::VertexContainer>("HLT_xAOD__VertexContainer_PrimVertexFTK") ) {
+          ATH_CHECK( evtStore()->retrieve(onlinepvFTK, "HLT_xAOD__VertexContainer_PrimVertexFTK") );
+          ATH_MSG_DEBUG("RETRIEVED FTK PV from evtStore -   size: " << onlinepvFTK->size());
+          if( not onlinepvFTK->empty()) {
+	    int iVsize = onlinepvFTK->size();
+	    for (int iV = 0; iV < iVsize; iV++){
+	      ATH_MSG_DEBUG("    FTK evtStore Online PV -  iV: " << iV << " z[iV]: " << (*(onlinepvFTK))[iV]->z() << " type: " << (*(onlinepvFTK))[iV]->vertexType() );
+	    } // for iV
+	    if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->x());
+	    if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->y());
+	    if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->z());
+	    if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepvFTK->size());
+	    m_zPrmVtx = (*(onlinepvFTK))[0]->z();
+	    if (EofflinepvFTK && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepvFTK))[0]->z()-offlinepvzFTK);
+          } // not onlinepvFTK->empty()
+	} // if contains
+      } // FTK chain
+  
       Trig::FeatureContainer fc = m_trigDec->features(trigItem);
       const std::vector< Trig::Combination >& bjetCombs = fc.getCombinations();
       ATH_MSG_DEBUG("RETRIEVED " << bjetCombs.size() << " COMBINATIONS FOR "  << trigItem);
@@ -769,58 +798,62 @@ StatusCode HLTBjetMonTool::book(){
       for( bjetComb = bjetCombs.begin(); bjetComb != bjetCombs.end(); ++bjetComb ) {
 	const Trig::Combination& comb = *bjetComb;
 	ATH_MSG_DEBUG("------------ NEW COMBINATION ------------");
-	float m_zPrmVtx = 0.; // used for muon-jets
-
-	// Get online PV
-	bool DummyVtx = false;
-	const std::vector< Trig::Feature<xAOD::VertexContainer> > onlinepvs = comb.get<xAOD::VertexContainer>(m_priVtxKey);
-	ATH_MSG_DEBUG("RETRIEVED PV  -   size: " << onlinepvs.size());
-	if ( not onlinepvs.empty() ) {
-	  const xAOD::VertexContainer* onlinepv = onlinepvs[0].cptr();
-	  ATH_MSG_DEBUG("   for VertexContainer: " << m_priVtxKey << " nVert: " << onlinepv->size());
-	  if( not onlinepv->empty()) {
-            if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA)
-	      if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x());
-	      if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y());
-	      if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z());
-	      m_zPrmVtx = (*(onlinepv))[0]->z();
-	      if (Eofflinepv && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()-offlinepvz);
-	      ATH_MSG_DEBUG("         Online PV -   z[0]: " << (*(onlinepv))[0]->z());
-	    } // if PV not dummy
-	    else {
-	      DummyVtx = true;
-	      ATH_MSG_DEBUG("  Dummy Vertex found: DummyVtx = " << DummyVtx << " m_jetKey = " << m_jetKey << " HistExt = " << HistExt << " m_priVtxKey " << m_priVtxKey );
-	      ATH_MSG_DEBUG(" Online dummy PV - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x()
-			   << " y[0]: " << (*(onlinepv))[0]->y() <<  " z[0]: " << (*(onlinepv))[0]->z() );
-	      int dummyflag = -1;
-	      if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(dummyflag);
-	      //	      continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN)
-	    } // else
-	    if (!DummyVtx && HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size());
-	  }  // if onlinepv not empty
-	} // if onlinepvs not empty
-	if ( SplitKey && DummyVtx ) {
-	  // for SplitJets and DummyVtx monitor Vtx with Histogram algorithm
-	  const std::vector< Trig::Feature<xAOD::VertexContainer> >onlinepvsd = comb.get<xAOD::VertexContainer>("EFHistoPrmVtx");
-	  ATH_MSG_DEBUG("RETRIEVED PV with Histo algo for Split chains when Dummy vtx found with xPrimVx algo-   size: " << onlinepvsd.size());
-	  if ( not onlinepvsd.empty() ) {
-	    const xAOD::VertexContainer* onlinepv = onlinepvsd[0].cptr();
-	    ATH_MSG_DEBUG(" for VertexContainer EFHistoPrmVtx  - nVert: " << onlinepv->size());
+	m_zPrmVtx = 0.; // used for muon-jets
+
+	if (!FTKchain) {
+
+	  // Get online PV
+	  bool DummyVtx = false;
+	  const std::vector< Trig::Feature<xAOD::VertexContainer> > onlinepvs = comb.get<xAOD::VertexContainer>(m_priVtxKey);
+	  ATH_MSG_DEBUG("RETRIEVED PV  -   size: " << onlinepvs.size());
+	  if ( not onlinepvs.empty() ) {
+	    const xAOD::VertexContainer* onlinepv = onlinepvs[0].cptr();
+	    ATH_MSG_DEBUG("   for VertexContainer: " << m_priVtxKey << " nVert: " << onlinepv->size());
 	    if( not onlinepv->empty()) {
 	      if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA)
-		if(HistPV) hist("PVx_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x());
-		if(HistPV) hist("PVy_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y());
-		if(HistPV) hist("PVz_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z());
-		if(HistPV) hist("nPV_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size());
-		ATH_MSG_DEBUG(" Dummy PV using Histogram algorithm - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x()
+		if(HistPV) hist("PVx_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x());
+		if(HistPV) hist("PVy_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y());
+		if(HistPV) hist("PVz_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z());
+		m_zPrmVtx = (*(onlinepv))[0]->z();
+		if (Eofflinepv && HistPV) hist("diffzPV0offPVon"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z()-offlinepvz);
+		ATH_MSG_DEBUG("         Online PV -   z[0]: " << (*(onlinepv))[0]->z());
+	      } // if PV not dummy
+	      else {
+		DummyVtx = true;
+		ATH_MSG_DEBUG("  Dummy Vertex found: DummyVtx = " << DummyVtx << " m_jetKey = " << m_jetKey << " HistExt = " << HistExt << " m_priVtxKey " << m_priVtxKey );
+		ATH_MSG_DEBUG(" Online dummy PV - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x()
 			     << " y[0]: " << (*(onlinepv))[0]->y() <<  " z[0]: " << (*(onlinepv))[0]->z() );
-	      } // if VertexType
-	    } // if not onlinepv
-	  } // if not onlinepvs
-	  continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN)
-	} // if DummyVtx
-
-	ATH_MSG_DEBUG(" PV histograms are investigated ");
+		int dummyflag = -1;
+		if(HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(dummyflag);
+		//	      continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN)
+	      } // else
+	      if (!DummyVtx && HistPV) hist("nPV_tr"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size());
+	    }  // if onlinepv not empty
+	  } // if onlinepvs not empty
+	  if ( SplitKey && DummyVtx ) {
+	    // for SplitJets and DummyVtx monitor Vtx with Histogram algorithm
+	    const std::vector< Trig::Feature<xAOD::VertexContainer> >onlinepvsd = comb.get<xAOD::VertexContainer>("EFHistoPrmVtx");
+	    ATH_MSG_DEBUG("RETRIEVED PV with Histo algo for Split chains when Dummy vtx found with xPrimVx algo-   size: " << onlinepvsd.size());
+	    if ( not onlinepvsd.empty() ) {
+	      const xAOD::VertexContainer* onlinepv = onlinepvsd[0].cptr();
+	      ATH_MSG_DEBUG(" for VertexContainer EFHistoPrmVtx  - nVert: " << onlinepv->size());
+	      if( not onlinepv->empty()) {
+		if ( (*(onlinepv))[0]->vertexType() == xAOD::VxType::VertexType:: PriVtx ) { // test that PriVtx is not dummy (JA)
+		  if(HistPV) hist("PVx_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->x());
+		  if(HistPV) hist("PVy_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->y());
+		  if(HistPV) hist("PVz_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill((*(onlinepv))[0]->z());
+		  if(HistPV) hist("nPV_tr_Hist"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(onlinepv->size());
+		  ATH_MSG_DEBUG(" Dummy PV using Histogram algorithm - type: " << (*(onlinepv))[0]->vertexType() << " x[0]: " << (*(onlinepv))[0]->x()
+			       << " y[0]: " << (*(onlinepv))[0]->y() <<  " z[0]: " << (*(onlinepv))[0]->z() );
+		} // if VertexType
+	      } // if not onlinepv
+	    } // if not onlinepvs
+	    continue; // if vertex is dummy skip reading out the other quntities for this trigger combination (EN)
+	  } // if DummyVtx
+	  
+	} // if (!FTKchain)
+
+	ATH_MSG_DEBUG(" ======== End of retrival of PV histograms  ==============  ");
 
 	// Get online jet
 	const std::vector< Trig::Feature<xAOD::JetContainer> > onlinejets = comb.get<xAOD::JetContainer>(m_jetKey);
@@ -901,16 +934,22 @@ StatusCode HLTBjetMonTool::book(){
 	  if (HistTrack) hist("nTrack"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(nTrack);
 	  for(const auto* trk : *onlinetrack) {
 	    ATH_MSG_DEBUG("     pT: " << (trk->pt())*1.e-3 << " Eta: " << trk->eta() << " Phi: " << trk->phi() << " d0: " << trk->d0() );
-	    if (Eofflinepv) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvz ); // John A
 	    if (HistTrack) hist("d0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->d0());
 	    if (HistTrack) hist("z0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0());
 	    if (HistTrack) hist("ed0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(Amg::error(trk->definingParametersCovMatrix(), 0));
 	    if (HistTrack) hist("ez0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(Amg::error(trk->definingParametersCovMatrix(), 1));
-	    if (Eofflinepv && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvz); // John Alison
-	    float errz0 = Amg::error(trk->definingParametersCovMatrix(), 1);
-	    if ( errz0 >0. && Eofflinepv && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvz)/errz0 ); // John Alison
 	    if (HistTrack) hist("trkPt"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->pt())*1.e-3 );
 	    if (HistTrack) hist2("trkEtaPhi"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->eta(),trk->phi());
+	    float errz0 = Amg::error(trk->definingParametersCovMatrix(), 1);
+	    if (FTKchain) {
+	      if (EofflinepvFTK) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvzFTK ); // John A
+	      if (EofflinepvFTK && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvzFTK); // John Alison
+	      if ( errz0 >0. && EofflinepvFTK && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvzFTK)/errz0 ); // John Alison
+	    } else { // if FTKchain
+	      if (Eofflinepv) ATH_MSG_DEBUG(" z0 - zPVoffl: " << trk->z0()+trk->vz()-offlinepvz ); // John A
+	      if (Eofflinepv && HistTrack) hist("diffz0PV0"+HistExt,"HLT/BjetMon/"+HistDir)->Fill(trk->z0()+trk->vz()-offlinepvz); // John Alison
+	      if ( errz0 >0. && Eofflinepv && HistTrack) hist("sigz0PV"+HistExt,"HLT/BjetMon/"+HistDir)->Fill( (trk->z0()+trk->vz()-offlinepvz)/errz0 ); // John Alison
+	    } // else
 	  } // for online track particles
 	} // onlinetracks.size