diff --git a/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt b/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt
index 94a85c4f67d3a7f11a9e3873807f275f17b2c2c7..103934131262b7c2634838dea1d4b23d8524f424 100644
--- a/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt
+++ b/PhysicsAnalysis/PrimaryDPDMaker/CMakeLists.txt
@@ -35,6 +35,7 @@ atlas_depends_on_subdirs( PUBLIC
                           InnerDetector/InDetRecEvent/InDetRIO_OnTrack
                           LArCalorimeter/LArRecEvent
                           PhysicsAnalysis/AnalysisTrigger/AnalysisTriggerEvent
+                          PhysicsAnalysis/MuonID/MuonSelectorTools
                           Reconstruction/Jet/JetEvent
                           Reconstruction/MuonIdentification/muonEvent
                           Reconstruction/egamma/egammaEvent
@@ -60,18 +61,18 @@ atlas_add_library( PrimaryDPDMakerLib
                    PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
                    DEFINITIONS ${CLHEP_DEFINITIONS}
                    LINK_LIBRARIES ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces StoreGateLib SGtests
-                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex )
+                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent MuonSelectorToolsLib JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex )
 
 atlas_add_component( PrimaryDPDMaker
                      src/components/*.cxx
                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers StoreGateLib SGtests IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex PrimaryDPDMakerLib )
+                     LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers StoreGateLib SGtests IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent MuonSelectorToolsLib JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex PrimaryDPDMakerLib )
 
 atlas_add_dictionary( PrimaryDPDMakerDict
                       PrimaryDPDMaker/PrimaryDPDMakerDict.h
                       PrimaryDPDMaker/selection.xml
                       INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
-                      LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers StoreGateLib SGtests IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex PrimaryDPDMakerLib )
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} ${CLHEP_LIBRARIES} CaloEvent AthenaBaseComps AthenaKernel AthLinks AthContainers StoreGateLib SGtests IRegionSelector Identifier EventKernel GaudiKernel InDetIdentifier InDetReadoutGeometry InDetPrepRawData Particle TrkTrack TrkToolInterfaces RoiDescriptor FourMom FourMomUtils NavFourMom xAODEventInfo xAODMuon xAODTracking InDetRIO_OnTrack LArRecEvent AnalysisTriggerEvent MuonSelectorToolsLib JetEvent muonEvent egammaEvent tauEvent TileEvent TileIdentifier TrkParameters TrkParticleBase TrkPseudoMeasurementOnTrack TrkTrackSummary VxVertex PrimaryDPDMakerLib )
 
 # Install files from the package:
 atlas_install_python_modules( python/*.py )
diff --git a/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/DRAW_ZMUMUSkimmingTool.h b/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/DRAW_ZMUMUSkimmingTool.h
new file mode 100644
index 0000000000000000000000000000000000000000..9092750caa730b84cfef4dff0d064178791ca742
--- /dev/null
+++ b/PhysicsAnalysis/PrimaryDPDMaker/PrimaryDPDMaker/DRAW_ZMUMUSkimmingTool.h
@@ -0,0 +1,62 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// DRAW_ZMUMUSkimmingTool.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef DERIVATIONFRAMEWORK_SKIMMINGTOOLEXAMPLE_H
+#define DERIVATIONFRAMEWORK_SKIMMINGTOOLEXAMPLE_H 1
+
+#include<string>
+
+// Gaudi & Athena basics
+#include "AthenaBaseComps/AthAlgTool.h"
+
+// DerivationFramework includes
+#include "DerivationFrameworkInterfaces/ISkimmingTool.h"
+
+namespace CP {
+  class IMuonSelectionTool;
+}
+
+namespace DerivationFramework {
+
+  /** @class DRAW_ZMUMUSkimmingTool
+  
+      the code used in this implementation is kindly stolen from:
+      atlasoff:: ISF/ISF_Core/ISF_Tools
+
+      @author James Catmore -at- cern.ch
+     */
+  class DRAW_ZMUMUSkimmingTool : public AthAlgTool, public ISkimmingTool {
+    
+  public: 
+    /** Constructor with parameters */
+    DRAW_ZMUMUSkimmingTool( const std::string& t, const std::string& n, const IInterface* p );
+    
+    /** Destructor */
+    ~DRAW_ZMUMUSkimmingTool();
+    
+    // Athena algtool's Hooks
+    StatusCode  initialize();
+    StatusCode  finalize();
+    
+    /** Check that the current event passes this filter */
+    virtual bool eventPassesFilter() const;
+    
+  private:
+    mutable unsigned int m_ntot;
+    mutable unsigned int m_npass;
+    std::string m_muonSGKey;
+    ToolHandle<CP::IMuonSelectionTool> m_muonSelectionTool;
+    unsigned int m_nMuons;
+    double m_muonPtCut;
+
+  }; 
+  
+}
+
+
+#endif
diff --git a/PhysicsAnalysis/PrimaryDPDMaker/share/DRAW_ZMUMU.py b/PhysicsAnalysis/PrimaryDPDMaker/share/DRAW_ZMUMU.py
index 89c79087f83dc7f03e9d52e601187db056edc161..e51d461b707c48f18ec1d2942bb2ab53d4be65dc 100644
--- a/PhysicsAnalysis/PrimaryDPDMaker/share/DRAW_ZMUMU.py
+++ b/PhysicsAnalysis/PrimaryDPDMaker/share/DRAW_ZMUMU.py
@@ -35,11 +35,21 @@ dimuonMassSkimmingTool = DerivationFramework__xAODStringSkimmingTool(name = "DRA
                                                                      expression = dimuonMassString)
 ToolSvc += dimuonMassSkimmingTool
 
-# Tightening by requiring at least one good (i.e. preselected) muon and either a single-muon or dimuon trigger to have passed
-from DerivationFrameworkMuons.MuonsCommon import *
-goodMuonString = 'count((Muons.DFCommonGoodMuon) && (Muons.pt > 20*GeV)) >= 1'
-goodMuonSkimmingTool = DerivationFramework__xAODStringSkimmingTool(name = "DRAW_ZMUMU_GoodMuon_SkimmingTool",
-                                                                   expression = goodMuonString)
+# Muon selector tool
+from MuonSelectorTools.MuonSelectorToolsConf import CP__MuonSelectionTool
+goodMuonTool = CP__MuonSelectionTool(name = "DRAW_ZMUMU_MuonsSelector")
+goodMuonTool.MaxEta = 3.
+goodMuonTool.MuQuality = 3
+# turn of the momentum correction which is not needed for IDHits cut and Preselection
+goodMuonTool.TurnOffMomCorr = True
+ToolSvc += goodMuonTool
+print goodMuonTool
+from PrimaryDPDMaker.PrimaryDPDMakerConf import DerivationFramework__DRAW_ZMUMUSkimmingTool
+goodMuonSkimmingTool = DerivationFramework__DRAW_ZMUMUSkimmingTool(name = "DRAW_ZMUMU_GoodMuon_SkimmingTool",
+                                                               MuonContainerKey = "Muons",
+                                                               MuonSelectorTool = goodMuonTool,
+                                                               MinimumNumberOfMuons = 1,
+                                                               MuonPtCut = 20.0) 
 ToolSvc += goodMuonSkimmingTool
 
 periods = TriggerPeriod.future | TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017
diff --git a/PhysicsAnalysis/PrimaryDPDMaker/src/DRAW_ZMUMU_SkimmingTool.cxx b/PhysicsAnalysis/PrimaryDPDMaker/src/DRAW_ZMUMU_SkimmingTool.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..df51466fd310d216e72e6166c808ec04a80671ac
--- /dev/null
+++ b/PhysicsAnalysis/PrimaryDPDMaker/src/DRAW_ZMUMU_SkimmingTool.cxx
@@ -0,0 +1,82 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+/////////////////////////////////////////////////////////////////
+// DRAW_ZMUMUSkimmingTool.cxx
+///////////////////////////////////////////////////////////////////
+// Author: James Catmore (James.Catmore@cern.ch)
+// This tool implements the "good muon" event selection required 
+// by the DRAW_ZMUMU format, avoiding the use of decorators on the 
+// muons. Inherits from derivation framework components.
+
+#include "PrimaryDPDMaker/DRAW_ZMUMUSkimmingTool.h"
+#include "xAODMuon/MuonContainer.h"
+#include "MuonSelectorTools/IMuonSelectionTool.h"
+#include <vector>
+#include <string>
+
+// Constructor
+DerivationFramework::DRAW_ZMUMUSkimmingTool::DRAW_ZMUMUSkimmingTool( const std::string& t,
+                                                 const std::string& n,
+                                                 const IInterface* p ) : 
+  AthAlgTool(t,n,p),
+  m_ntot(0),
+  m_npass(0),
+  m_muonSGKey("Muons"),
+  m_muonSelectionTool("CP::MuonSelectionTool/MuonSelectionTool"),
+  m_nMuons(1),
+  m_muonPtCut(20.0)
+  {
+    declareInterface<DerivationFramework::ISkimmingTool>(this);
+    declareProperty("MuonContainerKey", m_muonSGKey);
+    declareProperty("MuonSelectorTool", m_muonSelectionTool); 
+    declareProperty("MinimumNumberOfMuons", m_nMuons);
+    declareProperty("MuonPtCut", m_muonPtCut);	
+  }
+  
+// Destructor
+DerivationFramework::DRAW_ZMUMUSkimmingTool::~DRAW_ZMUMUSkimmingTool() {
+}  
+
+// Athena initialize and finalize
+StatusCode DerivationFramework::DRAW_ZMUMUSkimmingTool::initialize()
+{
+     ATH_MSG_VERBOSE("initialize() ...");
+     return StatusCode::SUCCESS;
+}
+StatusCode DerivationFramework::DRAW_ZMUMUSkimmingTool::finalize()
+{
+     ATH_MSG_VERBOSE("finalize() ...");
+     ATH_MSG_INFO("Processed "<< m_ntot <<" events, "<< m_npass<<" events passed filter ");
+     return StatusCode::SUCCESS;
+}
+
+// The filter itself
+bool DerivationFramework::DRAW_ZMUMUSkimmingTool::eventPassesFilter() const
+{
+     ++m_ntot;
+
+     // Retrieve muon container	
+     const xAOD::MuonContainer* muons(0);
+     StatusCode sc = evtStore()->retrieve(muons,m_muonSGKey);	
+     if (sc.isFailure()) {
+	ATH_MSG_ERROR("No muon collection with name " << m_muonSGKey << " found in StoreGate!");
+	return(false);
+     } 
+     
+     // Loop over muons, count up and set decision
+     xAOD::MuonContainer::const_iterator muItr;
+     unsigned int nGoodMu(0);
+     for (muItr=muons->begin(); muItr!=muons->end(); ++muItr) {  
+	if ( m_muonSelectionTool->accept(**muItr) && (*muItr)->pt() > m_muonPtCut ) ++nGoodMu;
+     }
+     bool acceptEvent(false);
+     if (nGoodMu >= m_nMuons) { 
+	acceptEvent = true;
+	++m_npass;
+     }
+     return acceptEvent; 
+
+}  
+  
diff --git a/PhysicsAnalysis/PrimaryDPDMaker/src/components/PrimaryDPDMaker_entries.cxx b/PhysicsAnalysis/PrimaryDPDMaker/src/components/PrimaryDPDMaker_entries.cxx
index d95193c1b7ba9df3ec77fa7ebe1a885a80ddfdae..dfc908783ea40da93dc7378376f83022de74d8fc 100644
--- a/PhysicsAnalysis/PrimaryDPDMaker/src/components/PrimaryDPDMaker_entries.cxx
+++ b/PhysicsAnalysis/PrimaryDPDMaker/src/components/PrimaryDPDMaker_entries.cxx
@@ -6,6 +6,7 @@
 #include "PrimaryDPDMaker/CollisionFilterAlg.h"
 #include "PrimaryDPDMaker/muonTrkTrackThinTool.h"
 #include "PrimaryDPDMaker/CaloCellThinningTool.h"
+#include "PrimaryDPDMaker/DRAW_ZMUMUSkimmingTool.h"
 
 using namespace DerivationFramework;
 
@@ -17,4 +18,4 @@ DECLARE_COMPONENT( MBTSTimeFilterTool )
 DECLARE_COMPONENT( CaloTimeFilterTool )
 DECLARE_COMPONENT( BCIDFilterTool )
 DECLARE_COMPONENT( CaloCellThinningTool )
-
+DECLARE_COMPONENT( DRAW_ZMUMUSkimmingTool )