diff --git a/Analysis/RivetAnalysis.cc b/Analysis/RivetAnalysis.cc
--- a/Analysis/RivetAnalysis.cc
+++ b/Analysis/RivetAnalysis.cc
@@ -1,172 +1,173 @@
 // -*- C++ -*-
 //
 // This is the implementation of the non-inlined, non-templated member
 // functions of the RivetAnalysis class.
 //
 
 #include "RivetAnalysis.h"
 #include "ThePEG/Interface/ClassDocumentation.h"
 #include "ThePEG/Interface/ParVector.h"
 #include "ThePEG/Interface/Parameter.h"
 #include "ThePEG/Interface/Switch.h"
 #include "ThePEG/Persistency/PersistentOStream.h"
 #include "ThePEG/Persistency/PersistentIStream.h"
 #include "ThePEG/Vectors/HepMCConverter.h"
 #include "ThePEG/Config/HepMCHelper.h"
 #include "ThePEG/Repository/EventGenerator.h"
 #include "ThePEG/Repository/CurrentGenerator.h"
 #include "HepMC/GenEvent.h"
 #include "Rivet/AnalysisHandler.hh"
+#include "Rivet/Tools/RivetPaths.hh"
 #include "Rivet/Tools/Logging.hh"
 #include <config.h>
 
 using namespace ThePEG;
 
 RivetAnalysis::RivetAnalysis() :  debug(false), _rivet(), _nevent(0) 
 {}
 
 void RivetAnalysis::analyze(ThePEG::tEventPtr event, long ieve, int loop, int state) {
   ++_nevent;
   AnalysisHandler::analyze(event, ieve, loop, state);
   // Rotate to CMS, extract final state particles and call analyze(particles).
   // convert to hepmc
   HepMC::GenEvent * hepmc = ThePEG::HepMCConverter<HepMC::GenEvent>::convert(*event);
   // analyse the event
   CurrentGenerator::Redirect stdout(cout);
   if ( _rivet ) _rivet->analyze(*hepmc);
   // delete hepmc event
   delete hepmc;
 }
 
 ThePEG::IBPtr RivetAnalysis::clone() const {
   return new_ptr(*this);
 }
 
 ThePEG::IBPtr RivetAnalysis::fullclone() const {
   return new_ptr(*this);
 }
 
 void RivetAnalysis::persistentOutput(ThePEG::PersistentOStream & os) const {
   os << _analyses << _paths << filename << debug;
 }
 
 void RivetAnalysis::persistentInput(ThePEG::PersistentIStream & is, int) {
   is >> _analyses >> _paths >> filename >> debug;
 }
 
 ThePEG::ClassDescription<RivetAnalysis> RivetAnalysis::initRivetAnalysis;
 // Definition of the static class description member.
 
 void RivetAnalysis::Init() {
 
   static ThePEG::ClassDocumentation<RivetAnalysis> documentation
     ("The RivetAnalysis class is a simple class to allow analyses"
      " from the Rivet library to be called from ThePEG");
 
   static ThePEG::ParVector<RivetAnalysis,string> interfaceAnalyses
     ("Analyses",
      "The names of the Rivet analyses to use",
      &RivetAnalysis::_analyses, -1, "", "","" "",
      false, false, ThePEG::Interface::nolimits);
 
   static ThePEG::ParVector<RivetAnalysis,string> interfacePaths
     ("Paths",
      "The directory paths where Rivet should look for analyses.",
      &RivetAnalysis::_paths, -1, "", "","" "",
      false, false, ThePEG::Interface::nolimits);
 
   static Parameter<RivetAnalysis,string> interfaceFilename
     ("Filename",
 #if ThePEG_RIVET_VERSION == 1
      "The name of the file where the AIDA histograms are put. If empty, "
      "the run name will be used instead. '.aida' will in any case be "
      "appended to the file name.",
 #elif ThePEG_RIVET_VERSION > 1
      "The name of the file where the YODA histograms are put. If empty, "
      "the run name will be used instead. '.yoda' will in any case be "
      "appended to the file name.",
 #else
 #error "Unknown ThePEG_RIVET_VERSION"
 #endif
      &RivetAnalysis::filename, "", true, false);
 
 
   static Switch<RivetAnalysis,bool> interfaceDebug
     ("Debug",
      "Enable debug information from Rivet",
      &RivetAnalysis::debug, false, true, false);
   static SwitchOption interfaceDebugNo
     (interfaceDebug,
      "No",
      "Disable debug information.",
      false);
   static SwitchOption interfaceDebugYes
     (interfaceDebug,
      "Yes",
      "Enable debug information from Rivet.",
      true);
 
 
   interfaceAnalyses.rank(10);
 
 }
 
 void RivetAnalysis::dofinish() {
   AnalysisHandler::dofinish();
   if( _nevent > 0 && _rivet ) {
     CurrentGenerator::Redirect stdout(cout);
     _rivet->setCrossSection(generator()->integratedXSec()/picobarn);
     _rivet->finalize();
 
     string fname = filename;
 #if ThePEG_RIVET_VERSION == 1
     if ( fname.empty() ) fname = generator()->runName() + ".aida";
 #elif ThePEG_RIVET_VERSION > 1
     if ( fname.empty() ) fname = generator()->runName() + ".yoda";
 #else
 #error "Unknown ThePEG_RIVET_VERSION"
 #endif
     _rivet->writeData(fname);
   }
   delete _rivet;
   _rivet = 0;
 }
 
 void RivetAnalysis::doinit() {
   AnalysisHandler::doinit();
   if(_analyses.empty()) 
     throw ThePEG::Exception() << "Must have at least one analysis loaded in "
 			      << "RivetAnalysis::doinitrun()"
 			      << ThePEG::Exception::runerror;
 
   // check that analysis list is available
   _rivet = new Rivet::AnalysisHandler; //(fname);
   for ( int i = 0, N = _paths.size(); i < N; ++i ) Rivet::addAnalysisLibPath(_paths[i]);
   _rivet->addAnalyses(_analyses);
   if ( _rivet->analysisNames().size() != _analyses.size() ) {
     throw ThePEG::Exception() 
       << "Rivet could not find all requested analyses.\n"
       << "Use 'rivet --list-analyses' to check availability.\n"
       << ThePEG::Exception::runerror;
   }
   delete _rivet;
   _rivet = 0;
 }
 
 void RivetAnalysis::doinitrun() {
   AnalysisHandler::doinitrun();
   // create Rivet analysis handler
   CurrentGenerator::Redirect stdout(cout);
   _rivet = new Rivet::AnalysisHandler; //(fname);
   for ( int i = 0, N = _paths.size(); i < N; ++i ) Rivet::addAnalysisLibPath(_paths[i]);
   _rivet->addAnalyses(_analyses);
   // check that analysis list is still available
   if ( _rivet->analysisNames().size() != _analyses.size() ) {
     throw ThePEG::Exception() 
       << "Rivet could not find all requested analyses.\n"
       << "Use 'rivet --list-analyses' to check availability.\n"
       << ThePEG::Exception::runerror;
   }
   if ( debug )
     Rivet::Log::setLevel("Rivet",Rivet::Log::DEBUG);
 }
diff --git a/PDT/MixedParticleData.cc b/PDT/MixedParticleData.cc
--- a/PDT/MixedParticleData.cc
+++ b/PDT/MixedParticleData.cc
@@ -1,228 +1,227 @@
 // -*- C++ -*-
 //
 // This is the implementation of the non-inlined, non-templated member
 // functions of the MixedParticleData class.
 //
 
 #include "MixedParticleData.h"
 #include "ThePEG/Interface/Parameter.h"
 #include "ThePEG/Interface/ClassDocumentation.h"
 #include "ThePEG/Persistency/PersistentOStream.h"
 #include "ThePEG/Persistency/PersistentIStream.h"
 #include "ThePEG/Repository/EventGenerator.h"
 #include "ThePEG/Repository/UseRandom.h"
 #include "ThePEG/Utilities/Debug.h"
 #include "ThePEG/PDT/DecayMode.h"
 
 using namespace ThePEG;
 
 void MixedParticleData::persistentOutput(PersistentOStream & os) const {
   os << ounit(_deltam,GeV) << ounit(_deltagamma,GeV) << _pqmag << _pqphase
      << _pq << _zmag << _zphase << _z << _x << _y << _prob;
 }
 
 void MixedParticleData::persistentInput(PersistentIStream & is, int) {
   is >> iunit(_deltam,GeV) >> iunit(_deltagamma,GeV) >> _pqmag >> _pqphase
      >> _pq >> _zmag >> _zphase >> _z >> _x >> _y >> _prob;
 }
 
 ClassDescription<MixedParticleData> MixedParticleData::initMixedParticleData;
 // Definition of the static class description member.
 
 void MixedParticleData::Init() {
 
   static ClassDocumentation<MixedParticleData> documentation
     ("The MixedParticleData class provides storage of the particle data"
      " for particles which undergo mixing.");
 
   static Parameter<MixedParticleData,Energy> interfaceDeltaM
     ("DeltaM",
      "The mass difference",
      &MixedParticleData::_deltam, GeV, 0.0*GeV, 0.0*GeV, 1.*GeV,
      false, false, Interface::limited,
      &MixedParticleData::setDeltaM, 0, 0, 0, 0);
 
   static Parameter<MixedParticleData,Energy> interfaceDeltaGamma
     ("DeltaGamma",
      "The width difference",
      &MixedParticleData::_deltagamma, GeV, 0.0*GeV, 0.0*GeV, 1.0*GeV,
      false, false, Interface::limited,
      &MixedParticleData::setDeltaGamma, 0, 0, 0, 0);
 
   static Parameter<MixedParticleData,double> interfacePQMagnitude
     ("PQMagnitude",
      "The value of |p/q|",
      &MixedParticleData::_pqmag, 1.0, 0.0, 10.0,
      false, false, Interface::limited,
      &MixedParticleData::setPQMagnitude, 0, 0, 0, 0);
 
   static Parameter<MixedParticleData,double> interfacePQPhase
     ("PQPhase",
      "The phase of p/q",
      &MixedParticleData::_pqmag, 0.0, 0.0, 2.*Constants::pi,
      false, false, Interface::limited,
      &MixedParticleData::setPQPhase, 0, 0, 0, 0);
 
   static Parameter<MixedParticleData,double> interfaceZMagnitude
     ("ZMagnitude",
      "The value of |z|",
      &MixedParticleData::_zmag, 0.0, 0.0, 1.0,
      false, false, Interface::limited,
      &MixedParticleData::setZMagnitude, 0, 0, 0, 0);
 
   static Parameter<MixedParticleData,double> interfaceZPhase
     ("ZPhase",
      "The phase of z",
      &MixedParticleData::_zmag, 0.0, 0.0, 2.*Constants::pi,
      false, false, Interface::limited,
      &MixedParticleData::setZPhase, 0, 0, 0, 0);
 
 }
 
 MixedParticleData::MixedParticleData(long newId, string newPDGName)
   : ParticleData(newId, newPDGName), _deltam(0.*GeV), _deltagamma(0.*GeV),
     _pqmag(1.), _pqphase(0.), _pq(1.,0.), _zmag(0.), _zphase(0.), _z(0.),
     _x(0.), _y(0.), _prob(make_pair(1.,0.)) {}
 
 PDPtr MixedParticleData::
 Create(long newId, string newPDGName) {
   return new_ptr(MixedParticleData(newId, newPDGName));
 }
 
 PDPair MixedParticleData::
 Create(long newId, string newPDGName, string newAntiPDGName) {
   PDPair pap;
   pap.first = new_ptr(MixedParticleData(newId, newPDGName));
   pap.second = new_ptr(MixedParticleData(-newId, newAntiPDGName));
   antiSetup(pap);
   return pap;
 }
 
 PDPtr MixedParticleData::pdclone() const {
   return new_ptr(*this);
 }
 
 void MixedParticleData::setDeltaM(Energy m) {
   _deltam = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_deltam = m;
 }
 
 void MixedParticleData::setDeltaGamma(Energy m) {
   _deltagamma = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_deltagamma = m;
 }
 
 void MixedParticleData::setPQMagnitude(double m) {
   _pqmag = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_pqmag = m;
 }
 
 void MixedParticleData::setPQPhase(double m) {
   _pqphase = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_pqphase = m;
 }
 
 void MixedParticleData::setZMagnitude(double m) {
   _zmag = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_zmag = m;
 }
 
 void MixedParticleData::setZPhase(double m) {
   _zphase = m;
   MixedParticleData * apd =
     dynamic_cast<MixedParticleData*>(CC().operator->());
   if ( synchronized() && apd ) apd->_zphase = m;
 }
 
 void MixedParticleData::doinit() throw(InitException) {
   ParticleData::doinit();
   // calculate the complex parameters from the magnitudes and phases
   // and x and y from massive parameters
   // p/q
   _pq = _pqmag*Complex(cos(_pqphase),sin(_pqphase));
   // z
   _z  = _zmag *Complex(cos(_zphase ),sin(_zphase ));
   // x
   _x =     _deltam    /width();
   // y
   _y = 0.5*_deltagamma/width();
   // probabilities
   double zr = _z.real(), zi = _z.imag();
   double root = sqrt( (1 - 2 * zr * zr + 2 * zi * zi +  pow( zr,  4) 
 		       + 2 * zr * zr * zi * zi +  pow( zi,  4)));
   double x2=sqr(_x),y2=sqr(_y),modqp=1./sqr(abs(_pq)),z2(sqr(zr)+sqr(zi));
   double mixprob = id()>0 ?
     -modqp*root*(x2+y2)/(2*zr*_y*(1+x2) - modqp*root*(x2+y2) 
 			 - (1.+z2)*x2 - 2*zi*_x*(1-y2) +  y2*(1-z2)  - 2) :
     root*(x2+y2)/(2*modqp*zr*(1+x2)*_y+root*(x2+y2)+modqp*(1.+z2)*x2 
 		  - 2*modqp*zi*_x*(1-y2)-modqp*y2*(1-z2)+2*modqp);
   _prob= make_pair(1.-mixprob,mixprob);
   if( Debug::level ) {
     generator()->log() << "Parameters for the mixing of " << PDGName() << " and " 
 		       << CC()->PDGName() << "\n";
     generator()->log() << "x = " << _x << "\t y = " << _y << "\n";
     generator()->log() << "Integrated mixing probability = " << mixprob << "\n";
   }
 }
 
 pair<bool,Length> MixedParticleData::generateLifeTime() const {
   // first decide if mixes
   bool mix = UseRandom::rndbool(_prob.second);
   double wgt;
   Length ct;
   double zi(_z.imag()),zr(_z.real()),zabs(sqr(zi)+sqr(zr)),
     root(1.-zabs);
   Length ctau = hbarc/(width()-0.5*abs(_deltagamma));
   do {
     ct = UseRandom::rndExp(ctau);
     double gt = ct/cTau();
-    wgt=1.;
     if(id()>0) {
       if(!mix) {
 	wgt = 0.5*(1.+zabs)*cosh(_y*gt)+0.5*(1.-zabs)*cos(_x*gt)
 	  -zr*sinh(_y*gt)+zi*sin(_x*gt);
       }
       else {
 	wgt = 0.5*root/sqr(abs(_pq))*(cosh(_y*gt)-cos(_x*gt));
       }
     }
     else {
       if(!mix) {
 	wgt = 0.5*(1.+zabs)*cosh(_y*gt)+0.5*(1.-zabs)*cos(_x*gt)
 	  +zr*sinh(_y*gt)-zi*sin(_x*gt);
       }
       else {
 	wgt = 0.5*root*sqr(abs(_pq))*(cosh(_y*gt)-cos(_x*gt));
       }
     }
     wgt *= exp(-gt+ct/ctau);
   }
   while(UseRandom::rnd()>wgt);
   return make_pair(mix,ct);
 }
 
 pair<Complex,Complex> MixedParticleData::mixingAmplitudes(Length ct,bool part) const {
   double gt = ct/cTau();
   Complex ep = exp(Complex(-0.5*_y,-0.5*_x)*gt);
   Complex gp = 0.5*(ep+1./ep), gm = 0.5*(ep-1./ep);
   pair<Complex,Complex> output;
   if(part) {
     output.first  = gp + _z*gm;
     output.second = -sqrt(1.-sqr(_z))/_pq*gm;
   }
   else {
     output.first  = gp - _z*gm;
     output.second = -sqrt(1.-sqr(_z))*_pq*gm; 
   }
   return output;
 }