diff --git a/analyses/pluginCMS/CMS_2014_I1303894.cc b/analyses/pluginCMS/CMS_2014_I1303894.cc
--- a/analyses/pluginCMS/CMS_2014_I1303894.cc
+++ b/analyses/pluginCMS/CMS_2014_I1303894.cc
@@ -1,243 +1,239 @@
 // -*- C++ -*-
 #include "Rivet/Analysis.hh"
 #include "Rivet/Projections/FinalState.hh"
 #include "Rivet/Projections/FastJets.hh"
 #include "Rivet/Projections/VetoedFinalState.hh"
+#include "Rivet/Projections/PromptFinalState.hh"
 #include "Rivet/Projections/InvMassFinalState.hh"
 #include "Rivet/Projections/MissingMomentum.hh"
 #include "Rivet/Projections/WFinder.hh"
 #include "Rivet/Projections/DressedLeptons.hh"
 
 namespace Rivet {
 
 
   /// @brief Differential cross-section of W bosons + jets in pp collisions at sqrt(s)=7 TeV
   /// @author Darin Baumgartel (darinb@cern.ch)
   ///
   /// Based on Rivet analysis originally created by Anil Singh (anil@cern.ch), Lovedeep Saini (lovedeep@cern.ch)
   class CMS_2014_I1303894 : public Analysis {
   public:
 
     /// Constructor
     CMS_2014_I1303894()
       : Analysis("CMS_2014_I1303894")
     {   }
 
 
     // Book histograms and initialise projections before the run
     void init() {
+      // Prompt leptons only, no test on nu flavour.
       // Projections
       const FinalState fs;
       declare(fs, "FS");
 
       MissingMomentum missing(fs);
       declare(missing, "MET");
 
-      IdentifiedFinalState bareMuons(fs);
+      PromptFinalState pfs(fs);
+      IdentifiedFinalState bareMuons(pfs);
       bareMuons.acceptIdPair(PID::MUON);
-      DressedLeptons muonClusters(fs, bareMuons, -1); //, Cuts::open(), false, false);
+      DressedLeptons muonClusters(fs, bareMuons, 0.1, Cuts::open(), false, false);
       declare(muonClusters, "muonClusters");
 
-      IdentifiedFinalState neutrinos;
+      IdentifiedFinalState neutrinos(pfs);
       neutrinos.acceptIdPair(PID::NU_MU);
       declare(neutrinos, "neutrinos");
 
       VetoedFinalState jetFS(fs);
       jetFS.addVetoOnThisFinalState(muonClusters);
       jetFS.addVetoOnThisFinalState(neutrinos);
       jetFS.vetoNeutrinos();
       FastJets JetProjection(jetFS, FastJets::ANTIKT, 0.5);
       JetProjection.useInvisibles(false);
       declare(JetProjection, "Jets");
 
       // Histograms
       _histDPhiMuJet1 = bookHisto1D(1,1,1);
       _histDPhiMuJet2 = bookHisto1D(2,1,1);
       _histDPhiMuJet3 = bookHisto1D(3,1,1);
       _histDPhiMuJet4 = bookHisto1D(4,1,1);
 
       _histEtaJet1 = bookHisto1D(5,1,1);
       _histEtaJet2 = bookHisto1D(6,1,1);
       _histEtaJet3 = bookHisto1D(7,1,1);
       _histEtaJet4 = bookHisto1D(8,1,1);
 
       _histHT1JetInc = bookHisto1D(9,1,1);
       _histHT2JetInc = bookHisto1D(10,1,1);
       _histHT3JetInc = bookHisto1D(11,1,1);
       _histHT4JetInc = bookHisto1D(12,1,1);
 
       _histJet30MultExc  = bookHisto1D(13,1,1);
       _histJet30MultInc  = bookHisto1D(14,1,1);
 
       _histPtJet1 = bookHisto1D(15,1,1);
       _histPtJet2 = bookHisto1D(16,1,1);
       _histPtJet3 = bookHisto1D(17,1,1);
       _histPtJet4 = bookHisto1D(18,1,1);
 
       // Counters
       _n_1jet = 0.0;
       _n_2jet = 0.0;
       _n_3jet = 0.0;
       _n_4jet = 0.0;
       _n_inclusivebinsummation = 0.0;
     }
 
 
     void analyze(const Event& event) {
       // Get the dressed muon
       const DressedLeptons& muonClusters = apply<DressedLeptons>(event, "muonClusters");
       int nmu = muonClusters.dressedLeptons().size();
       if (nmu < 1) vetoEvent;
       DressedLepton dressedmuon = muonClusters.dressedLeptons()[0];
       if (dressedmuon.momentum().abseta() > 2.1) vetoEvent;
       if (dressedmuon.momentum().pT() < 25.0*GeV) vetoEvent;
 
       // Get the muon neutrino
       const Particles& neutrinos = apply<FinalState>(event, "neutrinos").particlesByPt();
-      if (neutrinos.empty()) vetoEvent;
 
       // Check that the muon and neutrino are not decay products of tau
       if (dressedmuon.constituentLepton().hasAncestor( PID::TAU)) vetoEvent;
       if (dressedmuon.constituentLepton().hasAncestor(-PID::TAU)) vetoEvent;
-      if (dressedmuon.constituentLepton().hasAncestor( PID::NU_TAU)) vetoEvent;
-      if (dressedmuon.constituentLepton().hasAncestor(-PID::NU_TAU)) vetoEvent;
-      if (neutrinos[0].hasAncestor( PID::TAU)) vetoEvent;
-      if (neutrinos[0].hasAncestor(-PID::TAU)) vetoEvent;
-      if (neutrinos[0].hasAncestor( PID::NU_TAU)) vetoEvent;
-      if (neutrinos[0].hasAncestor(-PID::NU_TAU)) vetoEvent;
 
       // Recording of event weight and numbers
       const double weight = event.weight();
 
       // Get the missing momentum
       const MissingMomentum& met = apply<MissingMomentum>(event, "MET");
       const double ptmet = met.visibleMomentum().pT();
       const double phimet = (-met.visibleMomentum()).phi();
 
       // Calculate MET and MT(mu,MET), and remove events with MT < 50 GeV
       const double ptmuon = dressedmuon.pT();
       const double phimuon = dressedmuon.phi();
       const double mt_mumet = sqrt(2*ptmuon*ptmet*(1.0 - cos(phimet-phimuon)));
 
       // Remove events in MT < 50 region
       if (mt_mumet < 50*GeV) vetoEvent;
 
       // Loop over jets and fill pt/eta/phi quantities in vectors
       const Jets& jets_filtered = apply<FastJets>(event, "Jets").jetsByPt(0.0*GeV);
       vector<float> finaljet_pT_list, finaljet_eta_list, finaljet_phi_list;
       double htjets = 0.0;
       for (size_t ii = 0; ii < jets_filtered.size(); ++ii) {
         // Jet pT/eta/phi
         double jet_pt = jets_filtered[ii].pT();
         double jet_eta = jets_filtered[ii].eta();
         double jet_phi = jets_filtered[ii].phi();
 
         // Kinemetic cuts for jet acceptance
         if (fabs(jet_eta) > 2.4) continue;
         if (jet_pt < 30.0*GeV) continue;
         if (deltaR(dressedmuon, jets_filtered[ii]) < 0.5) continue;
 
         // Add jet to jet list and increases the HT variable
         finaljet_pT_list.push_back(jet_pt);
         finaljet_eta_list.push_back(jet_eta);
         finaljet_phi_list.push_back(jet_phi);
         htjets += fabs(jet_pt);
       }
 
 
       // Filling of histograms:
       // Fill as many jets as there are into the exclusive jet multiplicity
       if (!finaljet_pT_list.empty())
         _histJet30MultExc->fill(finaljet_pT_list.size(), weight);
 
       for (size_t ij = 0; ij < finaljet_pT_list.size(); ++ij) {
         _histJet30MultInc->fill(ij+1, weight);
         _n_inclusivebinsummation += weight;
       }
 
       if (finaljet_pT_list.size() >= 1) {
         _histPtJet1->fill(finaljet_pT_list[0],weight);
         _histEtaJet1->fill(fabs(finaljet_eta_list[0]), weight);
         _histDPhiMuJet1->fill(deltaPhi(finaljet_phi_list[0], phimuon),weight);
         _histHT1JetInc->fill(htjets, weight);
         _n_1jet +=weight;
       }
 
       if (finaljet_pT_list.size() >= 2) {
         _histPtJet2->fill(finaljet_pT_list[1], weight);
         _histEtaJet2->fill(fabs(finaljet_eta_list[1]), weight);
         _histDPhiMuJet2->fill(deltaPhi(finaljet_phi_list[1], phimuon), weight);
         _histHT2JetInc->fill(htjets, weight);
         _n_2jet += weight;
       }
 
       if (finaljet_pT_list.size() >= 3) {
         _histPtJet3->fill(finaljet_pT_list[2], weight);
         _histEtaJet3->fill(fabs(finaljet_eta_list[2]), weight);
         _histDPhiMuJet3->fill(deltaPhi(finaljet_phi_list[2], phimuon), weight);
         _histHT3JetInc->fill(htjets, weight);
         _n_3jet += weight;
       }
 
       if (finaljet_pT_list.size() >=4 ) {
         _histPtJet4->fill(finaljet_pT_list[3], weight);
         _histEtaJet4->fill(fabs(finaljet_eta_list[3]), weight);
         _histDPhiMuJet4->fill(deltaPhi(finaljet_phi_list[3], phimuon), weight);
         _histHT4JetInc-> fill(htjets, weight);
         _n_4jet += weight;
       }
 
     }
 
 
     // Finalize the histograms.
     void finalize() {
 
       const double inclusive_cross_section = crossSection();
       const double norm_1jet_histo = inclusive_cross_section*_n_1jet/sumOfWeights();
       const double norm_2jet_histo = inclusive_cross_section*_n_2jet/sumOfWeights();
       const double norm_3jet_histo = inclusive_cross_section*_n_3jet/sumOfWeights();
       const double norm_4jet_histo = inclusive_cross_section*_n_4jet/sumOfWeights();
       const double norm_incmultiplicity = inclusive_cross_section*_n_inclusivebinsummation/sumOfWeights();
 
       normalize(_histJet30MultExc, norm_1jet_histo);
       normalize(_histJet30MultInc, norm_incmultiplicity);
 
       normalize(_histPtJet1, norm_1jet_histo);
       normalize(_histHT1JetInc, norm_1jet_histo);
       normalize(_histEtaJet1, norm_1jet_histo);
       normalize(_histDPhiMuJet1, norm_1jet_histo);
 
       normalize(_histPtJet2, norm_2jet_histo);
       normalize(_histHT2JetInc, norm_2jet_histo);
       normalize(_histEtaJet2, norm_2jet_histo);
       normalize(_histDPhiMuJet2, norm_2jet_histo);
 
       normalize(_histPtJet3, norm_3jet_histo);
       normalize(_histHT3JetInc, norm_3jet_histo);
       normalize(_histEtaJet3, norm_3jet_histo);
       normalize(_histDPhiMuJet3, norm_3jet_histo);
 
       normalize(_histPtJet4, norm_4jet_histo);
       normalize(_histHT4JetInc, norm_4jet_histo);
       normalize(_histEtaJet4, norm_4jet_histo);
       normalize(_histDPhiMuJet4, norm_4jet_histo);
     }
 
 
   private:
 
     Histo1DPtr  _histJet30MultExc, _histJet30MultInc;
     Histo1DPtr  _histPtJet1, _histPtJet2, _histPtJet3, _histPtJet4;
     Histo1DPtr  _histEtaJet1, _histEtaJet2, _histEtaJet3, _histEtaJet4;
     Histo1DPtr  _histDPhiMuJet1, _histDPhiMuJet2, _histDPhiMuJet3, _histDPhiMuJet4;
     Histo1DPtr  _histHT1JetInc, _histHT2JetInc, _histHT3JetInc, _histHT4JetInc;
 
     double _n_1jet, _n_2jet, _n_3jet, _n_4jet, _n_inclusivebinsummation;
 
   };
 
 
   DECLARE_RIVET_PLUGIN(CMS_2014_I1303894);
 
 }