diff --git a/MatrixElement/DIS/DISBase.h b/MatrixElement/DIS/DISBase.h
--- a/MatrixElement/DIS/DISBase.h
+++ b/MatrixElement/DIS/DISBase.h
@@ -1,434 +1,428 @@
 // -*- C++ -*-
 #ifndef HERWIG_DISBase_H
 #define HERWIG_DISBase_H
 //
 // This is the declaration of the DISBase class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The DISBase class is the base class for the implementation
  * of DIS type processes including corrections in both the old
  * fashioned matrix element and POWHEG approaches
  *
  * @see \ref DISBaseInterfaces "The interfaces"
  * defined for DISBase.
  */
 class DISBase: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   DISBase();
 
   /**
    * The default constructor.
    */
   virtual ~DISBase();
 
   /**
    *  Members for the old-fashioned matrix element correction
    */
   //@{
   /**
    *  Has an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return true;}
 
   /**
    *  Initialize the ME correction
    */
   virtual void initializeMECorrection(RealEmissionProcessPtr, double &,
 				      double & );
 
   /**
    *  Apply the hard matrix element correction to a given hard process or decay
    */
   virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
 
   /**
    * Apply the soft matrix element correction
    * @param initial The particle from the hard process which started the 
    * shower
    * @param parent The initial particle in the current branching
    * @param br The branching struct
    * @return If true the emission should be vetoed
    */
   virtual bool softMatrixElementVeto(ShowerProgenitorPtr,
 				     ShowerParticlePtr,Branching);
   //@}
 
   /**
    *  Members for the POWHEG stype correction
    */
   //@{
   /**
    *  Has a POWHEG style correction
    */
   virtual POWHEGType hasPOWHEGCorrection() {return Both;}
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction);
   //@}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<DISBase> initDISBase;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DISBase & operator=(const DISBase &);
 
 protected:
 
   /**
    *  The NLO weight
    */
   double NLOWeight() const;
 
   /**
    *  Calculate the coefficient A for the correlations
    */
   virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout,
 		   Energy2 scale) const =0;
 
   /**
    *  Members for the matrix element correction
    */
   //@{
   /**
    *  Generate the values of \f$x_p\f$ and \f$z_p\f$
    * @param xp The value of xp, output
    * @param zp The value of zp, output
    */
   double generateComptonPoint(double &xp, double & zp);
 
   /**
    *  Generate the values of \f$x_p\f$ and \f$z_p\f$
    * @param xp The value of xp, output
    * @param zp The value of zp, output
    */
   double generateBGFPoint(double &xp, double & zp);
 
   /**
    *  Return the coefficients for the matrix element piece for
    *  the QCD compton case. The output is the \f$a_i\f$ coefficients to 
    *  give the function as 
    *  \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$
    * @param xp \f$x_p\f$
    * @param x2 \f$x_2\f$
    * @param xperp \f$x_\perp\f$
    * @param norm Normalise to the large $l$ value of the ME
    */
   vector<double> ComptonME(double xp, double x2, double xperp,
 			   bool norm);
   
   /**
    *  Return the coefficients for the matrix element piece for
    *  the QCD compton case. The output is the \f$a_i\f$ coefficients to 
    *  give the function as 
    *  \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$
    * @param xp \f$x_p\f$
    * @param x2 \f$x_3\f$
    * @param x3 \f$x_2\f$
    * @param xperp \f$x_\perp\f$
    * @param norm Normalise to the large $l$ value of the ME
    */
   vector<double> BGFME(double xp, double x2, double x3, double xperp,
 		       bool norm);
   //@}
 
   /**
    *  Members for the POWHEG correction
    */
   //@{
   /**
    *  Generate a Compton process
    */
   void generateCompton();
 
   /**
    *  Generate a BGF process
    */
   void generateBGF();
   //@}
 
 private:
 
   /**
    *  Parameters for the matrix element correction
    */
   //@{
   /**
    *  Enchancement factor for ISR
    */
   double initial_;
 
   /**
    *  Enchancement factor for FSR
    */
   double final_;
 
   /**
    *   Relative fraction of compton and BGF processes to generate
    */
   double procProb_;
 
   /**
    *  Integral for compton process
    */
   double comptonInt_;
 
   /**
    *  Integral for BGF process
    */
   double bgfInt_;
   //@}
 
   /**
    *  Parameters for the POWHEG correction
    */
   //@{
   /**
    *  Weight for the compton channel
    */
   double comptonWeight_;
 
   /**
    *  Weight for the BGF channel
    */
   double BGFWeight_;
 
   /**
    *  Minimum value of \f$p_T\f$
    */
   Energy pTmin_;
   //@}
 
   /**
    *  Parameters for the point being generated
    */
   //@{
   /**
    *   \f$Q^2\f$
    */
   Energy2 q2_;
 
   /**
    *  
    */
   double l_;
 
   /**
    *  Borm momentum fraction
    */
   double xB_;
 
   /**
    *  Beam particle
    */
   tcBeamPtr beam_;
 
   /**
    *  Partons
    */
   tcPDPtr partons_[2];
 
   /**
    *  Leptons
    */
   tcPDPtr leptons_[2];
 
   /**
    *  PDF object
    */
   tcPDFPtr pdf_;
   /**
    *  Rotation to the Breit frame
    */
   LorentzRotation rot_;
 
   /**
    *  Lepton momenta
    */
   Lorentz5Momentum pl_[2];
 
   /**
    *  Quark momenta
    */
   Lorentz5Momentum pq_[2];
 
   /**
    *  q
    */
   Lorentz5Momentum q_;
 
   /**
    *  Compton parameters
    */
   Energy pTCompton_;
   bool ComptonISFS_;
   vector<Lorentz5Momentum> ComptonMomenta_;
 
   /**
    *  BGF parameters
    */
   Energy pTBGF_;
   vector<Lorentz5Momentum> BGFMomenta_;
   //@}
 
   /**
    *  The coefficient for the correlations
    */
   double acoeff_;
 
   /**
    *  Coupling
    */
   ShowerAlphaPtr alpha_;
 
   /**
    *  Gluon particle data object
    */
   PDPtr gluon_;
 
 private:
 
   /**
    *  The radiative variables
    */
   //@{
   /**
    *  The \f$x_p\f$ or \f$z\f$ real integration variable
    */
   double xp_;
   //@}
 
   /**
    *  The hadron
    */
   tcBeamPtr hadron_;
 
   /**
    * Selects a dynamic or fixed factorization scale
    */
   unsigned int scaleOpt_;
 
   /**
    * The factorization scale 
    */
   Energy muF_;
 
   /**
    *  Prefactor if variable scale used
    */
   double scaleFact_;
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *  Power for sampling \f$x_p\f$
    */
   double power_;
 
   /**
    *  Jacobian for \f$x_p\f$ integral
    */
   double jac_;
 
 };
 
 }
 
 #endif /* HERWIG_DISBase_H */
diff --git a/MatrixElement/DIS/MEChargedCurrentDIS.h b/MatrixElement/DIS/MEChargedCurrentDIS.h
--- a/MatrixElement/DIS/MEChargedCurrentDIS.h
+++ b/MatrixElement/DIS/MEChargedCurrentDIS.h
@@ -1,228 +1,222 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEChargedCurrentDIS_H
 #define HERWIG_MEChargedCurrentDIS_H
 //
 // This is the declaration of the MEChargedCurrentDIS class.
 //
 
 #include "DISBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEChargedCurrentDIS class provides the matrix elements for
  * charged current DIS.
  *
  *  By default both the incoming and outgong quarks are assumed to be massless
  *  although the mass of the outgoing quark can be included if required. This
  *  option should be used if top production is included.
  *
  * @see \ref MEChargedCurrentDISInterfaces "The interfaces"
  * defined for MEChargedCurrentDIS.
  */
 class MEChargedCurrentDIS: public DISBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEChargedCurrentDIS();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$\ell q\to \gamma/Z \to \ell q\f$.
    * @param f1 Fermion on lepton line
    * @param a1 Anti-fermion on lepton line
    * @param f2 Fermion on quark line
    * @param a2 Anti-fermion on quark line
    * @param lorder The order of particles on the lepton line
    * @param qorder The order of particles on the quark line
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double helicityME(vector<SpinorWaveFunction>    & f1 ,
 		    vector<SpinorWaveFunction>    & f2,
 		    vector<SpinorBarWaveFunction> & a1 ,
 		    vector<SpinorBarWaveFunction> & a2,
 		    bool lorder, bool qorder,
 		    bool me) const;
 
   /**
    *  Calculate the coefficient A for the correlations in the hard
    *  radiation
    */
   virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout,
 		   Energy2 scale) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEChargedCurrentDIS> initMEChargedCurrentDIS;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEChargedCurrentDIS & operator=(const MEChargedCurrentDIS &);
 
 private:
 
   /**
    *  Pointer to the vertex for the helicity calculations
    */
   AbstractFFVVertexPtr _theFFWVertex;
 
   /**
    *  The allowed flavours of the incoming quarks
    */
   unsigned int _maxflavour;
 
   /**
    *  Option for the mass of the outgoing quarks
    */
   unsigned int _massopt;
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  Pointers to the intermediates resonances
    */
   //@{
   /**
    *  Pointer to the \f$W^+\f$
    */
   tcPDPtr _wp;
 
   /**
    *  Pointer to the \f$W^-\f$
    */
   tcPDPtr _wm;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEChargedCurrentDIS_H */
diff --git a/MatrixElement/DIS/MENeutralCurrentDIS.h b/MatrixElement/DIS/MENeutralCurrentDIS.h
--- a/MatrixElement/DIS/MENeutralCurrentDIS.h
+++ b/MatrixElement/DIS/MENeutralCurrentDIS.h
@@ -1,272 +1,266 @@
 // -*- C++ -*-
 #ifndef HERWIG_MENeutralCurrentDIS_H
 #define HERWIG_MENeutralCurrentDIS_H
 //
 // This is the declaration of the MENeutralCurrentDIS class.
 //
 
 #include "DISBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MENeutralCurrentDIS class provides the matrix elements for
  * neutral current DIS.
  *
  *  For consistency both the incoming and outgoing quarks are assumed to be massless.
  *
  * @see \ref MENeutralCurrentDISInterfaces "The interfaces"
  * defined for MENeutralCurrentDIS.
  */
 class MENeutralCurrentDIS: public DISBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MENeutralCurrentDIS();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$\ell q\to \gamma/Z \to \ell q\f$.
    * @param f1 Fermion on lepton line
    * @param a1 Anti-fermion on lepton line
    * @param f2 Fermion on quark line
    * @param a2 Anti-fermion on quark line
    * @param lorder The order of particles on the lepton line
    * @param qorder The order of particles on the quark line
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double helicityME(vector<SpinorWaveFunction>    & f1 ,
 		    vector<SpinorWaveFunction>    & f2,
 		    vector<SpinorBarWaveFunction> & a1 ,
 		    vector<SpinorBarWaveFunction> & a2,
 		    bool lorder, bool qorder,
 		    bool me) const;
 
 
   /**
    *  Option for treatment of \f$\gamma/Z\f$ terms
    */
   inline unsigned int gammaZOption() const {return _gammaZ;}
 
   /**
    *  Calculate the coefficient A for the correlations in the hard
    *  radiation
    */
   virtual double A(tcPDPtr lin, tcPDPtr lout, tcPDPtr qin, tcPDPtr qout,
 		   Energy2 scale) const;
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MENeutralCurrentDIS> initMENeutralCurrentDIS;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MENeutralCurrentDIS & operator=(const MENeutralCurrentDIS &);
 
 private:
 
   /**
    *  Pointer to the vertices for the helicity calculations
    */
   //@{
   /**
    *  Pointer to the Z vertex
    */
   AbstractFFVVertexPtr _theFFZVertex;
 
   /**
    *  Pointer to the photon vertex
    */
   AbstractFFVVertexPtr _theFFPVertex;
   //@}
 
   /**
    *  Pointers to the intermediate resonances
    */
   //@{
   /**
    *  Pointer to the Z ParticleData object
    */
   tcPDPtr _z0;
 
   /**
    *  Pointer to the photon ParticleData object
    */
   tcPDPtr _gamma;
   //@}
 
   /**
    *  Switches to control the particles in the hard process
    */
   //@{
   /**
    *  Minimumflavour of the incoming quarks
    */
   int _minflavour;
 
   /**
    *  Maximum flavour of the incoming quarks
    */
   int _maxflavour;
 
   /**
    *  Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one
    */
   unsigned int _gammaZ;
   //@}
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  Electroweak parameters
    */
   //@{
   /**
    *  \f$\sin\theta_W\f$
    */
   double _sinW;
 
   /**
    *  \f$\cos\theta_W\f$
    */
   double _cosW;
 
   /**
    *  The square of the Z mass
    */
   Energy2 _mz2;
   //@}
 
 };
 
 }
 
 #endif /* HERWIG_MENeutralCurrentDIS_H */
diff --git a/MatrixElement/DrellYanBase.h b/MatrixElement/DrellYanBase.h
--- a/MatrixElement/DrellYanBase.h
+++ b/MatrixElement/DrellYanBase.h
@@ -1,311 +1,305 @@
 // -*- C++ -*-
 #ifndef HERWIG_DrellYanBase_H
 #define HERWIG_DrellYanBase_H
 //
 // This is the declaration of the DrellYanBase class.
 //
 
 #include "HwMEBase.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The DrellYanBase class class provides a base class for the implemented
  * of Drell-Yan type processes and provides the matrix element and POWHEG
  * style hard corrections
  *
  * @see \ref DrellYanBaseInterfaces "The interfaces"
  * defined for DrellYanBase.
  */
 class DrellYanBase: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   DrellYanBase();
 
   /**
    *  Has a POWHEG style correction
    */
   //virtual bool hasPOWHEGCorrection() {return _alpha;}
 
   virtual POWHEGType hasPOWHEGCorrection() {return ISR;}
 
 
   /**
    *  Has an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return _alpha;}
 
   /**
    *  Initialize the ME correction
    */
   virtual void initializeMECorrection(RealEmissionProcessPtr, double & initial,
 				      double & final) {
     final   = 1.;
     initial = 1.;
   }
 
   /**
    *  Apply the hard matrix element correction to a given hard process or decay
    */
   virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
 
   /**
    * Apply the soft matrix element correction
    * @param initial The particle from the hard process which started the 
    * shower
    * @param parent The initial particle in the current branching
    * @param br The branching struct
    * @return If true the emission should be vetoed
    */
   virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial,
 				     ShowerParticlePtr parent,
 				     Branching br);
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction);
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object.
    */
   virtual void setKinematics() {
     HwMEBase::setKinematics();
     mb2_ = sHat();
   }
 
 protected:
 
   /**
    *  Return the momenta and type of hard matrix element correction
    * @param quarks The original incoming particles.
    * @param beams The BeamParticleData objects
    * @param boson The momentum of the original outgoing gauge boson
    * @param iemit Whether the first (0) or second (1) particle emitted
    * the radiation
    * @param itype The type of radiated particle (0 is gluon, 1 is quark 
    *              and 2 is antiquark)
    * @param pnew The momenta of the new particles
    * @param trans The LorentzRotation from the boson rest frame to the new lab
    * @param xnew The new values of the momentuym fractions
    * @return Whether or not the matrix element correction needs to be applied
    */
   bool applyHard(ParticleVector & quarks,
 		 vector<tcBeamPtr> beams,
 		 Lorentz5Momentum boson,unsigned int & iemit,
 		 unsigned int & itype,vector<Lorentz5Momentum> & pnew,
 		 LorentzRotation & trans, pair<double,double> & xnew);
 
   /**
    * Returns the matrix element for a given type of process,
    * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$
    * @param emis_type the type of emission,
    * (0 is \f$q\bar{q}\to Vg\f$, 1 is \f$qg\to Vq\f$ and 2 is \f$g\bar{q}\to V\bar{q}\f$)
    * @param pt The transverse momentum of the jet
    * @param yj The rapidity of the jet
    */
   double getResult(int emis_type, Energy pt, double yj);
  
   /**
    *  generates the hardest emission (yj,p)
    * @param pnew The momenta of the new particles
    * @param emissiontype The type of emission, as for getResult
    * @return Whether not an emission was generated
    */
   bool getEvent(vector<Lorentz5Momentum> & pnew,int & emissiontype);
   
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Finalize this object. Called in the run phase just after a
    * run has ended. Used eg. to write out statistics.
    */
   virtual void dofinish();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<DrellYanBase> initDrellYanBase;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DrellYanBase & operator=(const DrellYanBase &);
 
 private:
 
   /**
    *  Mass squared of the vector boson
    */
   Energy2 mb2_;
 
   /**
    *  Parameters for the old-style ME correction
    */
   //@{
   /**
    *  Relative weight for the \f$q\bar{q}\f$ and \f$q/\bar{q}g\f$ channels
    */
   double _channelwgtA;
 
   /**
    *  Relative weight for the \f$qg\f$ and \f$\bar{q}g\f$ channels 
    */
   double _channelwgtB;
 
   /**
    *  Weights for the channels as a vector
    */
   vector<double> _channelweights;
   
   /**
    *  Number of weights greater than 1
    */
   unsigned int _nover;
 
   /**
    *  Maximum weight
    */
   double _maxwgt;
   //@}
 
   /**
    *  Constants for the sampling. The distribution is assumed to have the
    *  form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ 
    */
   //@{
   /**
    * The power, \f$n\f$, for the sampling
    */
   double _power;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$q\bar{q}\f$ channel
    */
   double _preqqbar;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$qg\f$ channel
    */
   double _preqg;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel
    */
   double _pregqbar;
 
   /**
    *  The prefactors as a vector for easy use
    */
   vector<double> _prefactor;
   //@}
 
   /**
    *  Properties of the incoming particles
    */
   //@{
   /**
    *  Pointers to the BeamParticleData objects
    */
   vector<tcBeamPtr> _beams;
   
   /**
    *  Pointers to the ParticleDataObjects for the partons
    */
   vector<tcPDPtr> _partons;
   //@}
 
   /**
    *  Properties of the boson and jets
    */
   //@{
   /**
    *  The rapidity of the gauge boson
    */
   double _yb;
 
   /**
    *  The mass of the gauge boson
    */
   Energy _mass;
 
   /**
    *  Whether the quark is in the + or - z direction
    */
   bool _quarkplus;
 
   /**
    *  the rapidity of the jet
    */
   double _yj;
 
   /**
    *  The transverse momentum of the jet
    */
   Energy _pt;
   //@}
 
   /**
    *  The transverse momentum of the jet
    */
   Energy _min_pt;
 
   /**
    *  Pointer to the object calculating the strong coupling
    */
   ShowerAlphaPtr _alpha;
 };
 
 }
 
 #endif /* HERWIG_DrellYanBase_H */
diff --git a/MatrixElement/Gamma/MEGammaGamma2WW.h b/MatrixElement/Gamma/MEGammaGamma2WW.h
--- a/MatrixElement/Gamma/MEGammaGamma2WW.h
+++ b/MatrixElement/Gamma/MEGammaGamma2WW.h
@@ -1,203 +1,197 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEGammaGamma2WW_H
 #define HERWIG_MEGammaGamma2WW_H
 //
 // This is the declaration of the MEGammaGamma2WW class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.fh"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.fh"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEGammaGamma2WW class provides the matrix elements for
  * \f$\gamma\gamma\to f \bar{f}\f$.
  *
  * @see \ref MEGammaGamma2WWInterfaces "The interfaces"
  * defined for MEGammaGamma2WW.
  */
 class MEGammaGamma2WW : public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEGammaGamma2WW();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$
    * @param p1   The wavefunctions for the first  incoming photon
    * @param p2   The wavefunctions for the second incoming photon
    * @param w1   The wavefunctions for the first  outgoing W
    * @param w2   The wavefunctions for the second outgoing W
    * @param calc Whether or not to calculate the matrix element
    */
   double helicityME(vector<VectorWaveFunction> & p1,
 		    vector<VectorWaveFunction> & p2,
 		    vector<VectorWaveFunction> & w1,
 		    vector<VectorWaveFunction> & w2, bool calc) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEGammaGamma2WW> initMEGammaGamma2WW;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEGammaGamma2WW & operator=(const MEGammaGamma2WW &);
 
 private:
 
   /**
    *  Treatment of the the W mass
    */
   unsigned int massOption_;
 
   /**
    *  Pointer to the gammaWW vertex
    */
   AbstractVVVVertexPtr WWWVertex_;
 
   /**
    *  Pointer to the gammagammaWW vertex
    */
   AbstractVVVVVertexPtr WWWWVertex_;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement me_;
 
 };
 
 }
 
 #endif /* HERWIG_MEGammaGamma2WW_H */
diff --git a/MatrixElement/Gamma/MEGammaGamma2ff.h b/MatrixElement/Gamma/MEGammaGamma2ff.h
--- a/MatrixElement/Gamma/MEGammaGamma2ff.h
+++ b/MatrixElement/Gamma/MEGammaGamma2ff.h
@@ -1,197 +1,191 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEGammaGamma2ff_H
 #define HERWIG_MEGammaGamma2ff_H
 //
 // This is the declaration of the MEGammaGamma2ff class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEGammaGamma2ff class provides the matrix elements for
  * \f$\gamma\gamma\to f \bar{f}\f$.
  *
  * @see \ref MEGammaGamma2ffInterfaces "The interfaces"
  * defined for MEGammaGamma2ff.
  */
 class MEGammaGamma2ff: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEGammaGamma2ff();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$\gamma\gamma\to q\bar{q}\f$
    * @param p1   The wavefunctions for the first  incoming photon
    * @param p2   The wavefunctions for the second incoming photon
    * @param f    The wavefunction  for the outgoing fermion
    * @param fbar The wavefunction  for the outgoing antifermion
    * @param calc Whether or not to calculate the matrix element
    */
   double helicityME(vector<VectorWaveFunction> &p1,vector<VectorWaveFunction> &p2,
 		    vector<SpinorBarWaveFunction> & f,
 		    vector<SpinorWaveFunction> & fbar, bool calc) const;
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEGammaGamma2ff> initMEGammaGamma2ff;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEGammaGamma2ff & operator=(const MEGammaGamma2ff &);
 
 private:
   
   /**
    *  Which processes to include
    */
   int process_;
 
   /**
    *  Pointer to the photon vertex
    */
   AbstractFFVVertexPtr vertex_;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement me_;
 
 };
 
 }
 
 #endif /* HERWIG_MEGammaGamma2ff_H */
diff --git a/MatrixElement/Gamma/MEGammaP2Jets.h b/MatrixElement/Gamma/MEGammaP2Jets.h
--- a/MatrixElement/Gamma/MEGammaP2Jets.h
+++ b/MatrixElement/Gamma/MEGammaP2Jets.h
@@ -1,243 +1,237 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEGammaP2Jets_H
 #define HERWIG_MEGammaP2Jets_H
 //
 // This is the declaration of the MEGammaP2Jets class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEGammaP2Jets class implements the matrix elements for 
  * pointlike gamma+hadron -> jets.
  *
  * @see \ref MEGammaP2JetsInterfaces "The interfaces"
  * defined for MEGammaP2Jets.
  */
 class MEGammaP2Jets: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEGammaP2Jets();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
   //@}
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$\gamma g\to q \bar{q}\f$.
    * @param gmin Polarization vectors for the incoming photon 
    * @param glin Polarization vectors for the incoming gluon
    * @param fout Spinors for the outgoing quark
    * @param aout Spinors for the outgoing antiquark
    * @param calc  Whether or not to calculate the matrix element for spin correlations
    */
   double gammagluonME(vector<VectorWaveFunction> & gmin,
 		      vector<VectorWaveFunction> & glin,
 		      vector<SpinorBarWaveFunction> & fout, 
 		      vector<SpinorWaveFunction> & aout,
 		      bool calc) const;
 
   /**
    * Matrix element for \f$\gamma q\to g q\f$.
    * @param gmin Polarization vectors for the incoming photon
    * @param fin  Spinors for the incoming quark
    * @param gout Polarization vectors for the outgong gluon
    * @param fout Spinors for the outgoing quark
    * @param calc  Whether or not to calculate the matrix element for spin correlations
    */
   double gammaquarkME(vector<VectorWaveFunction> & gmin,
 		      vector<SpinorWaveFunction> & fin,
 		      vector<VectorWaveFunction> & gout,
 		      vector<SpinorBarWaveFunction> & fout,
 		      bool calc) const;
 
   /**
    * Matrix element for \f$\gamma q\to g q\f$.
    * @param gmin Polarization vectors for the incoming photon
    * @param fin  Spinors for the incoming antiquark
    * @param gout Polarization vectors for the outgong gluon
    * @param fout Spinors for the outgoing antiquark
    * @param calc  Whether or not to calculate the matrix element for spin correlations
    */
   double gammaantiquarkME(vector<VectorWaveFunction> & gmin,
 			  vector<SpinorBarWaveFunction> & fin,
 			  vector<VectorWaveFunction> & gout,
 			  vector<SpinorWaveFunction> & fout,
 			  bool calc) const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEGammaP2Jets> initMEGammaP2Jets;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEGammaP2Jets & operator=(const MEGammaP2Jets &);
 
 private:
 
   /**
    *  Pointer to the quark-antiquark-gluon vertex
    */
   AbstractFFVVertexPtr _gluonvertex;
 
   /**
    *  Pointer to the quark-antiquark-photon vertex
    */
   AbstractFFVVertexPtr _photonvertex;
 
   /**
    *  Allowed processes
    */
   unsigned int _process;
 
   /**
    *  Minimum flavour
    */
   int _minflavour;
 
   /**
    *  Maximum flavour
    */
   int _maxflavour;
   
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
 };
 
 }
 
 #endif /* HERWIG_MEGammaP2Jets_H */
diff --git a/MatrixElement/General/GeneralHardME.h b/MatrixElement/General/GeneralHardME.h
--- a/MatrixElement/General/GeneralHardME.h
+++ b/MatrixElement/General/GeneralHardME.h
@@ -1,495 +1,489 @@
 // -*- C++ -*-
 //
 // GeneralHardME.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_GeneralHardME_H
 #define HERWIG_GeneralHardME_H
 //
 // This is the declaration of the GeneralHardME class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Utilities/Exception.h"
 #include "ThePEG/Persistency/PersistentOStream.h"
 #include "ThePEG/Persistency/PersistentIStream.h"
 #include "Herwig/Models/General/HPDiagram.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "Herwig/MatrixElement/HardVertex.h"
 #include "ThePEG/EventRecord/SpinInfo.h"
 #include "ThePEG/PDF/PolarizedBeamParticleData.h"
 #include "GeneralHardME.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 using Helicity::VertexBasePtr;
 
 /**
  * This defines the GeneralHardME class that is designed to serve as a 
  * base class for matrix elements of specific spin structures when those
  * structures are created by a a general model, i.e. a SUSY production 
  * ME. It stores a vector of diagram structures that contain the required
  * to calculate the matrix element.
  *
  * @see HwMEBase
  */
 
 class GeneralHardME: public HwMEBase {
 
 public:
 
   /**
    * Convenient typedef for size_type of HPDiagram vector 
    */
   typedef vector<HPDiagram>::size_type HPCount;
 
   /**
    *  Enum for the possible colour structures
    */
   enum ColourStructure {UNDEFINED,
                         Colour11to11,Colour11to33bar,Colour11to88,
                         Colour33to33,Colour33barto11,Colour33barto33bar,
                         Colour33barto66bar, Colour33barto6bar6,
 			Colour33to61, Colour3bar3barto6bar1,
                         Colour33to16, Colour3bar3barto16bar,
 			Colour38to3bar6, Colour38to63bar,
                         Colour33barto18,Colour33barto81,Colour33barto88,
                         Colour38to13,Colour38to31,
                         Colour38to83,Colour38to38,
                         Colour3bar3barto3bar3bar,
                         Colour3bar8to13bar,Colour3bar8to3bar1,
                         Colour3bar8to83bar,Colour3bar8to3bar8,
                         Colour88to11,Colour88to33bar,
                         Colour88to66bar,Colour88to88,
                         Colour88to18,Colour88to81};
 
 public:
 
   /**
    * The default constructor.
    */
   GeneralHardME();
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const = 0;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const {
     if(scaleChoice_==0) {
       return scaleFactor_*sHat();
     }
     else if(scaleChoice_==1) {
       Energy2 mbar = 0.5*(meMomenta()[2].mass2()+meMomenta()[3].mass2());
       Energy2 t = 0.5*(tHat()-mbar);
       Energy2 u = 0.5*(uHat()-mbar);
       Energy2 s = 0.5*sHat();
       return scaleFactor_*4.*s*t*u/(s*s+t*t+u*u);
     }
     else if(scaleChoice_ ==2) {
       Energy2 scale1 = meMomenta()[2].mass2()+meMomenta()[2].perp2();
       Energy2 scale2 = meMomenta()[3].mass2()+meMomenta()[3].perp2();
       return scaleFactor_*max(scale1,scale2);
     }
     else assert(false);
   }
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> 
   diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
   //@}
 
   /**
    * Set the diagrams and matrix of colour factors. 
    * @param process vector of MEDiagram with information that 
    * will allow the diagrams to be created in the specific matrix element
    * @param colour The colour structure for the process
    * @param debug Whether to compare the numerical answer to an analytical
    * formula (This is only stored for certain processes. It is intended
    * for quick checks of the matrix elements).
    * @param scaleOption The option of what scale to use
    * @param scaleFactor The prefactor for the scale
    */
   void setProcessInfo(const vector<HPDiagram> & process,
 		      ColourStructure colour, bool debug, 
 		      unsigned int scaleOption,
 		      double scaleFactor);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object. Called in the run phase just before
    * a run begins.
    */
   virtual void doinitrun();
   //@}
 
 protected:
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function. This is to be overidden in an inheriting class.
    */
   virtual void debug(double ) const {}  
 
 protected:
 
   /**
    * Access the HPDiagrams that store the required information
    * to create the diagrams
    */
   const vector<HPDiagram> & getProcessInfo() const {
     return diagrams_;
   }
 
   /**
    * Return the incoming pair
    * @return Pair of particle ids for the incoming particles
    */
   pair<long, long> getIncoming() const {
     return incoming_;
   }
   
   /**
    * Return the outgoing pair
    * @return Pair of particle ids for the outgoing particles
    */
   pair<long, long> getOutgoing() const {
     return outgoing_;
   }
   
   /**
    * Return the matrix of colour factors 
    */
   const vector<DVector> & getColourFactors() const {
     return colour_;
   }
 
   /**
    * Get the number of diagrams in this process
    */
   HPCount numberOfDiags() const {
     return numberOfDiagrams_;
   } 
   
   /**
    * Access number of colour flows
    */
   size_t numberOfFlows() const {
     return numberOfFlows_;
   }
 
   /**
    * Whether to print the debug information 
    */
   bool debugME() const {
     return debug_;
   }
 
   /**
    *  Set/Get Info on the selected diagram and colour flow
    */
   //@{
   /**
    * Colour flow
    */
   unsigned int colourFlow() const {return flow_;}
 
   /**
    * Colour flow
    */
   void colourFlow(unsigned int flow) const {flow_=flow;}
 
   /**
    * Diagram
    */
   unsigned int diagram() const {return diagram_;}
 
   /**
    * Diagram
    */
   void diagram(unsigned int diag) const {diagram_=diag;}
   //@}
 
   /**
    *  Calculate weight and select colour flow
    */
   double selectColourFlow(vector<double> & flow,
 			  vector<double> & me,double average) const;
 
   /**
    *  Access to the colour flow matrix element
    */
   vector<ProductionMatrixElement> & flowME() const {
     return flowME_;
   }
 
   /**
    *  Access to the diagram matrix element
    */
   vector<ProductionMatrixElement> & diagramME() const {
     return diagramME_;
   }
 
   /**
    *  Access to the colour structure
    */
   ColourStructure colour() const {return colourStructure_;}
 
   /**
    *  Extract the paricles from the subprocess
    */
   ParticleVector hardParticles(tSubProPtr subp) {
     ParticleVector output(4);
     output[0] = subp->incoming().first; 
     output[1] = subp->incoming().second;
     output[2] = subp->outgoing()[0]; 
     output[3] = subp->outgoing()[1];    
     //ensure particle ordering is the same as it was when
     //the diagrams were created
     if( output[0]->id() != getIncoming().first )
       swap(output[0], output[1]);
     if( output[2]->id() != getOutgoing().first )
       swap(output[2], output[3]);
     // return answer
     return output;
   }
 
   /**
    *  Set the rescaled momenta
    */
   void setRescaledMomenta(const ParticleVector & external) {
     cPDVector data(4);
     vector<Lorentz5Momentum> momenta(4);
     for( size_t i = 0; i < 4; ++i ) {
       data[i] = external[i]->dataPtr();
       momenta[i] = external[i]->momentum();
     }
     rescaleMomenta(momenta, data);
   }
 
   /**
    *  Create the vertes
    */
   void createVertex(ProductionMatrixElement & me,
 		    ParticleVector & external) {
     HardVertexPtr hardvertex = new_ptr(HardVertex());
     hardvertex->ME(me);
     for(ParticleVector::size_type i = 0; i < 4; ++i) {
       tSpinPtr spin = external[i]->spinInfo();
       if(i<2) {
 	tcPolarizedBeamPDPtr beam = 
 	  dynamic_ptr_cast<tcPolarizedBeamPDPtr>(external[i]->dataPtr());
 	if(beam) spin->rhoMatrix() = beam->rhoMatrix();
       }
       spin->productionVertex(hardvertex);
     }
   }
 
   /**
    *  Initialize the storage of the helicity matrix elements
    */
   void initializeMatrixElements(PDT::Spin  in1, PDT::Spin in2,
 				PDT::Spin out1, PDT::Spin out2) {
     flowME().resize(numberOfFlows(),
 		    ProductionMatrixElement(in1,in2,out1,out2));
     diagramME().resize(numberOfDiags(),
 		       ProductionMatrixElement(in1,in2,out1,out2));
   }
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<GeneralHardME> initGeneralHardME;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GeneralHardME & operator=(const GeneralHardME &);
 
 private:
   
   /**
    *  External particles
    */
   //@{
   /**
    * Store incoming particles
    */
   pair<long, long> incoming_;
   
   /**
    * Store the outgoing particles
    */
   pair<long, long> outgoing_;
   //@}
 
   /**
    *  Diagrams
    */
   //@{
   /**
    * Store all diagrams as a vector of structures
    */
   vector<HPDiagram> diagrams_;
 
   /**
    * Store the number of diagrams for fast retrieval
    */
   HPCount numberOfDiagrams_;
   //@}
 
   /**
    *  Colour information
    */
   //@{
   /**
    *  The colour structure
    */
   ColourStructure colourStructure_;
 
   /**
    * Store colour factors for ME calc.
    */
   vector<DVector> colour_;
 
   /**
    * The number of colourflows.
    */
   unsigned int numberOfFlows_;
   //@}
 
   /**
    * Whether to test the value of me2 against the analytical function
    */
   bool debug_;
 
   /**
    * The scale chocie
    */
   unsigned int scaleChoice_;
 
   /**
    *  The scale factor
    */
   double scaleFactor_;
 
   /**
    *  Info on the selected diagram and colour flow
    */
   //@{
   /**
    * Colour flow
    */
   mutable unsigned int flow_;
 
   /**
    * Diagram
    */
   mutable unsigned int diagram_;
   //@}
 
   /**
    *  Storage of the matrix elements
    */
   //@{
   /**
    *  Matrix elements for the different colour flows
    */
   mutable vector<ProductionMatrixElement> flowME_;
 
   /**
    *  Matrix elements for the different Feynman diagrams
    */
   mutable vector<ProductionMatrixElement> diagramME_;
   //@}
 
 };
 
 /** Exception class to indicate a problem has occurred with setting
     up to matrix element.*/
 class MEException : public Exception {};
   
 }
 
 #endif /* HERWIG_GeneralHardME_H */
diff --git a/MatrixElement/General/GeneralQQHiggs.h b/MatrixElement/General/GeneralQQHiggs.h
--- a/MatrixElement/General/GeneralQQHiggs.h
+++ b/MatrixElement/General/GeneralQQHiggs.h
@@ -1,369 +1,363 @@
 // -*- C++ -*-
 #ifndef HERWIG_GeneralQQHiggs_H
 #define HERWIG_GeneralQQHiggs_H
 //
 // This is the declaration of the GeneralQQHiggs class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 #include "GeneralQQHiggs.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The GeneralQQHiggs class implements the matrix elements for
  * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$.
  *
  * @see \ref GeneralQQHiggsInterfaces "The interfaces"
  * defined for GeneralQQHiggs.
  */
 class GeneralQQHiggs: public HwMEBase {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   GeneralQQHiggs();
   //@}
 
   /**
    *  Initialisation if used in a general model
    */
 
   /**
    *  Set up the matrix element
    */
   void setProcessInfo(unsigned int quark, PDPtr higgs,
 		      AbstractFFSVertexPtr vertex,
 		      unsigned int shapeOpt,
 		      unsigned int proc);
 
 public:
 
   /** @name Virtual functions required by the HwMEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$gg\to Q\bar{Q}h^0\f$
    * @param g1   The wavefunctions for the first  incoming gluon
    * @param g2   The wavefunctions for the second incoming gluon
    * @param q    The wavefunction  for the outgoing quark
    * @param qbar The wavefunction  for the outgoing antiquark
    * @param h    The wavefunction for the outgoing Higgs boson
    * @param flow The colour flow
    */
   double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 	      vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
 	      ScalarWaveFunction & h,
 	      unsigned int flow) const;
 
   /**
    * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$
    * @param q1 The wavefunction  for the incoming quark
    * @param q2 The wavefunction  for the incoming antiquark
    * @param q3 The wavefunction  for the outgoing quark
    * @param q4 The wavefunction  for the outgoing antiquark
    * @param h    The wavefunction for the outgoing Higgs boson
    * @param flow The colour flow
    */
   double qqME(vector<SpinorWaveFunction> & q1,
 	      vector<SpinorBarWaveFunction> & q2,
 	      vector<SpinorBarWaveFunction>    & q3,
 	      vector<SpinorWaveFunction>    & q4,
 	      ScalarWaveFunction & h,
 	      unsigned int flow) const;
   //@} 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GeneralQQHiggs> initGeneralQQHiggs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GeneralQQHiggs & operator=(const GeneralQQHiggs &);
 
 private:
   
   /**
    *  Switches to control the subprocess
    */
   //@{
   /**
    *  Quark Flavour
    */
   unsigned int quarkFlavour_;
   
   /**
    *  Processes to include
    */
   unsigned int process_;
   //@}
 
   /**
    *  Switches etc for the Higgs mass generation
    */
   //@{
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int shapeOpt_;
 
   /**
    *  On-shell mass for the higgs
    */
   Energy mh_;
 
   /**
    *  On-shell width for the higgs
    */
   Energy wh_;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr hmass_;
   //@}
   
   /**
    *  Vertices needed to compute the diagrams
    */
   //@{
   /**
    *  \f$ggg\f$ vertex
    */
   AbstractVVVVertexPtr GGGVertex_;
   
   /**
    *  \f$q\bar{q}g\f$ vertex
    */
   AbstractFFVVertexPtr QQGVertex_;
 
   /**
    *  \f$q\bar q h^0\f$ vertex
    */
   AbstractFFSVertexPtr QQHVertex_;
   //@}
   
 
   /**
    *  ParticleData objects of the particles
    */  
   //@{
   /**
    *  The gluon
    */
   PDPtr gluon_;
 
   /**
    * The Higgs boson
    */
   PDPtr higgs_;
   
   /**
    *  the quarks
    */
   vector<PDPtr> quark_;
 
   /**
    *  the antiquarks
    */
   vector<PDPtr> antiquark_;
   //@}
 
   /**
    *  Parameters for the phase-space generation
    */
   //@{
   /**
    *  Power for the phase-space mapping
    */
   double alpha_;
   //@}
 
   /**
    *  Colour flow
    */
   mutable unsigned int flow_;
 
   /**
    *  Diagram
    */
   mutable unsigned int diagram_;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement me_;
 };
 
 }
 
 #endif /* HERWIG_GeneralQQHiggs_H */
diff --git a/MatrixElement/General/GeneralfftoVH.h b/MatrixElement/General/GeneralfftoVH.h
--- a/MatrixElement/General/GeneralfftoVH.h
+++ b/MatrixElement/General/GeneralfftoVH.h
@@ -1,120 +1,114 @@
 // -*- C++ -*-
 #ifndef HERWIG_GeneralfftoVH_H
 #define HERWIG_GeneralfftoVH_H
 //
 // This is the declaration of the GeneralfftoVH class.
 //
 
 #include "Herwig/MatrixElement/MEfftoVH.h"
 #include "GeneralfftoVH.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the GeneralfftoVH class.
  *
  * @see \ref GeneralfftoVHInterfaces "The interfaces"
  * defined for GeneralfftoVH.
  */
 class GeneralfftoVH: public MEfftoVH {
 
 public:
 
   /**
    *  Type of process
    */
   enum Process {Lepton,HadronWplus,HadronWminus,HadronZ};
 
 public:
 
   /**
    * The default constructor.
    */
   GeneralfftoVH();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
   /**
    *  Set up the matrix element
    */
   void setProcessInfo(Process proc, PDPtr higgs,
 		      AbstractVVSVertexPtr vertex,
 		      unsigned int shapeOpt);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GeneralfftoVH> initGeneralfftoVH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GeneralfftoVH & operator=(const GeneralfftoVH &);
 
 private:
 
   /**
    *  The vector boson
    */
   Process process_;
 
 };
 
 }
 
 #endif /* HERWIG_GeneralfftoVH_H */
diff --git a/MatrixElement/General/GeneralfftoffH.h b/MatrixElement/General/GeneralfftoffH.h
--- a/MatrixElement/General/GeneralfftoffH.h
+++ b/MatrixElement/General/GeneralfftoffH.h
@@ -1,121 +1,115 @@
 // -*- C++ -*-
 #ifndef HERWIG_GeneralfftoffH_H
 #define HERWIG_GeneralfftoffH_H
 //
 // This is the declaration of the GeneralfftoffH class.
 //
 
 #include "Herwig/MatrixElement/MEfftoffH.h"
 #include "GeneralfftoffH.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the GeneralfftoffH class.
  *
  * @see \ref GeneralfftoffHInterfaces "The interfaces"
  * defined for GeneralfftoffH.
  */
 class GeneralfftoffH: public MEfftoffH {
 
 public:
 
   /**
    *  Type of process
    */
   enum Process {Lepton,Hadron};
 
 public:
 
   /**
    * The default constructor.
    */
   GeneralfftoffH();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
   /**
    *  Set up the matrix element
    */
   void setProcessInfo(Process proc, PDPtr higgs,
 		      AbstractVVSVertexPtr vertex,
 		      unsigned int shapeOpt,
 		      unsigned int process);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GeneralfftoffH> initGeneralfftoffH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GeneralfftoffH & operator=(const GeneralfftoffH &);
 
 private:
 
   /**
    *  The type of process
    */
   Process _proc;
 
 };
 
 }
 
 #endif /* HERWIG_GeneralfftoffH_H */
diff --git a/MatrixElement/General/MEff2ff.h b/MatrixElement/General/MEff2ff.h
--- a/MatrixElement/General/MEff2ff.h
+++ b/MatrixElement/General/MEff2ff.h
@@ -1,230 +1,224 @@
 // -*- C++ -*-
 //
 // MEff2ff.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEff2ff_H
 #define HERWIG_MEff2ff_H
 //
 // This is the declaration of the MEff2ff class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using Helicity::SpinorWaveFunction;
 using Helicity::SpinorBarWaveFunction;
 
 /**
  * This is the implementation of the \f$ 2\to 2\f$ matrix element for
  * a \f$ \Psi \Psi \to \Psi \Psi\f$ process. It inherits from 
  * GeneralHardME and implements the appropriate virtual functions.
  *
  * @see \ref MEff2ffInterfaces "The Interfaces"
  * defined for MEff2ff.
  * @see GeneralHardME
  */
 class MEff2ff: public GeneralHardME {
 
 public:
   
   /** Vector of SpinorWaveFunctions. */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** Vector of SpinorBarWaveFunctions. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2ff() : scalar_(0), vector_(0), tensor_(0), spin_(4), sbar_(4) 
   {}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
 private:
   
   /** @name Functions to compute the ProductionMatrixElement. */
   //@{
   /**
    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement
   ffb2ffbHeME(double & me2, bool first) const;
 
   /**
    * Compute the matrix element for \f$\Psi\Psi\to\Psi\Psi\f$
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement ff2ffHeME(double & me2, bool first) const;
   
   /**
    * Compute the matrix element for 
    * \f$\bar{\Psi}\bar{\Psi}\to\bar{\Psi}\bar{\Psi}\f$
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement fbfb2fbfbHeME(double & me2, bool first) const;
 
   /**
    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\lambda\lambda\f$
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement 
   ffb2mfmfHeME(double & me2, bool first) const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 protected:
   
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
   
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2ff> initMEff2ff;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2ff & operator=(const MEff2ff &);
 
 private:
   
   /**
    * Store the vector of FFSVertex pairs
    */
   vector<pair<AbstractFFSVertexPtr, AbstractFFSVertexPtr> > scalar_;
 
   /**
    * Store the vector of FFVVertex pairs
    */
   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > vector_;
 
   /**
    * Store the vector of FFTVertex pairs
    */
   vector<pair<AbstractFFTVertexPtr, AbstractFFTVertexPtr> > tensor_;
 
   /**
    *  Spinors
    */
   mutable vector<vector<SpinorWaveFunction> > spin_;
 
   /**
    *  Barred spinors
    */
   mutable vector<vector<SpinorBarWaveFunction> > sbar_;
 };
 
 }
 
 #endif /* HERWIG_MEff2ff_H */
diff --git a/MatrixElement/General/MEff2ss.h b/MatrixElement/General/MEff2ss.h
--- a/MatrixElement/General/MEff2ss.h
+++ b/MatrixElement/General/MEff2ss.h
@@ -1,201 +1,195 @@
 // -*- C++ -*-
 //
 // MEff2ss.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEff2ss_H
 #define HERWIG_MEff2ss_H
 //
 // This is the declaration of the MEff2ss class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::SpinorWaveFunction;
 using ThePEG::Helicity::SpinorBarWaveFunction;
 using ThePEG::Helicity::ScalarWaveFunction;
 
 /**
  * The MEff2ss class is designed to implement the matrix element for a
  * fermion-antifermion to scalar-scalar hard process. It inherits from 
  * GeneralHardME and implements the appropriate virtual functions for this 
  * specific spin combination.
  *
  * @see \ref MEff2ssInterfaces "The interfaces"
  * defined for MEff2ss.
  * @see GeneralHardME
  */
 class MEff2ss: public GeneralHardME {
 
 public:
 
   /** Vector of SpinorWaveFunctions objects */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** Vector of SpinorBarWaveFunction objects. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2ss() : fermion_(0), vector_(0), tensor_(0) {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 protected:
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2ss> initMEff2ss;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2ss & operator=(const MEff2ss &);
 
 private:
 
   /**
    * Calculate the matrix element
    * @param sp A vector of SpinorWaveFunction objects
    * @param sbar A vector of SpinorBarWaveFunction objects
    * @param sca1 A ScalarWaveFunction for an outgoing scalar
    * @param sca2 A ScalarWaveFunction for the other outgoing scalar
    * @param me2 The spin averaged matrix element
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    */
   ProductionMatrixElement ff2ssME(const SpinorVector & sp, 
 				  const SpinorBarVector & sbar, 
 				  const ScalarWaveFunction & sca1,
 				  const ScalarWaveFunction & sca2,
 				  double & me2, bool first) const;
 
 private:
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * fermion
    */
   vector<pair<AbstractFFSVertexPtr, AbstractFFSVertexPtr> > fermion_;
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * vector
    */
   vector<pair<AbstractFFSVertexPtr, AbstractSSSVertexPtr> > scalar_;
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * vector
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVSSVertexPtr> > vector_;
   
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * tensor
    */
   vector<pair<AbstractFFTVertexPtr, AbstractSSTVertexPtr> > tensor_;
 };
 
 }
 
 #endif /* HERWIG_MEff2ss_H */
diff --git a/MatrixElement/General/MEff2sv.h b/MatrixElement/General/MEff2sv.h
--- a/MatrixElement/General/MEff2sv.h
+++ b/MatrixElement/General/MEff2sv.h
@@ -1,205 +1,199 @@
 // -*- C++ -*-
 //
 // MEff2sv.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEff2sv_H
 #define HERWIG_MEff2sv_H
 //
 // This is the declaration of the MEff2sv class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using Helicity::SpinorWaveFunction;
 using Helicity::SpinorBarWaveFunction;
 using Helicity::VectorWaveFunction;
 using Helicity::ScalarWaveFunction;
 
 /**
  * The MEff2sv class is designed to implement the matrix element for a
  * fermion-antifermion to vector-scalar hard process. It inherits from 
  * GeneralHardME and implements the appropriate virtual functions for this 
  * specific spin combination.
  *
  * @see \ref MEff2svInterfaces "The interfaces"
  * defined for MEff2sv.
  * @see GeneralHardME
  */
 class MEff2sv: public GeneralHardME {
 
 public:
 
   /** @name Typedefs */
   //@{
   /**
    * A vector of SpinorWaveFunctions 
    */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /**
    * A vector of SpinorWaveBarFunctions 
    */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /**
    * A vector of VectorWaveFunctions 
    */
   typedef vector<VectorWaveFunction> VBVector;
   //@}
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2sv() : scalar_(0), vector_(0), fermion_(0) {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2sv> initMEff2sv;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2sv & operator=(const MEff2sv &);
 
 private:
 
   /** @name Functions to compute the ProductionMatrixElement. */
   //@{
   /**
    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
    * @param sp Spinors for first incoming particle
    * @param spbar SpinorBar Wavefunctions for second incoming particle
    * @param vec VectorWaveFunctions for outgoing vector
    * @param sca Outgoing ScalarWaveFunction
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement
   ffb2svHeME(SpinorVector & sp, SpinorBarVector & spbar,
 	     ScalarWaveFunction & sca, VBVector & vec, 
 	     double & me2,bool first) const;
   //@}
 
 
 private:
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * scalar
    */
   vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_;
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * vector
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVSVertexPtr> > vector_;
   
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * fermion
    */
   vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fermion_;
 };
 
 }
 
 #endif /* HERWIG_MEff2sv_H */
diff --git a/MatrixElement/General/MEff2tv.h b/MatrixElement/General/MEff2tv.h
--- a/MatrixElement/General/MEff2tv.h
+++ b/MatrixElement/General/MEff2tv.h
@@ -1,200 +1,194 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEff2tv_H
 #define HERWIG_MEff2tv_H
 //
 // This is the declaration of the MEff2tv class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using Helicity::SpinorWaveFunction;
 using Helicity::SpinorBarWaveFunction;
 using Helicity::VectorWaveFunction;
 using Helicity::TensorWaveFunction;
 
 /**
  * Here is the documentation of the MEff2tv class.
  *
  * @see \ref MEff2tvInterfaces "The interfaces"
  * defined for MEff2tv.
  */
 class MEff2tv: public GeneralHardME {
 
 public:
 
   /** @name Typedefs */
   //@{
   /**
    * A vector of SpinorWaveFunctions 
    */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /**
    * A vector of SpinorWaveBarFunctions 
    */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /**
    * A vector of VectorWaveFunctions 
    */
   typedef vector<VectorWaveFunction> VBVector;
 
   /**
    * A vector of VectorWaveFunctions 
    */
   typedef vector<TensorWaveFunction> TBVector;
   //@}
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2tv() : fermion_(0), vector_(0), fourPoint_(0) {}
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2tv> initMEff2tv;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2tv & operator=(const MEff2tv &);
 
 private:
 
   /** @name Functions to compute the ProductionMatrixElement. */
   //@{
   /**
    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
    * @param sp Spinors for first incoming particle
    * @param spbar SpinorBar Wavefunctions for second incoming particle
    * @param vec VectorWaveFunctions for outgoing vector
    * @param ten Outgoing TensorWaveFunction
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement
   ffb2tvHeME(SpinorVector & sp, SpinorBarVector & spbar,
 	     TBVector & ten, VBVector & vec,
 	     double & me2,bool first) const;
   //@}
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 private:
 
   /**
    * Store a pair of  FFTVertex and FFVVertex pointers  
    */
   vector<pair<AbstractFFTVertexPtr, AbstractFFVVertexPtr> > fermion_;
 
   /**
    *  Store a pair of FFTVertex and VVTVertex pointers
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVTVertexPtr> > vector_;
 
   /**
    *  The four point vertex
    */
   vector<AbstractFFVTVertexPtr> fourPoint_;
 
 };
 
 }
 
 #endif /* HERWIG_MEff2tv_H */
diff --git a/MatrixElement/General/MEff2vs.h b/MatrixElement/General/MEff2vs.h
--- a/MatrixElement/General/MEff2vs.h
+++ b/MatrixElement/General/MEff2vs.h
@@ -1,205 +1,199 @@
 // -*- C++ -*-
 //
 // MEff2vs.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEff2vs_H
 #define HERWIG_MEff2vs_H
 //
 // This is the declaration of the MEff2vs class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using Helicity::SpinorWaveFunction;
 using Helicity::SpinorBarWaveFunction;
 using Helicity::VectorWaveFunction;
 using Helicity::ScalarWaveFunction;
 
 /**
  * The MEff2vs class is designed to implement the matrix element for a
  * fermion-antifermion to vector-scalar hard process. It inherits from 
  * GeneralHardME and implements the appropriate virtual functions for this 
  * specific spin combination.
  *
  * @see \ref MEff2vsInterfaces "The interfaces"
  * defined for MEff2vs.
  * @see GeneralHardME
  */
 class MEff2vs: public GeneralHardME {
 
 public:
 
   /** @name Typedefs */
   //@{
   /**
    * A vector of SpinorWaveFunctions 
    */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /**
    * A vector of SpinorWaveBarFunctions 
    */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /**
    * A vector of VectorWaveFunctions 
    */
   typedef vector<VectorWaveFunction> VBVector;
   //@}
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2vs() : scalar_(0), vector_(0), fermion_(0) {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2vs> initMEff2vs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2vs & operator=(const MEff2vs &);
 
 private:
 
   /** @name Functions to compute the ProductionMatrixElement. */
   //@{
   /**
    * Compute the matrix element for \f$\Psi\bar{\Psi}\to\Psi\bar{\Psi}\f$
    * @param sp Spinors for first incoming particle
    * @param spbar SpinorBar Wavefunctions for second incoming particle
    * @param vec VectorWaveFunctions for outgoing vector
    * @param sca Outgoing ScalarWaveFunction
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement
   ffb2vsHeME(SpinorVector & sp, SpinorBarVector & spbar,
 	     VBVector & vec, ScalarWaveFunction & sca, 
 	     double & me2,bool first) const;
   //@}
 
 
 private:
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * scalar
    */
   vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_;
 
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * vector
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVSVertexPtr> > vector_;
   
   /**
    * Storage for dynamically cast vertices for a diagram with intermediate
    * fermion
    */
   vector<pair<AbstractFFVVertexPtr, AbstractFFSVertexPtr> > fermion_;
 };
 
 }
 
 #endif /* HERWIG_MEff2vs_H */
diff --git a/MatrixElement/General/MEff2vv.h b/MatrixElement/General/MEff2vv.h
--- a/MatrixElement/General/MEff2vv.h
+++ b/MatrixElement/General/MEff2vv.h
@@ -1,204 +1,198 @@
 // -*- C++ -*-
 //
 // MEff2vv.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEff2vv_H
 #define HERWIG_MEff2vv_H
 //
 // This is the declaration of the MEff2vv class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::SpinorWaveFunction;
 using ThePEG::Helicity::SpinorBarWaveFunction;
 using ThePEG::Helicity::VectorWaveFunction;
 
 /**
  * This class implements the matrix element calculation for a generic
  * \f$\Psi \Psi \rightarrow V^{\mu} V^{\nu}\f$ process. 
  *
  * @see \ref MEff2vvInterfaces "The interfaces"
  * defined for MEff2vv.
  */
 class MEff2vv: public GeneralHardME {
 public:
   
   /** Vector of SpinorWaveFunctions objects */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** Vector of SpinorBarWaveFunction objects. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /** Vector of VectorWaveFunction objects. */
   typedef vector<VectorWaveFunction> VBVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEff2vv() : vector_(0), tensor_(0), scalar_(0) {}
 
   /** @name Virtual functions required by the GeneralHardME class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 
 protected:
   
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 private: 
   
   /**
    * Compute the production matrix element.
    * @param sp Spinors for first incoming fermion
    * @param sbar SpinorBar Wavefunctions for incoming anti-fermion
    * @param v1 A vector of VectorWaveFunction objects for the first vector
    * @param m1 Whether v1 is massless or not
    * @param v2 A vector of VectorWaveFunction objects for the second vector
    * @param m2 Whether v2 is massless or not
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   ProductionMatrixElement 
   ff2vvME(const SpinorVector & sp, const SpinorBarVector sbar, 
 	  const VBVector & v1, bool m1, const VBVector & v2, bool m2,
 	  double & me2, bool first) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEff2vv> initMEff2vv;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEff2vv & operator=(const MEff2vv &);
 
 private:
 
   /**
    * Storage for a dynamically cast vertices for a tchannel vector
    * intermediate
    */
   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_;
 
   /**
    * Storage for a dynamically cast vertices for a schannel vector
    * intermediate
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVVVertexPtr> > vector_;
 
   /**
    * Storage for a dynamically cast vertices for a schannel scalar
    * intermediate
    */
   vector<pair<AbstractFFTVertexPtr, AbstractVVTVertexPtr> > tensor_;
 
   /**
    * Storage for a dynamically cast vertices for a schannel scalar
    * intermediate for massless external vector bosons
    */
   vector<pair<AbstractFFSVertexPtr, AbstractVVSVertexPtr> > scalar_;
 };
 
 }
 
 #endif /* HERWIG_MEff2vv_H */
diff --git a/MatrixElement/General/MEfv2fs.h b/MatrixElement/General/MEfv2fs.h
--- a/MatrixElement/General/MEfv2fs.h
+++ b/MatrixElement/General/MEfv2fs.h
@@ -1,211 +1,205 @@
 // -*- C++ -*-
 //
 // MEfv2fs.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEfv2fs_H
 #define HERWIG_MEfv2fs_H
 //
 // This is the declaration of the MEfv2fs class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::SpinorWaveFunction;
 using ThePEG::Helicity::SpinorBarWaveFunction;
 using ThePEG::Helicity::VectorWaveFunction;
 using ThePEG::Helicity::ScalarWaveFunction;
 
 
 /**
  * This class is designed to implement the matrix element for 
  * fermion-vector to fermion scalar. It inherits from GeneralHardME 
  * and implements the required virtual functions.
  *
  * @see @see \ref MEfv2fsInterfaces "The Interfaces"
  * defined for MEfv2fs.
  * @see GeneralHardME
  */
 class MEfv2fs: public GeneralHardME {
 
   /** Vector of SpinorWaveFunctions. */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** Vector of SpinorBarWaveFunctions. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /** Vector of VectorWaveFunctions. */
   typedef vector<VectorWaveFunction> VecWFVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEfv2fs() : scalar_(0), fermion_(0) {}
 
 public:
 
   /** @name Virtual functions required by the GeneralHardME class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param subp Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr subp);
 
 private:
 
   /** @name Functions to calculate production matrix elements and me2. */
   //@{
   /**
    * Calculate me2 and the production matrix element for the normal mode.
    * @param spIn Vector of SpinorWaveFunction for the incoming fermion
    * @param vecIn Vector of VectorWaveFunction for incoming boson
    * @param spbOut Vector of SpinorBarWaveFunction for outgoing fermion
    * @param scaOut ScalarWaveFunction for outgoing scalar.
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param full_me The value of me2 calculation
    */
   ProductionMatrixElement fv2fbsHeME(const SpinorVector & spIn, 
 				     const VecWFVector & vecIn,
 				     const SpinorBarVector & spbOut,
 				     const ScalarWaveFunction & scaOut,
 				     double & full_me, bool first) const;
   
   /**
    * Calculate me2 and the production matrix element for the cc mode.
    * @param spbIn Vector of SpinorBarWaveFunction for the incoming fermion
    * @param vecIn Vector of VectorWaveFunction for incoming boson
    * @param spOut Vector of SpinorWaveFunction for outgoing fermion
    * @param scaOut ScalarWaveFunction for outgoing scalar.
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param full_me The value of me2 calculation
    */
   ProductionMatrixElement fbv2fsHeME(const SpinorBarVector & spbIn, 
 				     const VecWFVector & vecIn,
 				     const SpinorVector & spOut,
 				     const ScalarWaveFunction & scaOut,
 				     double & full_me, bool first) const;
   //@}
 
 protected:
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEfv2fs> initMEfv2fs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEfv2fs & operator=(const MEfv2fs &);
 
 private:
 
   /**
    * Store a pair of  FFSVertex and VSSVertex pointers  
    */
   vector<pair<AbstractFFSVertexPtr, AbstractVSSVertexPtr> > scalar_;
 
   /**
    * Store a pair of  FFSVertex and FFVVertex pointers  
    */
   vector<pair<AbstractFFSVertexPtr, AbstractFFVVertexPtr> > fermion_;
   
 };
 
 }
 
 #endif /* HERWIG_MEfv2fs_H */
diff --git a/MatrixElement/General/MEfv2tf.h b/MatrixElement/General/MEfv2tf.h
--- a/MatrixElement/General/MEfv2tf.h
+++ b/MatrixElement/General/MEfv2tf.h
@@ -1,202 +1,196 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEfv2tf_H
 #define HERWIG_MEfv2tf_H
 //
 // This is the declaration of the MEfv2tf class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using ThePEG::Helicity::SpinorWaveFunction;
 using ThePEG::Helicity::SpinorBarWaveFunction;
 using ThePEG::Helicity::VectorWaveFunction;
 using ThePEG::Helicity::TensorWaveFunction;
 
 /**
  * Here is the documentation of the MEfv2tf class.
  *
  * @see \ref MEfv2tfInterfaces "The interfaces"
  * defined for MEfv2tf.
  */
 class MEfv2tf: public GeneralHardME {
 
   /** Vector of SpinorWaveFunctions. */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** Vector of SpinorBarWaveFunctions. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
   /** Vector of VectorWaveFunctions. */
   typedef vector<VectorWaveFunction> VBVector;
 
   /** Vector of TensorWaveFunctions. */
   typedef vector<TensorWaveFunction> TBVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEfv2tf() : fermion_(0), vector_(0), fourPoint_(0) {}
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   void doinit();
   //@}
 
 private:
 
   /** @name Functions to calculate production matrix elements and me2. */
   //@{
   /**
    * Calculate me2 and the production matrix element for the normal mode.
    * @param spIn Vector of SpinorWaveFunction for the incoming fermion
    * @param vecIn Vector of VectorWaveFunction for incoming boson
    * @param spbOut Vector of SpinorBarWaveFunction for outgoing fermion
    * @param tenOut TensorWaveFunction for outgoing tensor.
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param full_me The value of me2 calculation
    */
   ProductionMatrixElement fv2tfHeME(const SpinorVector & spIn, 
 				    const VBVector & vecIn,
 				    const TBVector & tenOut,
 				    const SpinorBarVector & spbOut,
 				    double & full_me, bool first) const;
 
   /**
    * Calculate me2 and the production matrix element for the cc mode.
    * @param spbIn Vector of SpinorBarWaveFunction for the incoming fermion
    * @param vecIn Vector of VectorWaveFunction for incoming boson
    * @param spOut Vector of SpinorWaveFunction for outgoing fermion
    * @param tenOut TensorWaveFunction for outgoing tensor.
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param full_me The value of me2 calculation
    */
   ProductionMatrixElement fbv2tfbHeME(const SpinorBarVector & spbIn, 
 				      const VBVector & vecIn,
 				      const TBVector & tenOut,
 				      const SpinorVector & spOut,
 				      double & full_me, bool first) const;
   //@}
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEfv2tf> initMEfv2tf;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEfv2tf & operator=(const MEfv2tf &);
 
 private:
 
   /**
    * Store a pair of  FFTVertex and FFVVertex pointers  
    */
   vector<pair<AbstractFFTVertexPtr, AbstractFFVVertexPtr> > fermion_;
 
   /**
    *  Store a pair of FFTVertex and VVTVertex pointers
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVTVertexPtr> > vector_;
 
   /**
    *  The four point vertex
    */
   vector<AbstractFFVTVertexPtr> fourPoint_;
 
 };
 
 }
 
 #endif /* HERWIG_MEfv2tf_H */
diff --git a/MatrixElement/General/MEfv2vf.h b/MatrixElement/General/MEfv2vf.h
--- a/MatrixElement/General/MEfv2vf.h
+++ b/MatrixElement/General/MEfv2vf.h
@@ -1,204 +1,198 @@
 // -*- C++ -*-
 //
 // MEfv2vf.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEfv2vf_H
 #define HERWIG_MEfv2vf_H
 //
 // This is the declaration of the MEfv2vf class.
 //
 
 #include "GeneralHardME.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the matrix element for a fermion and a vector
  * boson to a fermion and a vector boson. It inherits from GeneralHardME
  * and implements the appropriate virtual functions. 
  *
  * @see \ref MEfv2vfInterfaces "The interfaces"
  * defined for MEfv2vf.
  */
 class MEfv2vf: public GeneralHardME {
 
 public:
 
   /** A vector of SpinorWaveFunctions. */
   typedef vector<Helicity::SpinorWaveFunction> SpinorVector;
 
   /** A vector of SpinorBarWaveFunctions. */
   typedef vector<Helicity::SpinorBarWaveFunction> SpinorBarVector;
 
   /** A vector of VectorWaveFunctions. */
   typedef vector<Helicity::VectorWaveFunction> VBVector;
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 private:
 
   /** @name Functions to calculate the Helicity MatrixElement.*/
   //@{
   /**
    * Calculate the matrix element for an incoming fermion
    * @param spIn A vector of spinors for the incoming fermion
    * @param vecIn A vector of VectorWaveFunctions for the incoming boson
    * @param spbOut A vector of SpinorBarWaveFunctions for the outgoing fermion
    * @param vecOut A vector of VectorWaveFunctions for the outgoing boson
    * @param mc If the outgoing vector is massless or not
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param mesq The matrix element squared
   */
   ProductionMatrixElement
   fv2vfHeME(const SpinorVector & spIn,  const VBVector & vecIn, 
 	    const VBVector & vecOut, bool mc,
 	    const SpinorBarVector & spbOut, 
 	    double & mesq, bool first) const;
 
   /**
    * Calculate the matrix element for an incoming anti-fermion
    * @param spbIn A vector of SpinorBarWaveFunctions for the incoming anti-fermion
    * @param vecIn A vector of VectorWaveFunctions for the incoming boson
    * @param spOut A vector of Spinors for the outgoing antifermion
    * @param vecOut A vector of VectorWaveFunctions for the outgoing boson
    * @param mc If the outgoing vector is massless or not
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param mesq The matrix element squared
   */
   ProductionMatrixElement
   fbv2vfbHeME(const SpinorBarVector & spbIn,  const VBVector & vecIn, 
 	      const VBVector & vecOut, bool mc,
 	      const SpinorVector & spOut, 
 	      double & mesq, bool first) const;
   //@}
 
 protected:
   
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEfv2vf> initMEfv2vf;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEfv2vf & operator=(const MEfv2vf &);
 
 private:
   
   /** @name Store dynamically casted vertices. */
   //@{
   /**
    * A pair off FFVVertex pointers 
    */
   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_;
 
   /**
    * A pair of FFVVertex, VVVertex pointers 
    */
   vector<pair<AbstractFFVVertexPtr, AbstractVVVVertexPtr> > vector_;
     //@}
 
 };
 
 }
 
 #endif /* HERWIG_MEfv2vf_H */
diff --git a/MatrixElement/General/MEvv2ff.h b/MatrixElement/General/MEvv2ff.h
--- a/MatrixElement/General/MEvv2ff.h
+++ b/MatrixElement/General/MEvv2ff.h
@@ -1,193 +1,187 @@
 // -*- C++ -*-
 //
 // MEvv2ff.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEvv2ff_H
 #define HERWIG_MEvv2ff_H
 //
 // This is the declaration of the MEvv2ff class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::SpinorWaveFunction;
 using ThePEG::Helicity::SpinorBarWaveFunction;
 using ThePEG::Helicity::VectorWaveFunction;
 
 /**
  * This class is designed to implement the matrix element for the 
  * \f$2 \rightarrow 2\f$ process vector-vector to fermion-antifermion pair. It
  * inherits from GeneralHardME and implements the me2() virtual function.
  *
  * @see \ref MEvv2ffInterfaces "The Interfaces"
  * defined for MEvv2ff.
  * @see GeneralHardME
  * 
  */
 class MEvv2ff: public GeneralHardME {
 
 public:
   
   /** A Vector of VectorWaveFunction objects. */
   typedef vector<VectorWaveFunction> VBVector;
 
   /** A vector of SpinorBarWaveFunction objects. */
   typedef vector<SpinorWaveFunction> SpinorVector;
 
   /** A vector of SpinorBarWaveFunction objects. */
   typedef vector<SpinorBarWaveFunction> SpinorBarVector;
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 private:
 
   /**
    * Calculate the value of the matrix element 
    */
   ProductionMatrixElement vv2ffME(const VBVector & v1, const VBVector & v2,
 				  const SpinorBarVector & sbar,
 				  const SpinorVector & sp, 
 				  double & me2, bool first) const;
   
 protected:
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
   
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEvv2ff> initMEvv2ff;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEvv2ff & operator=(const MEvv2ff &);
 
 private:
   
   /** @name Dynamically casted vertices. */
   //@{
   /**
    *  Intermediate scalar
    */
   vector<pair<AbstractVVSVertexPtr, AbstractFFSVertexPtr > > scalar_;
   /**
    * Intermediate fermion 
    */
   vector<pair<AbstractFFVVertexPtr, AbstractFFVVertexPtr> > fermion_;
 
   /**
    * Intermediate vector
    */
   vector<pair<AbstractVVVVertexPtr, AbstractFFVVertexPtr> > vector_;
   
   /**
    * Intermediate tensor
    */
   vector<pair<AbstractVVTVertexPtr, AbstractFFTVertexPtr> > tensor_;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEvv2ff_H */
diff --git a/MatrixElement/General/MEvv2ss.h b/MatrixElement/General/MEvv2ss.h
--- a/MatrixElement/General/MEvv2ss.h
+++ b/MatrixElement/General/MEvv2ss.h
@@ -1,205 +1,199 @@
 // -*- C++ -*-
 //
 // MEvv2ss.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEvv2ss_H
 #define HERWIG_MEvv2ss_H
 //
 // This is the declaration of the MEvv2ss class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::VectorWaveFunction;
 using ThePEG::Helicity::ScalarWaveFunction;
 
 /**
  * This is the implementation of the matrix element for the process
  * vector-vector to scalar-scalar. It inherits from GeneralHardME and
  * implements the required virtual functions.
  *
  * @see \ref MEff2ffInterfaces "The Interfaces"
  * defined for MEff2ff.
  * @see GeneralHardME
  */
 class MEvv2ss: public GeneralHardME {
 
 public:
 
   /** A vector of VectorWaveFunction objects*/
   typedef vector<VectorWaveFunction> VBVector;
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Set the Hardvertex for the spin correlations
    * @param sub
    */
   virtual void constructVertex(tSubProPtr sub);
 
 private:
 
   /**
    * Calculate the matrix element.
    * @param v1 A vector of VectorWaveFunction objects for the first boson
    * @param v2 A vector of VectorWaveFunction objects for the second boson
    * @param sca1 A ScalarWaveFunction for the first outgoing
    * @param sca2 A ScalarWaveFunction for the second outgoing
    * @param me2 The value of the spin-summed matrix element squared
    * (to be calculated)
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    */
   ProductionMatrixElement vv2ssME(const VBVector & v1, const VBVector & v2,
 				  const ScalarWaveFunction & sca1, 
 				  const ScalarWaveFunction & sca2, 
 				  double & me2, bool first) const;
 protected:
   
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEvv2ss> initMEvv2ss;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEvv2ss & operator=(const MEvv2ss &);
 
 private:
 
   /** @name The dynamically casted vertices. */
   //@{
   /**
    * Intermediate s-channel scalar
    */
   vector<pair<AbstractVVSVertexPtr, AbstractSSSVertexPtr> > scalar1_;
 
   /**
    * Intermediate t-channel scalar
    */
   vector<pair<AbstractVSSVertexPtr, AbstractVSSVertexPtr> > scalar2_;
 
   /**
    * Intermediate t-channel scalar
    */
   vector<pair<AbstractVVSVertexPtr, AbstractVVSVertexPtr> > scalar3_;
 
   /**
    * Intermediate s-channel vector
    */
   vector<pair<AbstractVVVVertexPtr, AbstractVSSVertexPtr> > vector_;
 
   /**
    * Intermediate s-channel tensor
    */
   vector<pair<AbstractVVTVertexPtr, AbstractSSTVertexPtr> > tensor_;
   
   /**
    * The contact vertex 
    */
   AbstractVVSSVertexPtr contact_;
   //@}
   
   
 };
 
 }
 
 #endif /* HERWIG_MEvv2ss_H */
diff --git a/MatrixElement/General/MEvv2tv.h b/MatrixElement/General/MEvv2tv.h
--- a/MatrixElement/General/MEvv2tv.h
+++ b/MatrixElement/General/MEvv2tv.h
@@ -1,169 +1,163 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEvv2tv_H
 #define HERWIG_MEvv2tv_H
 //
 // This is the declaration of the MEvv2tv class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using ThePEG::Helicity::VectorWaveFunction;
 using ThePEG::Helicity::TensorWaveFunction;
 
 /**
  * Here is the documentation of the MEvv2tv class.
  *
  * @see \ref MEvv2tvInterfaces "The interfaces"
  * defined for MEvv2tv.
  */
 class MEvv2tv: public GeneralHardME {
 
   /** Vector of VectorWaveFunctions. */
   typedef vector<VectorWaveFunction> VBVector;
 
   /** Vector of TensorWaveFunctions. */
   typedef vector<TensorWaveFunction> TBVector;
 
 public:
 
   /**
    * The default constructor.
    */
   MEvv2tv() : vector_(0), fourPoint_(0) {}
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   void doinit();
   //@}
 
 private:
 
   /** @name Functions to calculate production matrix elements and me2. */
   //@{
   /**
    * Calculate me2 and the production matrix element for the normal mode.
    * @param vec1 Vector of VectorWaveFunction for the 1st incoming boson
    * @param vec2 Vector of VectorWaveFunction for the 2nd incoming boson
    * @param ten TensorWaveFunction for outgoing tensor.
    * @param vec3 Vector of VectorWaveFunction for the outgoing boson
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @param full_me The value of me2 calculation
    */
   ProductionMatrixElement vv2tvHeME(const VBVector & vec1,
 				    const VBVector & vec2,
 				    const TBVector & ten,
 				    const VBVector & vec3,
 				    double & full_me, bool first) const;
 
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEvv2tv> initMEvv2tv;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEvv2tv & operator=(const MEvv2tv &);
 
 private:
 
   /**
    * Store a pair of  FFTVertex and FFVVertex pointers  
    */
   vector<pair<AbstractVVVVertexPtr, AbstractVVTVertexPtr> > vector_;
 
   /**
    *  The four point vertex
    */
   vector<AbstractVVVTVertexPtr> fourPoint_;
 
 };
 
 }
 
 #endif /* HERWIG_MEvv2tv_H */
diff --git a/MatrixElement/General/MEvv2vs.h b/MatrixElement/General/MEvv2vs.h
--- a/MatrixElement/General/MEvv2vs.h
+++ b/MatrixElement/General/MEvv2vs.h
@@ -1,169 +1,163 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEvv2vs_H
 #define HERWIG_MEvv2vs_H
 //
 // This is the declaration of the MEvv2vs class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVSVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using Helicity::VectorWaveFunction;
 using Helicity::ScalarWaveFunction;
 
 /**
  * This is the implementation of the matrix element for 
  * \f$2\to 2\f$ massless vector-boson pair to a vector and scalar boson.
  * It inherits from GeneralHardME and implements the appropriate virtual
  * member functions.
  *
  * @see \ref MEvv2vsInterfaces "The interfaces"
  * defined for MEvv2vs.
  */
 class MEvv2vs: public GeneralHardME {
 
 public:
 
   /**
    *  Typedef for VectorWaveFunction
    */
   typedef vector<VectorWaveFunction> VBVector;
 
 public:
 
   /** @name Virtual functions required by the GeneralHardME class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 private:
 
   /**
    * Compute the matrix element for \f$V\, V\to V\, V\f$
    * @param vin1 VectorWaveFunctions for first incoming particle
    * @param vin2 VectorWaveFunctions for second incoming particle
    * @param vout1 VectorWaveFunctions for first outgoing particle
    * @param mc Whether vout1 is massless or not
    * @param sout2  ScalarWaveFunction for outgoing particle
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement 
   vv2vsHeME(VBVector & vin1, VBVector & vin2, 
 	    VBVector & vout1, bool mc, ScalarWaveFunction & sout2,
 	    double & me2, bool first ) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEvv2vs> initMEvv2vs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEvv2vs & operator=(const MEvv2vs &);
 
 private:
 
   /**
    * Store the dynamically casted VVSVertex and VSSVertex pointers
    */
   vector<pair<AbstractVVSVertexPtr, AbstractVSSVertexPtr> > scalar_;
 
   /**
    * Store the dynamically casted VVVVertex and VVSVertex pointers
    */
   vector<pair<AbstractVVVVertexPtr, AbstractVVSVertexPtr> > vector_;
 
   /**
    * Store the dynamically casted VVVSVertex pointer
    */
   AbstractVVVSVertexPtr fourPointVertex_;
 
 };
 
 }
 
 #endif /* HERWIG_MEvv2vs_H */
diff --git a/MatrixElement/General/MEvv2vv.h b/MatrixElement/General/MEvv2vv.h
--- a/MatrixElement/General/MEvv2vv.h
+++ b/MatrixElement/General/MEvv2vv.h
@@ -1,189 +1,183 @@
 // -*- C++ -*-
 //
 // MEvv2vv.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEvv2vv_H
 #define HERWIG_MEvv2vv_H
 //
 // This is the declaration of the MEvv2vv class.
 //
 
 #include "GeneralHardME.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using Helicity::VectorWaveFunction;
 
 /**
  * This is the implementation of the matrix element for 
  * \f$2\to 2\f$ massless vector-boson pair to vector-boson pair. It inherits from
  * GeneralHardME and implements the appropriate virtual member functions.
  *
  * @see \ref MEvv2vvInterfaces "The interfaces"
  * defined for MEvv2vv.
  */
 class MEvv2vv: public GeneralHardME {
 
 public:
 
   /**
    *  Typedef for VectorWaveFunction
    */
   typedef vector<VectorWaveFunction> VBVector;
 
 public:
 
   /** @name Virtual functions required by the GeneralHardME class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
   //@}
 
   /**
    * Construct the vertex information for the spin correlations
    * @param sub Pointer to the relevent SubProcess
    */
   virtual void constructVertex(tSubProPtr sub);
 
 private:
 
   /**
    * Compute the matrix element for \f$V\, V\to V\, V\f$
    * @param vin1 VectorWaveFunctions for first incoming particle
    * @param vin2 VectorWaveFunctions for second incoming particle
    * @param vout1 VectorWaveFunctions for first outgoing particle
    * @param mc Whether vout1 is massless or not
    * @param vout2  VectorWaveFunctions for outgoing particle
    * @param md Whether vout2 is massless or not
    * @param me2 colour averaged, spin summed ME
    * @param first Whether or not first call to decide if colour decomposition etc
    * should be calculated
    * @return ProductionMatrixElement containing results of 
    * helicity calculations
    */
   ProductionMatrixElement 
   vv2vvHeME(VBVector & vin1, VBVector & vin2, 
 	    VBVector & vout1, bool mc, VBVector & vout2, bool md,
 	    double & me2, bool first ) const;
 
 protected:
   
   /**
    * A debugging function to test the value of me2 against an
    * analytic function.
    * @param me2 The value of the \f$ |\bar{\mathcal{M}}|^2 \f$
    */
   virtual void debug(double me2) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEvv2vv> initMEvv2vv;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEvv2vv & operator=(const MEvv2vv &);
 
 private:
 
   /**
    * Store the dynamically casted VVSVertex pointers
    */
   vector<pair<AbstractVVSVertexPtr, AbstractVVSVertexPtr> > scalar_;
 
   /**
    * Store the dynamically casted VVVVertex pointers
    */
   vector<pair<AbstractVVVVertexPtr, AbstractVVVVertexPtr> > vector_;
 
   /**
    * Store the dynamically casted VVTVertex pointers
    */
   vector<pair<AbstractVVTVertexPtr, AbstractVVTVertexPtr> > tensor_;
 
   /**
    * Store the dynamically casted VVVVVertex pointer
    */
   AbstractVVVVVertexPtr fourPointVertex_;
   
 };
 
 }
 
 #endif /* HERWIG_MEvv2vv_H */
diff --git a/MatrixElement/Hadron/MEDiffraction.h b/MatrixElement/Hadron/MEDiffraction.h
--- a/MatrixElement/Hadron/MEDiffraction.h
+++ b/MatrixElement/Hadron/MEDiffraction.h
@@ -1,309 +1,303 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEDiffraction_H
 #define HERWIG_MEDiffraction_H
 //
 // This is the declaration of the MEDiffraction class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEDiffraction class provides a simple colour singlet exchange matrix element
  * to be used in the soft component of the multiple scattering model of the 
  * underlying event
  *
  * @see \ref MEDiffractionInterfaces "The interfaces"
  * defined for MEDiffraction.
  */
 class MEDiffraction: public HwMEBase {
 
 public:
 
   MEDiffraction();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
   //@}
 
   /**
    * Expect the incoming partons in the laboratory frame
    */
   /* virtual bool wantCMS() const { return false; } */
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Initialize this object. Called in the run phase just before a run begins.
    */
   virtual void doinitrun();
   //@}
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /* The matrix element squared */
   double theme2;
   
   /* Use only delta as excited state */
   bool deltaOnly; 
 
   
   /* Direction of the excited proton */
   unsigned int diffDirection; 
   
   /* Number of clusters the dissociated proton decays into */
   unsigned int dissociationDecay; 
   
   /* The mass of the consitutent quark */
   Energy mq() const {return Energy(0.325*GeV);}
   
   /* The mass of the constituent diquark */
   Energy mqq() const {return Energy(0.650*GeV);}
   
   /* The proton-pomeron slope */
   double theprotonPomeronSlope;
   
   /* The soft pomeron intercept */
   double thesoftPomeronIntercept;
   
   /* The soft pomeron slope */
   double thesoftPomeronSlope;
  
   
   /**
    * Sample the diffractive mass squared M2 and the momentum transfer t
    */
   pair<pair<Energy2,Energy2>,Energy2> diffractiveMassAndMomentumTransfer() const;
   
 
   /**
    * Random value for the diffractive mass squared M2 according to (M2/s0)^(-intercept)
    */
   Energy2 randomM2() const;
 
   /**
    * Random value for t according to exp(diffSlope*t)
    */
   Energy2 randomt(Energy2 M2) const;
   
   /**
    * Random value for t according to exp(diffSlope*t) for double diffraction
    */
   
   Energy2 doublediffrandomt(Energy2 M12, Energy2 M22) const;
   
   
   /**
    * Returns the momenta of the two-body decay of momentum pp
    */
   pair<Lorentz5Momentum,Lorentz5Momentum> twoBodyDecayMomenta(Lorentz5Momentum pp) const;
 
   /**
    * Returns the proton-pomeron slope
    */
   InvEnergy2 protonPomeronSlope() const; 
   
   /**
    * Returns the soft pomeron intercept
    */  
   double softPomeronIntercept() const; 
  
   //M12 and M22 are masses squared of 
   //outgoing particles
   
   /**
    * Returns the minimal possible value of momentum transfer t given the center
    * of mass energy and diffractive masses
    */
   Energy2 tminfun(Energy2 s, Energy2 M12, Energy2 M22) const;
  
   /**
    * Returns the maximal possible value of momentum transfer t given the center
    * of mass energy and diffractive masses
    */
   Energy2 tmaxfun(Energy2 s , Energy2 M12, Energy2 M22) const; 
 
   /**
    * Returns the minimal possible value of diffractive mass
    */
   //lowest possible mass given the constituent masses of quark and diquark
   Energy2 M2min() const{return sqr(getParticleData(2212)->mass()+mq()+mqq());}
   
   /**
    * Returns the maximal possible value of diffractive mass
    */
   Energy2 M2max() const{
     return sqr(generator()->maximumCMEnergy()-getParticleData(2212)->mass());
   }//TODO:modify to get proper parameters
 
   InvEnergy2 softPomeronSlope() const;
   
    
 
   /* Kallen function */
   template<int L, int E, int Q, int DL, int DE, int DQ>
   Qty<2*L,2*E,2*Q,DL,DE,DQ> kallen(Qty<L,E,Q,DL,DE,DQ> a,
                                    Qty<L,E,Q,DL,DE,DQ> b,
                                    Qty<L,E,Q,DL,DE,DQ> c) const {
     return a*a + b*b + c*c - 2.0*(a*b + b*c + c*a);
   }
   
   
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEDiffraction> initMEDiffraction;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEDiffraction & operator=(const MEDiffraction &);
 
   bool isInRunPhase; 
   
  
   /* The proton mass */
   Energy theProtonMass;
   
 };
 
 }
 
 #endif /* HERWIG_MEDiffraction_H */
diff --git a/MatrixElement/Hadron/MEMinBias.h b/MatrixElement/Hadron/MEMinBias.h
--- a/MatrixElement/Hadron/MEMinBias.h
+++ b/MatrixElement/Hadron/MEMinBias.h
@@ -1,196 +1,190 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEMinBias_H
 #define HERWIG_MEMinBias_H
 //
 // This is the declaration of the MEMinBias class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEMinBias class provides a simple colour singlet exchange matrix element
  * to be used in the soft component of the multiple scattering model of the 
  * underlying event
  *
  * @see \ref MEMinBiasInterfaces "The interfaces"
  * defined for MEMinBias.
  */
 class MEMinBias: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEMinBias() : csNorm_(1.) {}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
   //@}
 
 
 public:
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
 
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 
 // If needed, insert declarations of virtual function defined in the
 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
 
 
 private:
   /**
   *  Normalization of the min-bias cross section
   */
   double csNorm_;	
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEMinBias> initMEMinBias;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEMinBias & operator=(const MEMinBias &);
 
 };
 
 }
 
 #endif /* HERWIG_MEMinBias_H */
diff --git a/MatrixElement/Hadron/MEPP2GammaGamma.h b/MatrixElement/Hadron/MEPP2GammaGamma.h
--- a/MatrixElement/Hadron/MEPP2GammaGamma.h
+++ b/MatrixElement/Hadron/MEPP2GammaGamma.h
@@ -1,257 +1,251 @@
 // -*- C++ -*-
 //
 // MEPP2GammaGamma.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2GammaGamma_H
 #define HERWIG_MEPP2GammaGamma_H
 //
 // This is the declaration of the MEPP2GammaGamma class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2GammaGamma class implements the production of photon pairs in 
  * hadron hadron collisions.
  *
  * @see \ref MEPP2GammaGammaInterfaces "The interfaces"
  * defined for MEPP2GammaGamma.
  */
 class MEPP2GammaGamma: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2GammaGamma() : _maxflavour(5),_process(0), scalePreFactor_(1.) {
     massOption(vector<unsigned int>(2,0));
   }
   
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
    *  Members to return the matrix elements for the different subprocesses
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to \gamma\gamma\f$.
    * @param fin Spinors for incoming quark
    * @param ain Spinors for incoming antiquark
    * @param p1  Polarization vectors for the first  outgoing photon
    * @param p2  Polarization vectors for the second outgoing photon
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain,
 		 vector<VectorWaveFunction> & p1 , vector<VectorWaveFunction>    & p2 ,
 		 bool me) const;
 
   /**
    * Matrix element for \f$gg \to \gamma\gamma\f$.
    * @param g1  Polarization vectors for the first  incoming gluon
    * @param g2  Polarization vectors for the second incoming gluon
    * @param p1  Polarization vectors for the first  outgoing photon
    * @param p2  Polarization vectors for the second outgoing photon
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double ggME(vector<VectorWaveFunction> & g1 , vector<VectorWaveFunction>    & g2 ,
 	      vector<VectorWaveFunction> & p1 , vector<VectorWaveFunction>    & p2 ,
 	      bool me) const;
   //@}
 
   /**
    *  \f$gg\to\gamma\gamma\f$ matrix element for the \f$++++\f$ helicity configuration.
    * @param s The \f$s\f$ invariant
    * @param t The \f$t\f$ invariant
    * @param u The \f$u\f$ invariant
    */
   Complex ggme(Energy2 s,Energy2 t,Energy2 u) const {
     double ltu(log(abs(t/u)));
     double frac1((t-u)/s),frac2((sqr(t)+sqr(u))/sqr(s));
     double thetatu = (t/u<0) ? 0 : 1;
     double thetat  = (t<ZERO)   ? 0 : 1;
     double thetau  = (u<ZERO)   ? 0 : 1;
     using Constants::pi;
     return Complex(1.+frac1*ltu+0.5*frac2*(sqr(ltu)+sqr(pi)*thetatu),
 		   -pi*(thetat-thetau)*(frac1+frac2*ltu));
   }
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2GammaGamma> initMEPP2GammaGamma;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2GammaGamma & operator=(const MEPP2GammaGamma &);
 
 private:
 
   /**
    *  Pointer to the quark-antiquark-photon vertex
    */
   AbstractFFVVertexPtr _photonvertex;
 
   /**
    *  Maximum PDG code of the quarks allowed
    */
   unsigned int _maxflavour;
 
   /**
    *  Option for which processes to include
    */
   unsigned int _process;
   
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  weights for the different quark annhilation diagrams
    */
   mutable double _diagwgt[2];
 
   /**
    *  Scale prefactor
    */
   double scalePreFactor_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2GammaGamma_H */
diff --git a/MatrixElement/Hadron/MEPP2GammaJet.h b/MatrixElement/Hadron/MEPP2GammaJet.h
--- a/MatrixElement/Hadron/MEPP2GammaJet.h
+++ b/MatrixElement/Hadron/MEPP2GammaJet.h
@@ -1,269 +1,263 @@
 // -*- C++ -*-
 //
 // MEPP2GammaJet.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2GammaJet_H
 #define HERWIG_MEPP2GammaJet_H
 //
 // This is the declaration of the MEPP2GammaJet class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup MatrixElements
  * The MEPP2GammaJet class implements the matrix element for photon+jet 
  * production in hadron-hadron collisions.
  *
  * @see \ref MEPP2GammaJetInterfaces "The interfaces"
  * defined for MEPP2GammaJet.
  */
 class MEPP2GammaJet: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2GammaJet();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Rebind pointer to other Interfaced objects. Called in the setup phase
    * after all objects used in an EventGenerator has been cloned so that
    * the pointers will refer to the cloned objects afterwards.
    * @param trans a TranslationMap relating the original objects to
    * their respective clones.
    * @throws RebindException if no cloned object was found for a given
    * pointer.
    */
   virtual void rebind(const TranslationMap & trans)
    ;
 
   /**
    * Return a vector of all pointers to Interfaced objects used in this
    * object.
    * @return a vector of pointers.
    */
   virtual IVector getReferences();
   //@}
 
 private:
 
   /**
    *  Members to return the matrix elements for the different subprocesses
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to g\gamma\f$.
    * @param fin   Spinors for incoming quark
    * @param ain   Spinors for incoming antiquark
    * @param gout  Polarization vectors for the outgoing gluon
    * @param pout  Polarization vectors for the outgoing photon
    * @param me    Whether or not to calculate the matrix element for spin correlations
    */
   double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain,
 		 vector<VectorWaveFunction> & gout, vector<VectorWaveFunction>    & pout,
 		 bool me) const;
 
   /**
    * Matrix element for \f$qg\to \gamma q\f$.
    * @param fin   Spinors for incoming quark
    * @param gin   Polarization vectors for the incoming gluon
    * @param pout  Polarization vectors for the outgoing photon
    * @param fout  Spinors for outgoing quark
    * @param me    Whether or not to calculate the matrix element for spin correlations
    */
   double qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction>     & gin,
 	      vector<VectorWaveFunction> & pout,vector<SpinorBarWaveFunction> & fout,
 	      bool me) const;
 
   /**
    * Matrix element for \f$\bar{q}g\to \gamma \bar{q}\f$.
    * @param ain   Spinors for the incoming antiquark
    * @param gin   Polarization vectors for the incoming gluon
    * @param pout  Polarization vectors for the outgoing photon
    * @param aout  Spinors for the outgoing antiquark
    * @param me    Whether or not to calculate the matrix element for spin correlations
    */
   double qbargME(vector<SpinorBarWaveFunction> & ain, vector<VectorWaveFunction> & gin,
 		 vector<VectorWaveFunction> & pout, vector<SpinorWaveFunction> & aout,
 		 bool me) const;
   //@}
   
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2GammaJet> initMEPP2GammaJet;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2GammaJet & operator=(const MEPP2GammaJet &);
 
 private:
 
   /**
    *  Pointer to the quark-antiquark-gluon vertex
    */
   AbstractFFVVertexPtr _gluonvertex;
 
   /**
    *  Pointer to the quark-antiquark-photon vertex
    */
   AbstractFFVVertexPtr _photonvertex;
 
   /**
    *  Maximum PDG code of the quarks allowed
    */
   int _maxflavour;
 
   /**
    *  Option for which processes to include
    */
   unsigned int _processopt;
   
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  Scale prefactor
    */
   double scalePreFactor_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2GammaJet_H */
diff --git a/MatrixElement/Hadron/MEPP2Higgs.h b/MatrixElement/Hadron/MEPP2Higgs.h
--- a/MatrixElement/Hadron/MEPP2Higgs.h
+++ b/MatrixElement/Hadron/MEPP2Higgs.h
@@ -1,708 +1,702 @@
 // -*- C++ -*-
 //
 // MEPP2Higgs.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2Higgs_H
 #define HERWIG_MEPP2Higgs_H
 //
 // This is the declaration of the MEPP2Higgs class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2Higgs class implements the matrix element for the process
  * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211)
  * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual).
  *
  * @see \ref MEPP2HiggsInterfaces "The interfaces"
  * defined for MEPP2Higgs.
  */
 class MEPP2Higgs: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2Higgs();
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object.
    */
   virtual void setKinematics() {
     HwMEBase::setKinematics();
     mh2_ = sHat();
   }
 
 public:
  
   /** @name Member functions for the generation of hard QCD radiation */
   //@{
   /**
    *  Has a POWHEG style correction
    */
   virtual POWHEGType hasPOWHEGCorrection() {return ISR;}
 
   /**
    *  Has an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return true;}
 
   /**
    *  Initialize the ME correction
    */
   virtual void initializeMECorrection(RealEmissionProcessPtr, double &,
 				      double & );
 
   /**
    *  Apply the hard matrix element correction to a given hard process or decay
    */
   virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
 
   /**
    * Apply the soft matrix element correction
    * @param initial The particle from the hard process which started the 
    * shower
    * @param parent The initial particle in the current branching
    * @param br The branching struct
    * @return If true the emission should be vetoed
    */
   virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial,
 				     ShowerParticlePtr parent,
 				     Branching br);
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction);
   //@}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *> colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
  
   /**
    * Finalize this object. Called in the run phase just after a
    * run has ended. Used eg. to write out statistics.
    */
   virtual void dofinish();
   //@}
 
 protected:
   
   /**
    *   Members to calculate the real emission matrix elements
    */
   //@{
   /**
    *  The leading-order matrix element for \f$gg\to H\f$
    */
   Energy4 loME() const;
 
   /**
    *  The matrix element for \f$gg\to H g\f$
    */
   Energy2 ggME(Energy2 s, Energy2 t, Energy2 u);
 
   /**
    *  The matrix element for \f$qg\to H q\f$
    */
   Energy2 qgME(Energy2 s, Energy2 t, Energy2 u);
 
   /**
    *  The matrix element for \f$qbarg\to H qbar\f$
    */
   Energy2 qbargME(Energy2 s, Energy2 t, Energy2 u);
   //@}
 
   /**
    *  Members to calculate the functions for the loop diagrams
    */
   //@{
   /**
    *  The \f$B(s)\f$ function of NBP339 (1990) 38-66
    * @param s The scale
    * @param mf2 The fermion mass squared.
    */
   Complex B(Energy2 s,Energy2 mf2) const;
 
   /**
    *  The \f$C(s)\f$ function of NBP339 (1990) 38-66
    * @param s The scale
    * @param mf2 The fermion mass squared.
    */
   complex<InvEnergy2> C(Energy2 s,Energy2 mf2) const;
 
   /**
    *  The \f$C(s)\f$ function of NBP339 (1990) 38-66
    * @param s The \f$s\f$ invariant
    * @param t The \f$t\f$ invariant
    * @param u The \f$u\f$ invariant
    * @param mf2 The fermion mass squared
    */
   complex<InvEnergy4> D(Energy2 s,Energy2 t, Energy2 u,Energy2 mf2) const;
 
   /**
    * The integral \f$\int\frac{dy}{y-y_0}\log(a-i\epsilon-b y(1-y))\f$
    * from NBP339 (1990) 38-66.
    * @param a  The parameter \f$a\f$.
    * @param b  The parameter \f$b\f$.
    * @param y0 The parameter \f$y_0\f$.
    */
   Complex dIntegral(Energy2 a, Energy2 b, double y0) const;
 
   /**
    *  The \f$M_{+++}\f$ matrix element of NBP339 (1990) 38-66.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    * @param i Which of the stored values to use for \f$D(u,t)\f$.
    * @param j Which of the stored values to use for \f$D(u,s)\f$.
    * @param k Which of the stored values to use for \f$D(s,t)\f$.
    * @param i1 Which of the stored values to use for \f$C_1(s)\f$.
    * @param j1 Which of the stored values to use for \f$C_1(t)\f$.
    * @param k1 Which of the stored values to use for \f$C_1(u)\f$.
    */
   complex<Energy> me1(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2,
 			     unsigned int i,unsigned int j, unsigned int k,
 			     unsigned int i1,unsigned int j1, unsigned int k1) const;
 
   /**
    *  The \f$M_{++-}\f$ matrix element of NBP339 (1990) 38-66.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   complex<Energy> me2(Energy2 s,Energy2 t,Energy2 u, Energy2 mf2) const;
 
   /**
    *  The \f$F(x)\f$ function for the leading-order result
    */
   Complex F(double x) const;
   //@}
 
   /**
    *  Method to extract the PDF weight for quark/antiquark
    * initiated processes and select the quark flavour
    */  
   tPDPtr quarkFlavour(tcPDFPtr pdf, Energy2 scale, double x, tcBeamPtr beam, 
 		      double & pdfweight, bool anti);
 
   /**
    * Return the momenta and type of hard matrix element correction
    * @param gluons The original incoming particles.
    * @param beams The BeamParticleData objects
    * @param higgs The original outgoing higgs
    * @param iemit Whether the first (0) or second (1) particle emitted
    * the radiation
    * @param itype The type of radiated particle (0 is gluon, 1 is quark 
    *              and 2 is antiquark)
    * @param pnew The momenta of the new particles
    * @param xnew The new values of the momentuym fractions
    * @param out The ParticleData object for the outgoing parton
    * @return Whether or not the matrix element correction needs to be applied
    */
   bool applyHard(ParticleVector gluons,
 		 vector<tcBeamPtr> beams,
 		 PPtr higgs,unsigned int & iemit,
 		 unsigned int & itype,vector<Lorentz5Momentum> & pnew,
 		 pair<double,double> & xnew,
 		 tPDPtr & out);
 
   /**
    *  generates the hardest emission (yj,p)
    * @param pnew The momenta of the new particles
    * @param emissiontype The type of emission, as for getResult
    * @return Whether not an emission was generated
    */
   bool getEvent(vector<Lorentz5Momentum> & pnew,int & emissiontype);
 
   /**
    * Returns the matrix element for a given type of process,
    * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$
    * @param emis_type the type of emission,
    * (0 is \f$gg\to h^0g\f$, 1 is \f$qg\to h^0q\f$ and 2 is \f$g\bar{q}\to h^0\bar{q}\f$)
    * @param pt The transverse momentum of the jet
    * @param yj The rapidity of the jet
    * @param outParton the outgoing parton
    */
   double getResult(int emis_type, Energy pt, double yj,tcPDPtr & outParton);
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2Higgs> initMEPP2Higgs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2Higgs & operator=(const MEPP2Higgs &);
   //@}
 
   /**
    *  Members to return the matrix elements for the different subprocesses
    */
   //@{
   /**
    * Calculates the matrix element for the process g,g->h (via quark loops)
    * @param g1 a vector of wave functions of the first incoming gluon
    * @param g2 a vector of wave functions of the second incoming gluon
    * @param calc Whether or not to calculate the matrix element for spin correlations
    * @return the amlitude value.
    */
   double ggME(vector<VectorWaveFunction> g1,
               vector<VectorWaveFunction> g2,
               ScalarWaveFunction &, 
               bool calc) const;
 
   /**
    * Calculates the matrix element for the process q,qbar->h
    * @param fin a vector of quark spinors
    * @param ain a vector of anti-quark spinors
    * @param calc Whether or not to calculate the matrix element for spin correlations
    * @return the amlitude value.
    */
   double qqME(vector<SpinorWaveFunction> & fin, 
               vector<SpinorBarWaveFunction> & ain, 
               ScalarWaveFunction &, 
               bool calc) const;
   //@}
 
 private:
 
   /**
    * Selects a dynamic (sHat) or fixed factorization scale
    */
   unsigned int scaleopt_;
 
   /**
    * The value associated to the fixed factorization scale option
    */
   Energy mu_F_;
 
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int shapeOption_;
 
   /**
    * The processes to be included (GG->H and/or qq->H)
    */
   unsigned int processOption_;
 
   /**
    * Minimum flavour of incoming quarks
    */
   int minFlavour_;
 
   /**
    * Maximum flavour of incoming quarks
    */
   int maxFlavour_;
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement me_;
 
   /**
    * Pointer to the H-> 2 gluon vertex (used in gg->H)
    */
   AbstractVVSVertexPtr HGGVertex_;
 
   /**
    * Pointer to the fermion-fermion Higgs vertex (used in qq->H)
    */
   AbstractFFSVertexPtr HFFVertex_;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr hmass_;
 
   /**
    *  On-shell mass for the higgs
    */
   Energy mh_;
 
   /**
    *  On-shell width for the higgs
    */
   Energy wh_;
 
   /**
    *  Stuff for the ME correction
    */
   //@{
   /**
    *  Parameters for the evaluation of the loops for the 
    *  matrix elements
    */
   //@{
   /**
    *  Minimum flavour of quarks to include in the loops
    */
   unsigned int minLoop_;
 
   /**
    *  Maximum flavour of quarks to include in the loops
    */
   unsigned int maxLoop_;
 
   /**
    *  Option for treatment of the fermion loops
    */
   unsigned int massOption_;
 
   /**
    *  Option for dynamic scale choice in alpha_S (0=mT,>0=pT)
    */
   unsigned int mu_R_opt_;
 
   /**
    *  Option for dynamic scale choice in PDFs    (0=mT,>0=pT)
    */
   unsigned int mu_F_opt_;
   //@}
 
   //@}
 
   /**
    *  Small complex number to regularize some integrals
    */
   static const complex<Energy2> epsi_;
 
   /**
    *  Storage of the loop functions
    */
   //@{
   /**
    *  B functions
    */
   mutable Complex bi_[5];
 
   /**
    *  C functions
    */
   mutable complex<InvEnergy2> ci_[8];
 
   /**
    *  D functions
    */
   mutable complex<InvEnergy4> di_[4];
   //@}
 
   /**
    *  Pointer to the object calculating the strong coupling
    */
   ShowerAlphaPtr alpha_;
 
   /**
    *  Mass squared of Higgs
    */  
   Energy2 mh2_;
 
   /**
    *  Relative weight of the \f$qg\f$ to the \f$gg\f$  channel
    */
   double channelwgtA_;
 
   /**
    *  Relative weight for the \f$\bar{q}g\f$ to the \f$gg\f$  channel
    */
   double channelwgtB_;
 
   /**
    *  Weights for the channels as a vector
    */
   vector<double> channelWeights_;
 
   /**
    *  Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling
    *  of the \f$gg\f$ component 
    */
   double ggPow_;
 
   /**
    *  Power for the \f$\frac{{\rm d}\hat{s}}{\hat{s}^n}\f$ importance sampling
    *  of the \f$qg\f$ and \f$\bar{q}g\f$ components 
    */
   double qgPow_;
 
   /**
    *  The enhancement factor for initial-state radiation
    */
   double enhance_;
   
   /**
    *  Number of weights greater than 1
    */
   unsigned int nover_;
 
   /**
    *  Number of attempts
    */
   unsigned int ntry_;
 
   /**
    *  Number which suceed
    */
   unsigned int ngen_;
 
   /**
    *  Maximum weight
    */
   double maxwgt_;
   //@}
 
   /**
    *  Constants for the sampling. The distribution is assumed to have the
    *  form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ 
    */
   //@{
   /**
    * The power, \f$n\f$, for the sampling
    */
   double power_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$gg\f$ channel
    */
   double pregg_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$qg\f$ channel
    */
   double preqg_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel
    */
   double pregqbar_;
 
   /**
    *  The prefactors as a vector for easy use
    */
   vector<double> prefactor_;
   //@}
 
   /**
    *  The transverse momentum of the jet
    */
   Energy minpT_;
 
   /**
    *  Properties of the incoming particles
    */
   //@{
   /**
    *  Pointers to the BeamParticleData objects
    */
   vector<tcBeamPtr> beams_;
   
   /**
    *  Pointers to the ParticleDataObjects for the partons
    */
   vector<tcPDPtr> partons_;
   //@}
 
   /**
    *  Properties of the boson and jets
    */
   //@{
   /**
    *  The rapidity of the Higgs boson
    */
   double yh_;
 
   /**
    *  The mass of the Higgs boson
    */
   Energy mass_;
 
   /**
    *  the rapidity of the jet
    */
   double yj_;
 
   /**
    *  The transverse momentum of the jet
    */
   Energy pt_;
 
   /**
    *  The outgoing parton
    */
   tcPDPtr out_;
   //@}
 
   /**
    *  Whether of not to construct the vertex for spin correlations
    */
   bool spinCorrelations_;
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2Higgs_H */
diff --git a/MatrixElement/Hadron/MEPP2HiggsJet.h b/MatrixElement/Hadron/MEPP2HiggsJet.h
--- a/MatrixElement/Hadron/MEPP2HiggsJet.h
+++ b/MatrixElement/Hadron/MEPP2HiggsJet.h
@@ -1,455 +1,449 @@
 // -*- C++ -*-
 //
 // MEPP2HiggsJet.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2HiggsJet_H
 #define HERWIG_MEPP2HiggsJet_H
 //
 // This is the declaration of the MEPP2HiggsJet class.
 //
 
 #include "ThePEG/MatrixElement/ME2to2Base.h"
 #include "Herwig/Utilities/Maths.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2HiggsJet class implements the matrix element for Higgs+jet production.
  *
  * @see \ref MEPP2HiggsJetInterfaces "The interfaces"
  * defined for MEPP2HiggsJet.
  */
 class MEPP2HiggsJet: public ME2to2Base {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2HiggsJet() :  
     _shapeopt(2),_maxflavour(5), _process(0),
     _minloop(6),_maxloop(6),_massopt(0) , _mh(ZERO),_wh(ZERO)
   {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
    *  Members to return the matrix elements for the different subprocesses
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to Hg\f$.
    * @param fin   Spinors for incoming quark
    * @param ain   Spinors for incoming antiquark
    * @param hout  Wavefunction for the outgoing higgs
    * @param gout  Polarization vectors for the outgoing gluon
    * @param me    Whether or not to calculate the matrix element for spin correlations
    **/
   double qqbarME(vector<SpinorWaveFunction> & fin, vector<SpinorBarWaveFunction> & ain,
 		 ScalarWaveFunction & hout, vector<VectorWaveFunction> & gout,
 		 bool me) const;
 
   /**
    * Matrix element for \f$qg\to Hq\f$.
    * @param fin  Spinors for incoming quark
    * @param gin  Polarization vectors for the incoming gluon
    * @param hout Wavefunction for the outgoing higgs
    * @param fout Spinors for outgoing quark
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   double qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction> & gin,
 	      ScalarWaveFunction & hout, vector<SpinorBarWaveFunction> & fout,
 	      bool me) const;
 
   /**
    * Matrix element for \f$\bar{q}g\to H\bar{q}\f$.
    * @param fin  Spinors for incoming antiquark
    * @param gin  Polarization vectors for the incoming gluon
    * @param hout Wavefunction for the outgoing higgs
    * @param fout Spinors for outgoing antiquark
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   double qbargME(vector<SpinorBarWaveFunction> & fin,vector<VectorWaveFunction> & gin,
 		 ScalarWaveFunction & hout, vector<SpinorWaveFunction> & fout,
 		 bool me) const;
 
   /**
    * Matrix element for \f$gg\to Hg\f$.
    * @param g1   Polarization vectors for the first  incoming gluon
    * @param g2   Polarization vectors for the second incoming gluon
    * @param hout Wavefunction for the outgoing higgs
    * @param g4   Polarization vectors for the outgoing gluon
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   double ggME(vector<VectorWaveFunction> g1, vector<VectorWaveFunction> g2,
 	      ScalarWaveFunction & hout,     vector<VectorWaveFunction> g4,
 	      bool me) const;
   //@}
 
 private:
 
   /**
    *  Members to calculate the functions for the loop diagrams
    */
   //@{
   /**
    *  The \f$W_1(s)\f$ function of NPB297 (1988) 221-243.
    * @param s   The invariant
    * @param mf2 The fermion mass squared
    */
   Complex W1(Energy2 s,Energy2 mf2) const {
     double root = sqrt(abs(1.-4.*mf2/s));
     if(s<ZERO)     return 2.*root*asinh(0.5*sqrt(-s/mf2));
     else if(s<4.*mf2) return 2.*root*asin(0.5*sqrt( s/mf2));
     else              return root*(2.*acosh(0.5*sqrt(s/mf2))
 				   -Constants::pi*Complex(0.,1.));
   }
 
   /**
    *  The \f$W_2(s)\f$ function of NPB297 (1988) 221-243.
    * @param s   The invariant
    * @param mf2 The fermion mass squared
    */
   Complex W2(Energy2 s,Energy2 mf2) const {
     double root=0.5*sqrt(abs(s)/mf2);
     if(s<ZERO)     return 4.*sqr(asinh(root));
     else if(s<4.*mf2) return -4.*sqr(asin(root));
     else              return 4.*sqr(acosh(root))-sqr(Constants::pi)
 			-4.*Constants::pi*acosh(root)*Complex(0.,1.);
   }
 
   /**
    * The \f$W_3(s,t,u,v)\f$ function of NPB297 (1988) 221-243.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param v   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   Complex W3(Energy2 s, Energy2 t, Energy2 u, Energy2 v, Energy2 mf2) const {
     return I3(s,t,u,v,mf2)-I3(s,t,u,s,mf2)-I3(s,t,u,u,mf2);
   }
   
   /**
    * The \f$I_3(s,t,u,v)\f$ function of NPB297 (1988) 221-243.
    * @param s The \f$s\f$ invariant
    * @param t The \f$t\f$ invariant
    * @param u The \f$u\f$ invariant
    * @param v The \f$v\f$ invariant
    * @param mf2 The fermion mass squared
    */
   Complex I3(Energy2 s, Energy2 t, Energy2 u, Energy2 v, Energy2 mf2) const {
     double ratio=(4.*mf2*t/(u*s)),root(sqrt(1+ratio));
     if(v==ZERO) return 0.;
     Complex y=0.5*(1.+sqrt(1.-4.*(mf2+_epsi*MeV*MeV)/v));
     Complex xp=0.5*(1.+root),xm=0.5*(1.-root);
     Complex output = 
       Math::Li2(xm/(xm-y))-Math::Li2(xp/(xp-y))+
       Math::Li2(xm/(y-xp))-Math::Li2(xp/(y-xm))+
       log(-xm/xp)*log(1.-_epsi-v/mf2*xp*xm);
     return output*2./root;
   }
   
   /**
    * The \f$b_2(s,t,u)\f$ function of NPB297 (1988) 221-243.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   Complex b2(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const {
     Energy2 mh2(s+u+t);
     complex<Energy2> output=s*(u-s)/(s+u)+2.*u*t*(u+2.*s)/sqr(s+u)*(W1(t,mf2)-W1(mh2,mf2))
       +(mf2-0.25*s)*(0.5*(W2(s,mf2)+W2(mh2,mf2))-W2(t,mf2)+W3(s,t,u,mh2,mf2))
       +sqr(s)*(2.*mf2/sqr(s+u)-0.5/(s+u))*(W2(t,mf2)-W2(mh2,mf2))
       +0.5*u*t/s*(W2(mh2,mf2)-2.*W2(t,mf2))
       +0.125*(s-12.*mf2-4.*u*t/s)*W3(t,s,u,mh2,mf2);
     return output*mf2/sqr(mh2);
   }
 
   /**
    * The \f$b_2(s,t,u)\f$ function of NPB297 (1988) 221-243.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   Complex b4(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const {
     Energy2 mh2(s+t+u);
     return mf2/mh2*(-2./3.+(mf2/mh2-0.25)*(W2(t,mf2)-W2(mh2,mf2)+W3(s,t,u,mh2,mf2)));
   }
 
 
   /**
    * The \f$A_2(s,t,u)\f$ function of NPB297 (1988) 221-243.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   Complex A2(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const {
     return b2(s,t,u,mf2)+b2(s,u,t,mf2);
   }
 
   /**
    * The \f$A_4(s,t,u)\f$ function of NPB297 (1988) 221-243.
    * @param s   The \f$s\f$ invariant
    * @param t   The \f$t\f$ invariant
    * @param u   The \f$u\f$ invariant
    * @param mf2 The fermion mass squared.
    */
   Complex A4(Energy2 s, Energy2 t, Energy2 u, Energy2 mf2) const {
     return b4(s,t,u,mf2)+b4(u,s,t,mf2)+b4(t,u,s,mf2);
   }
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2HiggsJet> initMEPP2HiggsJet;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2HiggsJet & operator=(const MEPP2HiggsJet &);
 
 private:
 
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int _shapeopt;
 
   /**
    *  Maximum PDG code of the quarks allowed
    */
   unsigned int _maxflavour;
 
   /**
    *  Option for which processes to include
    */
   unsigned int _process;
   
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  Minimum flavour of quarks to include in the loops
    */
   int _minloop;
 
   /**
    *  Maximum flavour of quarks to include in the loops
    */
   int _maxloop;
 
   /**
    *  Option for treatment of the fermion loops
    */
   unsigned int _massopt;
 
   /**
    *  Small complex number to regularize some integrals
    */
   static const Complex _epsi;
 
   /**
    *  On-shell mass for the higgs
    */
   Energy _mh;
 
   /**
    *  On-shell width for the higgs
    */
   Energy _wh;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr _hmass;
 
   /**
    *  Storage of the loop functions
    */
   //@{
   /**
    *  B functions
    */
   mutable Complex _bi[5];
 
   /**
    *  C functions
    */
   mutable Complex _ci[8];
 
   /**
    *  D functions
    */
   mutable Complex _di[4];
   //@}
 
   /**
    *  Storage of the diagram weights for the \f$gg\to Hg\f$ subprocess
    */
   mutable double _diagwgt[3];
 };
 
 }
 
 #endif /* HERWIG_MEPP2HiggsJet_H */
diff --git a/MatrixElement/Hadron/MEPP2HiggsVBF.h b/MatrixElement/Hadron/MEPP2HiggsVBF.h
--- a/MatrixElement/Hadron/MEPP2HiggsVBF.h
+++ b/MatrixElement/Hadron/MEPP2HiggsVBF.h
@@ -1,467 +1,461 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2HiggsVBF_H
 #define HERWIG_MEPP2HiggsVBF_H
 //
 // This is the declaration of the MEPP2HiggsVBF class.
 //
 
 #include "Herwig/MatrixElement/MEfftoffH.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2HiggsVBF class provides the matrix elements for the
  * production of the Higgs boson via the vector boson fusion mechanism
  * in hadron collisions
  *
  * @see \ref MEPP2HiggsVBFInterfaces "The interfaces"
  * defined for MEPP2HiggsVBF.
  */
 class MEPP2HiggsVBF: public MEfftoffH {
 
   /**
    *  Struct to contain the hadronic system 
    */
   struct tChannelPair{
     
     /**
      *  The hadron
      */
     PPtr hadron;
     
     /**
      *  The beam particle data object
      */
     tcBeamPtr beam;
     
     /**
      *  The incoming particle
      */
     PPtr incoming;
     
     /**
      *  The outgoing particle
      */
     PPtr outgoing;
     
     /**
      *  The PDF
      */
     tcPDFPtr pdf;
   };
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2HiggsVBF();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
   /**
    *  Virtual members to be overridden by inheriting classes
    *  which implement hard corrections 
    */
   //@{
   /**
    *  Has a POWHEG style correction
    */
   virtual POWHEGType hasPOWHEGCorrection() {return Both;}
 
   /**
    *  Has an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return true;}
 
   /**
    *  Initialize the ME correction
    */
   virtual void initializeMECorrection(RealEmissionProcessPtr, double &,
 				      double & );
 
   /**
    *  Apply the hard matrix element correction to a given hard process or decay
    */
   virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
 
   /**
    * Apply the soft matrix element correction
    * @param initial The particle from the hard process which started the 
    * shower
    * @param parent The initial particle in the current branching
    * @param br The branching struct
    * @return If true the emission should be vetoed
    */
   virtual bool softMatrixElementVeto(ShowerProgenitorPtr,
 				     ShowerParticlePtr,Branching);
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Generate the hardest emission in the POWHEG approach
    */
   //@{
   /**
    *  Generate a Compton process
    */
   void generateCompton(unsigned int system);
 
   /**
    *  Generate a BGF process
    */
   void generateBGF(unsigned int system);
 
   /**
    *  Matrix element piece for the Compton process
    */
   double comptonME(unsigned int system,
 		   double xT,double xp, double zp, double phi);
 
   /**
    *  Matrix element piece for the Compton process
    */
   double BGFME(unsigned int system, 
 	       double xT,double xp, double zp, double phi);
   
   /**
    *  Leading order matrix element
    */
   Energy4 loMatrixElement(const Lorentz5Momentum &p1,
 			  const Lorentz5Momentum &p2,
 			  const Lorentz5Momentum &q1,
 			  const Lorentz5Momentum &q2,
 			  double G1, double G2) const;
   //@}
 
   /**
    *  Generate the hard emission in the old-fashioned matrix element correction approach
    */
   //@{
   /**
    * Generate the values of \f$x_p\f$ and \f$z_p\f$
    * @param xp The value of xp, output
    * @param zp The value of zp, output
    */
   double generateComptonPoint(double &xp, double & zp);
 
   /**
    * Generate the values of \f$x_p\f$ and \f$z_p\f$
    * @param xp The value of xp, output
    * @param zp The value of zp, output
    */
   double generateBGFPoint(double &xp, double & zp);
 
   /**
    *  Return the coefficients for the matrix element piece for
    *  the QCD compton case. The output is the \f$a_i\f$ coefficients to 
    *  give the function as 
    *  \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$
    * @param xp \f$x_p\f$
    * @param x2 \f$x_2\f$
    * @param xperp \f$x_\perp\f$
    * @param l Scaled momentum of incoming spectator
    * @param m Scaled momentum of outgoing spectator
    *
    */
   vector<double> ComptonME(double xp, double x2, double xperp,
 			   LorentzVector<double> l,
 			   LorentzVector<double> m);
 
   /**
    *  Return the coefficients for the matrix element piece for
    *  the QCD compton case. The output is the \f$a_i\f$ coefficients to 
    *  give the function as 
    *  \f$a_0+a_1\cos\phi+a_2\sin\phi+a_3\cos^2\phi+a_4\sin^2\phi\f$
    * @param xp \f$x_p\f$
    * @param x2 \f$x_3\f$
    * @param x3 \f$x_2\f$
    * @param xperp \f$x_\perp\f$
    * @param l Scaled momentum of incoming spectator
    * @param m Scaled momentum of outgoing spectator
    *
    */
   vector<double> BGFME(double xp, double x2, double x3, double xperp,
 		       LorentzVector<double> l,
 		       LorentzVector<double> m);
   
   /**
    *  Calculate the coefficient A for the correlations
    */
   double A(tcPDPtr qin1, tcPDPtr qout1, tcPDPtr qin2, tcPDPtr qout2);
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Finalize this object. Called in the run phase just after a
    * run has ended. Used eg. to write out statistics.
    */
   virtual void dofinish();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2HiggsVBF> initMEPP2HiggsVBF;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2HiggsVBF & operator=(const MEPP2HiggsVBF &);
 
 private:
 
   /**
    *  Parameters for the hard POWHEG emission
    */
   //@{
   /**
    *  Pointer to the object calculating the strong coupling
    */
   ShowerAlphaPtr alpha_;
 
   /**
    *  Weight for the compton channel
    */
   double comptonWeight_;
 
   /**
    *  Weight for the BGF channel
    */
   double BGFWeight_;
 
   /**
    *  Minimum value of \f$p_T\f$
    */
   Energy pTmin_;
 
   /**
    *  Gluon particle data object
    */
   PDPtr gluon_;
   //@}
 
   /**
    *  Properties of the emission
    */
   //@{
   /**
    *  Beam particle
    */
   tcBeamPtr beam_[2];
 
   /**
    *  PDF object
    */
   tcPDFPtr pdf_[2];
 
   /**
    *  Partons
    */
   tcPDPtr partons_[2][4];
 
   /**
    *  q
    */
   Lorentz5Momentum q_[2];
 
   /**
    *  \f$Q^2\f$
    */
   Energy2 q2_[2];
 
   /**
    *  Coupling factor
    */
   double acoeff_;
 
   /**
    *  Lorentz vectors for the matrix element
    */
   LorentzVector<double> l_;
 
   /**
    *  Lorentz vectors for the matrix element
    */
   LorentzVector<double> m_;
 
   /**
    *  Born momentum fraction
    */
   double xB_[2];
 
   /**
    *  Rotation to the Breit frame
    */
   LorentzRotation rot_[2];
 
   /**
    *  Quark momenta for spectator system
    */
   Lorentz5Momentum pother_[2][2];
 
   /**
    *  Quark momenta for emitting system
    */
   Lorentz5Momentum psystem_[2][2];
 
   /**
    *  Higgs momenta
    */
   Lorentz5Momentum phiggs_[2];
 
   /**
    *  Transverse momenta for the compton emissions
    */
   Energy pTCompton_[2];
 
   /**
    *  Transverse momenta for the BGF emissions
    */
   Energy pTBGF_[2];
 
   /**
    *  Whether the Compton radiation is ISR or FSR
    */
   bool ComptonISFS_[2];
 
   /**
    *  Momenta of the particles for a compton emission
    */
   vector<Lorentz5Momentum> ComptonMomenta_[2];
   
   /**
    *  Momenta of the particles for a BGF emission
    */
   vector<Lorentz5Momentum> BGFMomenta_[2];
 
   /**
    *  the systems
    */
   vector<tChannelPair> systems_;
 
   /**
    *  Higgs boson
    */
   PPtr higgs_;
   //@}
 
   /**
    *  Parameters for the matrix element correction
    */
   //@{
   /**
    *  Enchancement factor for ISR
    */
   double initial_;
 
   /**
    *  Enchancement factor for FSR
    */
   double final_;
 
   /**
    *   Relative fraction of compton and BGF processes to generate
    */
   double procProb_;
 
   /**
    *  Integral for compton process
    */
   double comptonInt_;
 
   /**
    *  Integral for BGF process
    */
   double bgfInt_;
 
   /**
    *  Number of weights greater than 1
    */
   unsigned int nover_;
   
   /**
    *  Maximum weight
    */
   pair<double,double> maxwgt_;
   //@}
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2HiggsVBF_H */
diff --git a/MatrixElement/Hadron/MEPP2QQ.h b/MatrixElement/Hadron/MEPP2QQ.h
--- a/MatrixElement/Hadron/MEPP2QQ.h
+++ b/MatrixElement/Hadron/MEPP2QQ.h
@@ -1,357 +1,351 @@
 // -*- C++ -*-
 //
 // MEPP2QQ.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2QQ_H
 #define HERWIG_MEPP2QQ_H
 //
 // This is the declaration of the MEPP2QQ class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2QQ class implements the production of a heavy quark-antiquark
  * pair via QCD.
  *
  * @see \ref MEPP2QQInterfaces "The interfaces"
  * defined for MEPP2QQ.
  */
 class MEPP2QQ: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2QQ();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$gg\to q\bar{q}\f$
    * @param g1   The wavefunctions for the first  incoming gluon
    * @param g2   The wavefunctions for the second incoming gluon
    * @param q    The wavefunction  for the outgoing quark
    * @param qbar The wavefunction  for the outgoing antiquark
    * @param flow The colour flow
    */
   double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 		    vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
 		    unsigned int flow) const;
 
   /**
    * Matrix element for \f$q\bar{q}\to q\bar{q}\f$
    * @param q1 The wavefunction  for the incoming quark
    * @param q2 The wavefunction  for the incoming antiquark
    * @param q3 The wavefunction  for the outgoing quark
    * @param q4 The wavefunction  for the outgoing antiquark
    * @param flow The colour flow
    */
   double qqbar2qqbarME(vector<SpinorWaveFunction> & q1,
 		       vector<SpinorBarWaveFunction> & q2,
 		       vector<SpinorBarWaveFunction>    & q3,
 		       vector<SpinorWaveFunction>    & q4,
 		       unsigned int flow) const;
 
   /**
    * Matrix element for \f$qq\to qq\f$
    * @param q1 The wavefunction  for the first  incoming quark
    * @param q2 The wavefunction  for the second incoming quark
    * @param q3 The wavefunction  for the first  outgoing quark
    * @param q4 The wavefunction  for the second outgoing quark
    * @param flow The colour flow
    */
   double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2,
 		 vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4,
 		 unsigned int flow) const;
 
   /**
    * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$
    * @param q1 The wavefunction  for the first  incoming antiquark
    * @param q2 The wavefunction  for the second incoming antiquark
    * @param q3 The wavefunction  for the first  outgoing antiquark
    * @param q4 The wavefunction  for the second outgoing antiquark
    * @param flow The colour flow
    */
   double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1,
 			     vector<SpinorBarWaveFunction> & q2,
 			     vector<SpinorWaveFunction>    & q3,
 			     vector<SpinorWaveFunction>    & q4,
 			     unsigned int flow) const;
 
   /**
    * Matrix element for \f$qg\to qg\f$
    * @param qin  The wavefunction for the incoming quark
    * @param g2   The wavefunction for the incoming gluon
    * @param qout The wavefunction for the outgoing quark
    * @param g4   The wavefunction for the outgoing gluon
    * @param flow The colour flow
    */
   double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2,
 		 vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4,
 		 unsigned int flow) const;
 
   /**
    * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$.
    * @param qin  The wavefunction for the incoming antiquark
    * @param g2   The wavefunction for the incoming gluon
    * @param qout The wavefunction for the outgoing antiquark
    * @param g4   The wavefunction for the outgoing gluon
    * @param flow The colour flow
    */
   double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin,
 		       vector<VectorWaveFunction> &g2,
 		       vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4,
 		       unsigned int flow) const;
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Rebind pointer to other Interfaced objects. Called in the setup phase
    * after all objects used in an EventGenerator has been cloned so that
    * the pointers will refer to the cloned objects afterwards.
    * @param trans a TranslationMap relating the original objects to
    * their respective clones.
    * @throws RebindException if no cloned object was found for a given
    * pointer.
    */
   virtual void rebind(const TranslationMap & trans)
    ;
 
   /**
    * Return a vector of all pointers to Interfaced objects used in this
    * object.
    * @return a vector of pointers.
    */
   virtual IVector getReferences();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2QQ> initMEPP2QQ;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2QQ & operator=(const MEPP2QQ &);
 
 private:
 
   /**
    *  Vertices needed to compute the diagrams
    */
   //@{
   /**
    *  \f$ggg\f$ vertex
    */
   AbstractVVVVertexPtr _gggvertex;
 
   /**
    *  \f$q\bar{q}g\f$ vertex
    */
   AbstractFFVVertexPtr _qqgvertex;
   //@}
 
   /**
    *  Quark Flavour
    */
   unsigned int _quarkflavour;
 
   /**
    *  Processes to include
    */
   unsigned int _process;
 
   /**
    *  Option for the treatment of bottom and lighter
    *  quark masses
    */
   unsigned int _bottomopt;
 
   /**
    *  Option for the treatment of top quark masses
    */
   unsigned int _topopt;
 
   /**
    *  Maximum numbere of quark flavours to include
    */
   unsigned int _maxflavour;
 
   /**
    *  Colour flow
    */
   mutable unsigned int _flow;
 
   /**
    *  Diagram
    */
   mutable unsigned int _diagram;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement _me;
 
   /**
    *  ParticleData objects of the partons
    */  
   //@{
   /**
    *  The gluon
    */
   PDPtr _gluon;
   
   /**
    *  the quarks
    */
   vector<PDPtr> _quark;
 
   /**
    *  the antiquarks
    */
   vector<PDPtr> _antiquark;
   //@}
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2QQ_H */
diff --git a/MatrixElement/Hadron/MEPP2QQHiggs.h b/MatrixElement/Hadron/MEPP2QQHiggs.h
--- a/MatrixElement/Hadron/MEPP2QQHiggs.h
+++ b/MatrixElement/Hadron/MEPP2QQHiggs.h
@@ -1,356 +1,350 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2QQHiggs_H
 #define HERWIG_MEPP2QQHiggs_H
 //
 // This is the declaration of the MEPP2QQHiggs class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2QQHiggs class implements the matrix elements for
  * \f$gg\to Q \bar Q h^0\f$ and \f$q\bar q\to Q \bar Q h^0\f$.
  *
  * @see \ref MEPP2QQHiggsInterfaces "The interfaces"
  * defined for MEPP2QQHiggs.
  */
 class MEPP2QQHiggs: public HwMEBase {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   MEPP2QQHiggs();
   //@}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$gg\to Q\bar{Q}h^0\f$
    * @param g1   The wavefunctions for the first  incoming gluon
    * @param g2   The wavefunctions for the second incoming gluon
    * @param q    The wavefunction  for the outgoing quark
    * @param qbar The wavefunction  for the outgoing antiquark
    * @param h    The wavefunction for the outgoing Higgs boson
    * @param flow The colour flow
    */
   double ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 	      vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
 	      ScalarWaveFunction & h,
 	      unsigned int flow) const;
 
   /**
    * Matrix element for \f$q\bar{q}\to Q\bar{Q}h^0\f$
    * @param q1 The wavefunction  for the incoming quark
    * @param q2 The wavefunction  for the incoming antiquark
    * @param q3 The wavefunction  for the outgoing quark
    * @param q4 The wavefunction  for the outgoing antiquark
    * @param h    The wavefunction for the outgoing Higgs boson
    * @param flow The colour flow
    */
   double qqME(vector<SpinorWaveFunction> & q1,
 	      vector<SpinorBarWaveFunction> & q2,
 	      vector<SpinorBarWaveFunction>    & q3,
 	      vector<SpinorWaveFunction>    & q4,
 	      ScalarWaveFunction & h,
 	      unsigned int flow) const;
   //@} 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2QQHiggs> initMEPP2QQHiggs;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2QQHiggs & operator=(const MEPP2QQHiggs &);
 
 private:
   
   /**
    *  Switches to control the subprocess
    */
   //@{
   /**
    *  Quark Flavour
    */
   unsigned int quarkFlavour_;
   
   /**
    *  Processes to include
    */
   unsigned int process_;
   //@}
 
   /**
    *  Switches etc for the Higgs mass generation
    */
   //@{
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int shapeOpt_;
 
   /**
    *  On-shell mass for the higgs
    */
   Energy mh_;
 
   /**
    *  On-shell width for the higgs
    */
   Energy wh_;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr hmass_;
   //@}
   
   /**
    *  Vertices needed to compute the diagrams
    */
   //@{
   /**
    *  \f$ggg\f$ vertex
    */
   AbstractVVVVertexPtr GGGVertex_;
   
   /**
    *  \f$q\bar{q}g\f$ vertex
    */
   AbstractFFVVertexPtr QQGVertex_;
 
   /**
    *  \f$q\bar q h^0\f$ vertex
    */
   AbstractFFSVertexPtr QQHVertex_;
   //@}
   
 
   /**
    *  ParticleData objects of the particles
    */  
   //@{
   /**
    *  The gluon
    */
   PDPtr gluon_;
 
   /**
    * The Higgs boson
    */
   PDPtr higgs_;
   
   /**
    *  the quarks
    */
   vector<PDPtr> quark_;
 
   /**
    *  the antiquarks
    */
   vector<PDPtr> antiquark_;
   //@}
 
   /**
    *  Parameters for the phase-space generation
    */
   //@{
   /**
    *  Power for the phase-space mapping
    */
   double alpha_;
   //@}
 
   /**
    *  Colour flow
    */
   mutable unsigned int flow_;
 
   /**
    *  Diagram
    */
   mutable unsigned int diagram_;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement me_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2QQHiggs_H */
diff --git a/MatrixElement/Hadron/MEPP2SingleTop.h b/MatrixElement/Hadron/MEPP2SingleTop.h
--- a/MatrixElement/Hadron/MEPP2SingleTop.h
+++ b/MatrixElement/Hadron/MEPP2SingleTop.h
@@ -1,255 +1,249 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2SingleTop_H
 #define HERWIG_MEPP2SingleTop_H
 //
 // This is the declaration of the MEPP2SingleTop class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2SingleTop class implements the matrix element for the
  * production of a single top quark.
  *
  * @see \ref MEPP2SingleTopInterfaces "The interfaces"
  * defined for MEPP2SingleTop.
  */
 class MEPP2SingleTop: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2SingleTop();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Matrix Elements ofr the different processes
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to W \to t\bar{f}\f$.
    * @param fin  Spinors for incoming quark
    * @param ain  Spinors for incoming antiquark
    * @param fout Spinors for incoming quark
    * @param aout Spinors for incoming antiquark
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double sChannelME(vector<SpinorWaveFunction>    & fin ,
 		    vector<SpinorBarWaveFunction> & ain ,
 		    vector<SpinorBarWaveFunction> & fout,
 		    vector<SpinorWaveFunction>    & aout,
 		    bool me) const;
 
   /**
    * Matrix element for \f$qq\to t q\f$.
    * @param f1  Spinors for incoming quark
    * @param a1  Spinors for incoming antiquark
    * @param f2 Spinors for incoming quark
    * @param a2 Spinors for incoming antiquark
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double tChannelME(vector<SpinorWaveFunction>    & f1 ,
 		    vector<SpinorBarWaveFunction> & a1 ,
 		    vector<SpinorWaveFunction> & f2,
 		    vector<SpinorBarWaveFunction>    & a2,
 		    bool me) const;
 
   /**
    * Matrix element for \f$qg\to t W\f$.
    * @param fin  Spinors for incoming quark
    * @param gin  Polarization vectors for the incoming gluon
    * @param fout Spinors for outgoing quark
    * @param Wout Polarization vectors for the outgoing W
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double tWME(vector<SpinorWaveFunction> & fin,
 			 vector<VectorWaveFunction> & gin,
 			 vector<SpinorBarWaveFunction> & fout,
 			 vector<VectorWaveFunction> & Wout,
 			 bool me) const;
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2SingleTop> initMEPP2SingleTop;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2SingleTop & operator=(const MEPP2SingleTop &);
 
 private:
 
   /**
    *  Vertices
    */
   //@{
   /**
    *   FFWVertex
    */
   AbstractFFVVertexPtr FFWvertex_;
 
   /**
    *   FFGVertex
    */
   AbstractFFVVertexPtr FFGvertex_;
   //@}
 
   /**
    *  Which processes to include
    */
   unsigned int process_;
 
   /**
    *  Allowed flavours of the incoming quarks
    */
   int maxflavour_;
 
   /**
    *  Treatment of the top quark mass
    */
   int topOption_;
 
   /**
    *  Treatment of the W mass
    */
   int wOption_;
 
   /**
    *  The matrix element
    */
   mutable ProductionMatrixElement me_;
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2SingleTop_H */
diff --git a/MatrixElement/Hadron/MEPP2VGamma.h b/MatrixElement/Hadron/MEPP2VGamma.h
--- a/MatrixElement/Hadron/MEPP2VGamma.h
+++ b/MatrixElement/Hadron/MEPP2VGamma.h
@@ -1,241 +1,235 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2VGamma_H
 #define HERWIG_MEPP2VGamma_H
 //
 // This is the declaration of the MEPP2VGamma class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2VGamma class implements the .
  *
  * @see \ref MEPP2VGammaInterfaces "The interfaces"
  * defined for MEPP2VGamma.
  */
 class MEPP2VGamma: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2VGamma();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
   
   /**
    * Matrix element for \f$f\bar{f}\to W^\pm \gamma\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  \f$W^\pm\f$ wavefunction
    * @param v2  \f$\gamma\f$ wavefunction
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double WGammaME(vector<SpinorWaveFunction>    & f1,
 		  vector<SpinorBarWaveFunction> & a1,
 		  vector<VectorWaveFunction>    & v1,
 		  vector<VectorWaveFunction>    & v2,
 		  bool me) const;
   
   /**
    * Matrix element for \f$f\bar{f}\to Z^0 \gamma\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  \f$Z^0\f$ wavefunction
    * @param v2  \f$\gamma\f$ wavefunction
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double ZGammaME(vector<SpinorWaveFunction>    & f1,
 		  vector<SpinorBarWaveFunction> & a1,
 		  vector<VectorWaveFunction>    & v1,
 		  vector<VectorWaveFunction>    & v2,
 		  bool me) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2VGamma> initMEPP2VGamma;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2VGamma & operator=(const MEPP2VGamma &);
 
 private:
 
   /**
    *  Vertices
    */
   //@{
   /**
    *   FFPVertex
    */
   AbstractFFVVertexPtr FFPvertex_;
 
   /**
    *   FFWVertex
    */
   AbstractFFVVertexPtr FFWvertex_;
 
   /**
    *   FFZVertex
    */
   AbstractFFVVertexPtr FFZvertex_;
 
   /**
    *  WWW Vertex
    */ 
   AbstractVVVVertexPtr WWWvertex_;
   //@}
 
   /**
    *  Processes
    */
   unsigned int process_;
 
   /**
    *  Allowed flavours of the incoming quarks
    */
   int maxflavour_;
 
   /**
    *  Treatment of the the boson masses
    */
   unsigned int massOption_;
 
   /**
    *  The matrix element
    */
   mutable ProductionMatrixElement me_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2VGamma_H */
diff --git a/MatrixElement/Hadron/MEPP2VV.h b/MatrixElement/Hadron/MEPP2VV.h
--- a/MatrixElement/Hadron/MEPP2VV.h
+++ b/MatrixElement/Hadron/MEPP2VV.h
@@ -1,268 +1,262 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2VV_H
 #define HERWIG_MEPP2VV_H
 //
 // This is the declaration of the MEPP2VV class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2VV class implements the production of \f$W^+W^-\f$,
  * \f$W^\pm Z^0\f$ and \f$Z^0Z^o\f$ in hadron-hadron collisions.
  *
  * @see \ref MEPP2VVInterfaces "The interfaces"
  * defined for MEPP2VV.
  */
 class MEPP2VV: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2VV();
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Return the process being run (WW/ZZ/WZ).
    */
   virtual int process() const { return process_; }
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    * Used internally by generateKinematics, after calculating the
    * limits on cos(theta).
    */
   virtual double getCosTheta(double cthmin, double cthmax, const double r);
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$f\bar{f}\to W^+W^-\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  The first  outgoing W polarization vectors
    * @param v2  The second outgoing W polarization vectors
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double WWME(vector<SpinorWaveFunction>    & f1,
 	      vector<SpinorBarWaveFunction> & a1,
 	      vector<VectorWaveFunction>    & v1,
 	      vector<VectorWaveFunction>    & v2,
 	      bool me) const;
   
   /**
    * Matrix element for \f$f\bar{f}\to W^\pm Z^0\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  The outgoing W polarization vectors
    * @param v2  The outgoing Z polarization vectors
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double WZME(vector<SpinorWaveFunction>    & f1,
 	      vector<SpinorBarWaveFunction> & a1,
 	      vector<VectorWaveFunction>    & v1,
 	      vector<VectorWaveFunction>    & v2,
 	      bool me) const;
   
   /**
    * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  The first  outgoing Z polarization vectors 
    * @param v2  The second outgoing Z polarization vectors
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double ZZME(vector<SpinorWaveFunction>    & f1,
 	      vector<SpinorBarWaveFunction> & a1,
 	      vector<VectorWaveFunction>    & v1,
 	      vector<VectorWaveFunction>    & v2,
 	      bool me) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2VV> initMEPP2VV;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2VV & operator=(const MEPP2VV &);
 
 private:
 
   /**
    *  Vertices
    */
   //@{
   /**
    *   FFPVertex
    */
   AbstractFFVVertexPtr FFPvertex_;
 
   /**
    *   FFWVertex
    */
   AbstractFFVVertexPtr FFWvertex_;
 
   /**
    *   FFZVertex
    */
   AbstractFFVVertexPtr FFZvertex_;
 
   /**
    *  WWW Vertex
    */ 
   AbstractVVVVertexPtr WWWvertex_;
   //@}
 
   /**
    *  Processes
    */
   unsigned int process_;
 
   /**
    *  Allowed flavours of the incoming quarks
    */
   int maxflavour_;
 
   /**
    *  Treatment of the the boson masses
    */
   unsigned int massOption_;
 
   /**
    *  The matrix element
    */
   mutable ProductionMatrixElement me_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2VV_H */
diff --git a/MatrixElement/Hadron/MEPP2WH.h b/MatrixElement/Hadron/MEPP2WH.h
--- a/MatrixElement/Hadron/MEPP2WH.h
+++ b/MatrixElement/Hadron/MEPP2WH.h
@@ -1,119 +1,113 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2WH_H
 #define HERWIG_MEPP2WH_H
 //
 // This is the declaration of the MEPP2WH class.
 //
 
 #include "Herwig/MatrixElement/MEfftoVH.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2WH class provides the matrix elements for the production of
  * the \f$W^\pm\f$ boson in association with the Higgs in hadron collisions.
  *
  * @see \ref MEPP2WHInterfaces "The interfaces"
  * defined for MEPP2WH.
  */
 class MEPP2WH: public MEfftoVH {
 
 public:
 
   /**
    *  Default constructor
    */
   MEPP2WH();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2WH> initMEPP2WH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2WH & operator=(const MEPP2WH &);
 
 private:
 
   /**
    *  Which intermediate \f$W^\pm\f$ bosons to include
    */
   unsigned int _plusminus;
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2WH_H */
diff --git a/MatrixElement/Hadron/MEPP2WJet.h b/MatrixElement/Hadron/MEPP2WJet.h
--- a/MatrixElement/Hadron/MEPP2WJet.h
+++ b/MatrixElement/Hadron/MEPP2WJet.h
@@ -1,322 +1,316 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2WJet_H
 #define HERWIG_MEPP2WJet_H
 //
 // This is the declaration of the MEPP2WJet class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2WJet class implements the matrix element for the production of
  * a W boson and a jet including the decay of the W.
  *
  * @see \ref MEPP2WJetInterfaces "The interfaces"
  * defined for MEPP2WJet.
  */
 class MEPP2WJet: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2WJet();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Matrix elements for the different subprocesses
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to W^\pm g\f$.
    * @param fin   Spinors for incoming quark
    * @param ain   Spinors for incoming antiquark
    * @param gout  Polarization vectors for the outgoing gluon
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me    Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qqbarME(vector<SpinorWaveFunction> & fin,
 		     vector<SpinorBarWaveFunction> & ain,
 		     vector<VectorWaveFunction> & gout,
 		     vector<SpinorBarWaveFunction> & lm,
 		     vector<SpinorWaveFunction> & lp,
 		     bool me=false) const;
 
   /**
    * Matrix element for \f$qg\to W^\pm q\f$.
    * @param fin  Spinors for incoming quark
    * @param gin  Polarization vectors for the incoming gluon
    * @param fout Spinors for outgoing quark
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qgME(vector<SpinorWaveFunction> & fin,
 		  vector<VectorWaveFunction> & gin,
 		  vector<SpinorBarWaveFunction> & fout,
 		  vector<SpinorBarWaveFunction> & lm,
 		  vector<SpinorWaveFunction> & lp,
 		  bool me=false) const;
 
   /**
    * Matrix element for \f$\bar{q}g\to W^\pm\bar{q}\f$.
    * @param fin  Spinors for incoming antiquark
    * @param gin  Polarization vectors for the incoming gluon
    * @param fout Spinors for outgoing antiquark
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qbargME(vector<SpinorBarWaveFunction> & fin,
 		     vector<VectorWaveFunction> & gin,
 		     vector<SpinorWaveFunction> & fout,
 		     vector<SpinorBarWaveFunction> & lm,
 		     vector<SpinorWaveFunction> & lp,
 		     bool me=false) const;
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2WJet> initMEPP2WJet;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2WJet & operator=(const MEPP2WJet &);
 
 private:
 
   /**
    *  Vertices for the helicity amplitude calculation
    */
   //@{
   /**
    *  Pointer to the W vertex
    */
   AbstractFFVVertexPtr _theFFWVertex;
 
   /**
    *  Pointer to the \f$qqg\f$ vertex
    */
   AbstractFFVVertexPtr _theQQGVertex;
   //@}
 
   /**
    *  @name Pointers to the W ParticleData objects
    */
   //@{
   /**
    *  The \f$W^+\f$ data pointer
    */ 
   tcPDPtr _wplus;
 
   /**
    *  The \f$W^-\f$ data pointer
    */
   tcPDPtr _wminus;
   //@}
 
   /**
    * @name Switches to control the particles in the hard process
    */
   //@{
   /**
    *  Subprocesses to include
    */
   unsigned int _process;
 
   /**
    *  Allowed flavours for the incoming quarks
    */
   unsigned int _maxflavour;
 
   /**
    *  Which charge states to include
    */
   unsigned int _plusminus;
 
   /**
    *  W decay modes
    */
   unsigned int _wdec;
 
   /**
    *  Option for the treatment of the W off-shell effects
    */
   unsigned int _widthopt;
   //@}
 
   /**
    * Matrix element for spin correlations
    */
   mutable ProductionMatrixElement _me;
 
   /**
    *  Storage of the scale to avoid the need to recalculate
    */
   Energy2 _scale;
   
   /**
    *  Storage of the off-shell W mass to avoid the need to recalculate
    */
   Energy2 _mw2;
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2WJet_H */
diff --git a/MatrixElement/Hadron/MEPP2ZH.h b/MatrixElement/Hadron/MEPP2ZH.h
--- a/MatrixElement/Hadron/MEPP2ZH.h
+++ b/MatrixElement/Hadron/MEPP2ZH.h
@@ -1,117 +1,111 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2ZH_H
 #define HERWIG_MEPP2ZH_H
 //
 // This is the declaration of the MEPP2ZH class.
 //
 
 #include "Herwig/MatrixElement/MEfftoVH.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2ZH class implements the matrix element
  * for \f$q\bar{q}\to Z^0h^0\f$.
  *
  * @see \ref MEPP2ZHInterfaces "The interfaces"
  * defined for MEPP2ZH.
  */
 class MEPP2ZH: public MEfftoVH {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2ZH();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2ZH> initMEPP2ZH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2ZH & operator=(const MEPP2ZH &);
 
 private:
 
   /**
    *  The allowed flavours of the incoming quarks
    */
   int _maxflavour;
 };
 
 }
 
 #endif /* HERWIG_MEPP2ZH_H */
diff --git a/MatrixElement/Hadron/MEPP2ZJet.h b/MatrixElement/Hadron/MEPP2ZJet.h
--- a/MatrixElement/Hadron/MEPP2ZJet.h
+++ b/MatrixElement/Hadron/MEPP2ZJet.h
@@ -1,329 +1,323 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2ZJet_H
 #define HERWIG_MEPP2ZJet_H
 //
 // This is the declaration of the MEPP2ZJet class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEPP2ZJet class implements the matrix element for the production
  * of a Z boson + a jet including the decay of the Z including \f$Z/\gamma\f$ 
  * interference
  *
  * @see \ref MEPP2ZJetInterfaces "The interfaces"
  * defined for MEPP2ZJet.
  */
 class MEPP2ZJet: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2ZJet();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Matrix elements for the different subprocesses
    */
   //@{
   /**
    * Matrix element for \f$q\bar{q}\to Z/\gamma g\f$.
    * @param fin   Spinors for incoming quark
    * @param ain   Spinors for incoming antiquark
    * @param gout  Polarization vectors for the outgoing gluon
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me    Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qqbarME(vector<SpinorWaveFunction> & fin,
 		     vector<SpinorBarWaveFunction> & ain,
 		     vector<VectorWaveFunction> & gout,
 		     vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp,
 		     bool me=false) const;
 
   /**
    * Matrix element for \f$qg\to Z/\gamma q\f$.
    * @param fin  Spinors for incoming quark
    * @param gin  Polarization vectors for the incoming gluon
    * @param fout Spinors for outgoing quark
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qgME(vector<SpinorWaveFunction> & fin,vector<VectorWaveFunction> & gin,
 		  vector<SpinorBarWaveFunction> & fout,
 		  vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp,
 		  bool me=false) const;
   
   /**
    * Matrix element for \f$\bar{q}g\to Z/\gamma\bar{q}\f$.
    * @param fin  Spinors for incoming antiquark
    * @param gin  Polarization vectors for the incoming gluon
    * @param fout Spinors for outgoing antiquark
    * @param lm    Spinors for outgoing lepton
    * @param lp    Spinors for outgoing antilepton
    * @param me   Whether or not to calculate the matrix element for spin correlations
    **/
   InvEnergy2 qbargME(vector<SpinorBarWaveFunction> & fin,
 		     vector<VectorWaveFunction> & gin,
 		     vector<SpinorWaveFunction> & fout,
 		     vector<SpinorBarWaveFunction> & lm, vector<SpinorWaveFunction> & lp,
 		     bool me=false) const;
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2ZJet> initMEPP2ZJet;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2ZJet & operator=(const MEPP2ZJet &);
 
 private:
 
   /**
    *  Vertices for the helicity amplitude calculation
    */
   //@{
   /**
    *  Pointer to the Z vertex
    */
   AbstractFFVVertexPtr _theFFZVertex;
 
   /**
    *  Pointer to the photon vertex
    */
   AbstractFFVVertexPtr _theFFPVertex;
 
   /**
    *  Pointer to the \f$qqg\f$ vertex
    */
   AbstractFFVVertexPtr _theQQGVertex;
   //@}
 
   /**
    *  @name Pointers to the \f$Z^0\f$ and \f$\gamma\f$ ParticleData objects
    */
   //@{
   /**
    *  Pointer to the Z ParticleData object
    */
   tcPDPtr _z0;
 
   /**
    *  Pointer to the photon ParticleData object
    */
   tcPDPtr _gamma;
   //@}
 
   /**
    * @name Switches to control the particles in the hard process
    */
   //@{
   /**
    *  Subprocesses to include
    */
   unsigned int _process;
 
   /**
    *  Allowed flavours for the incoming quarks
    */
   int _maxflavour;
 
   /**
    *  Control over which Z decay modes to include
    */
   int _zdec;
 
   /**
    *  Which terms to include
    */
   unsigned int _gammaZ;
 
   /**
    *  Option for the treatment of the W off-shell effects
    */
   unsigned int _widthopt;
   //@}
 
   /**
    *  Probability of selecting \f$1/s^2\f$ for the jacobian
    *  transformation of the boson mass
    */
   double _pprob;
   
   /**
    * Matrix element for spin correlations
    */
   mutable ProductionMatrixElement _me;
 
   /**
    *  Storage of the scale to avoid the need to recalculate
    */
   Energy2 _scale;
   
   /**
    *  Storage of the off-shell Z mass to avoid the need to recalculate
    */
   Energy2 _mz2;
 };
 
 }
 
 #endif /* HERWIG_MEPP2ZJet_H */
diff --git a/MatrixElement/Hadron/MEQCD2to2.h b/MatrixElement/Hadron/MEQCD2to2.h
--- a/MatrixElement/Hadron/MEQCD2to2.h
+++ b/MatrixElement/Hadron/MEQCD2to2.h
@@ -1,370 +1,364 @@
 // -*- C++ -*-
 //
 // MEQCD2to2.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEQCD2to2_H
 #define HERWIG_MEQCD2to2_H
 //
 // This is the declaration of the MEQCD2to2 class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEQCD2to2 class provides the matrix elements for \f$2\to2\f$ 
  * QCD scattering processes in hadron-hadron collisions.
  *
  * @see \ref MEQCD2to2Interfaces "The interfaces"
  * defined for MEQCD2to2.
  */
 class MEQCD2to2: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEQCD2to2();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$gg\to gg\f$.
    * @param g1   The wavefunctions for the first  incoming gluon
    * @param g2   The wavefunctions for the second incoming gluon
    * @param g3   The wavefunctions for the first  outgoing gluon
    * @param g4   The wavefunctions for the second outgoing gluon
    * @param flow The colour flow
    */
   double gg2ggME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 		 vector<VectorWaveFunction> &g3,vector<VectorWaveFunction> &g4,
 		 unsigned int flow) const;
 
   /**
    * Matrix element for \f$gg\to q\bar{q}\f$
    * @param g1   The wavefunctions for the first  incoming gluon
    * @param g2   The wavefunctions for the second incoming gluon
    * @param q    The wavefunction  for the outgoing quark
    * @param qbar The wavefunction  for the outgoing antiquark
    * @param flow The colour flow
    */
   double gg2qqbarME(vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 		    vector<SpinorBarWaveFunction> & q,vector<SpinorWaveFunction> & qbar,
 		    unsigned int flow) const;
 
   /**
    * Matrix element for \f$q\bar{q}\to gg\f$
    * @param q    The wavefunction  for the incoming quark
    * @param qbar The wavefunction  for the incoming antiquark
    * @param g1   The wavefunctions for the first  outgoing gluon
    * @param g2   The wavefunctions for the second outgoing gluon
    * @param flow The colour flow
    */
   double qqbar2ggME(vector<SpinorWaveFunction> & q,vector<SpinorBarWaveFunction> & qbar,
 		    vector<VectorWaveFunction> &g1,vector<VectorWaveFunction> &g2,
 		    unsigned int flow) const;
 
   /**
    * Matrix element for \f$qg\to qg\f$
    * @param qin  The wavefunction for the incoming quark
    * @param g2   The wavefunction for the incoming gluon
    * @param qout The wavefunction for the outgoing quark
    * @param g4   The wavefunction for the outgoing gluon
    * @param flow The colour flow
    */
   double qg2qgME(vector<SpinorWaveFunction> & qin,vector<VectorWaveFunction> &g2,
 		 vector<SpinorBarWaveFunction> & qout,vector<VectorWaveFunction> &g4,
 		 unsigned int flow) const;
 
   /**
    * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$.
    * @param qin  The wavefunction for the incoming antiquark
    * @param g2   The wavefunction for the incoming gluon
    * @param qout The wavefunction for the outgoing antiquark
    * @param g4   The wavefunction for the outgoing gluon
    * @param flow The colour flow
    */
   double qbarg2qbargME(vector<SpinorBarWaveFunction> & qin,
 		       vector<VectorWaveFunction> &g2,
 		       vector<SpinorWaveFunction> & qout,vector<VectorWaveFunction> &g4,
 		       unsigned int flow) const;
 
   /**
    * Matrix element for \f$qq\to qq\f$
    * @param q1 The wavefunction  for the first  incoming quark
    * @param q2 The wavefunction  for the second incoming quark
    * @param q3 The wavefunction  for the first  outgoing quark
    * @param q4 The wavefunction  for the second outgoing quark
    * @param flow The colour flow
    */
   double qq2qqME(vector<SpinorWaveFunction> & q1, vector<SpinorWaveFunction> & q2,
 		 vector<SpinorBarWaveFunction> & q3, vector<SpinorBarWaveFunction> & q4,
 		 unsigned int flow) const;
 
   /**
    * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$
    * @param q1 The wavefunction  for the first  incoming antiquark
    * @param q2 The wavefunction  for the second incoming antiquark
    * @param q3 The wavefunction  for the first  outgoing antiquark
    * @param q4 The wavefunction  for the second outgoing antiquark
    * @param flow The colour flow
    */
   double qbarqbar2qbarqbarME(vector<SpinorBarWaveFunction> & q1,
 			     vector<SpinorBarWaveFunction> & q2,
 			     vector<SpinorWaveFunction>    & q3,
 			     vector<SpinorWaveFunction>    & q4,
 			     unsigned int flow) const;
 
   /**
    * Matrix element for \f$q\bar{q}\to q\bar{q}\f$
    * @param q1 The wavefunction  for the incoming quark
    * @param q2 The wavefunction  for the incoming antiquark
    * @param q3 The wavefunction  for the outgoing quark
    * @param q4 The wavefunction  for the outgoing antiquark
    * @param flow The colour flow
    */
   double qqbar2qqbarME(vector<SpinorWaveFunction> & q1,
 		       vector<SpinorBarWaveFunction> & q2,
 		       vector<SpinorBarWaveFunction>    & q3,
 		       vector<SpinorWaveFunction>    & q4,
 		       unsigned int flow) const;
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Rebind pointer to other Interfaced objects. Called in the setup phase
    * after all objects used in an EventGenerator has been cloned so that
    * the pointers will refer to the cloned objects afterwards.
    * @param trans a TranslationMap relating the original objects to
    * their respective clones.
    * @throws RebindException if no cloned object was found for a given
    * pointer.
    */
   virtual void rebind(const TranslationMap & trans)
    ;
 
   /**
    * Return a vector of all pointers to Interfaced objects used in this
    * object.
    * @return a vector of pointers.
    */
   virtual IVector getReferences();
   //@}
 
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEQCD2to2> initMEQCD2to2;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEQCD2to2 & operator=(const MEQCD2to2 &);
 
 private:
 
   /**
    *  Vertices needed to compute the diagrams
    */
   //@{
   /**
    *  \f$gggg\f$ vertex
    */
   AbstractVVVVVertexPtr _ggggvertex;
 
   /**
    *  \f$ggg\f$ vertex
    */
   AbstractVVVVertexPtr _gggvertex;
 
   /**
    *  \f$q\bar{q}g\f$ vertex
    */
   AbstractFFVVertexPtr _qqgvertex;
   //@}
 
   /**
    *  Maximum numbere of quark flavours to include
    */
   unsigned int _maxflavour;
 
   /**
    *  Processes to include
    */
   unsigned int _process;
 
   /**
    *  Colour flow
    */
   mutable unsigned int _flow;
 
   /**
    *  Diagram
    */
   mutable unsigned int _diagram;
 
   /**
    *  Matrix element
    */
   mutable ProductionMatrixElement _me;
 
   /**
    *  ParticleData objects of the partons
    */  
   //@{
   /**
    *  The gluon
    */
   PDPtr _gluon;
   
   /**
    *  the quarks
    */
   vector<PDPtr> _quark;
 
   /**
    *  the antiquarks
    */
   vector<PDPtr> _antiquark;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEQCD2to2_H */
diff --git a/MatrixElement/Hadron/MEQCD2to2Fast.h b/MatrixElement/Hadron/MEQCD2to2Fast.h
--- a/MatrixElement/Hadron/MEQCD2to2Fast.h
+++ b/MatrixElement/Hadron/MEQCD2to2Fast.h
@@ -1,347 +1,341 @@
 // -*- C++ -*-
 //
 // MEQCD2to2Fast.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEQCD2to2Fast_H
 #define HERWIG_MEQCD2to2Fast_H
 //
 // This is the declaration of the MEQCD2to2Fast class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Repository/UseRandom.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEQCD2to2Fast class implements the matrix elements for
  * QCD \f$2\to2\f$ scattering processes using hard coded formulae and
  * as such can not include spin correlations. It is designed to be a faster
  * replacement for MEQCD2to2 for use in the underlying event.
  *
  * @see \ref MEQCD2to2FastInterfaces "The interfaces"
  * defined for MEQCD2to2Fast.
  */
 class MEQCD2to2Fast: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEQCD2to2Fast() :_maxflavour(5),_process(0),_strictFlavourScheme(false) {
     massOption(vector<unsigned int>(2,0));
   }
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  Members to calculate the matrix elements
    */
   //@{
   /**
    * Matrix element for \f$gg\to gg\f$.
    */
   double gg2ggME() const {
     Energy2 u(uHat()),t(tHat()),s(sHat());
     double output = 9./4.*(3.-t*u/s/s-s*u/t/t-s*t/u/u);
     double flow[3]={(1.-u*t/s/s-s*t/u/u+t*t/s/u),
 		    (1.-t*u/s/s-s*u/t/t+u*u/s/t),
 		    (1.-t*s/u/u-u*s/t/t+s*s/u/t)};
     _flow = 1+UseRandom::rnd3(flow[0],flow[1],flow[2]);
     double diag[3]={(sqr(u)+sqr(t))/sqr(s),
 		    (sqr(s)+sqr(u))/sqr(t),
 		    (sqr(s)+sqr(t))/sqr(u)};
     if(_flow==1)      diag[1]=0;
     else if(_flow==2) diag[2]=0;
     else if(_flow==3) diag[0]=0;
     _diagram=1+UseRandom::rnd3(diag[0],diag[1],diag[2]);
     return output;
   }
 
   /**
    * Matrix element for \f$gg\to q\bar{q}\f$
    */
   double gg2qqbarME() const {
     Energy2 u(uHat()),t(tHat()),s(sHat());
     Energy4 u2(sqr(u)),t2(sqr(t)),s2(sqr(s));
     double output =(1./6./u/t-3./8./s2)*(t2+u2);
     double flow[2]={u2/(u2+t2),t2/(u2+t2)};
     _flow = 1+UseRandom::rnd2(flow[0],flow[1]);
     _diagram=3+_flow;
     return output;
   }
 
   /**
    * Matrix element for \f$q\bar{q}\to gg\f$
    */
   double qqbar2ggME() const {
     Energy2 u(uHat()),t(tHat()),s(sHat());
     Energy4 s2(sqr(s)),u2(sqr(u)),t2(sqr(t));
     double output = 0.5*(32./27./u/t-8./3./s2)*(t2+u2);
     double flow[2] = {u2/(u2+t2),t2/(t2+u2)};
     _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     _diagram=6+_flow;
     return output;
   }
 
   /**
    * Matrix element for \f$qg\to qg\f$
    */
   double qg2qgME() const {
     Energy2 u(uHat()),t(tHat()),s(sHat());
     Energy4 s2(sqr(s)),u2(sqr(u)),t2(sqr(t));
     double output = (-4./9./s/u+1./t2)*(s2+u2);
     double flow[2]={u2/(s2+u2),s2/(s2+u2)};
     _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     _diagram=9+_flow;
     return output;
   }
   
   /**
    * Matrix elements for \f$\bar{q}g\to \bar{q}g\f$.
    */
   double qbarg2qbargME() const {
     // scale
     Energy2 u(uHat()),t(tHat()),s(sHat());
     Energy4 u2(sqr(u)),s2(sqr(s)); // t2(sqr(t))
     double flow[2]={u2/(s2+u2),s2/(s2+u2)};
     _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     _diagram=12+_flow;
     return (-4./9./s/u+1./t/t)*(s*s+u*u);
   }
   
   /**
    * Matrix element for \f$qq\to qq\f$
    */
   double qq2qqME() const {
     Energy2 u(uHat()),t(tHat());
     Energy4 s2(sqr(sHat())),u2(sqr(u)),t2(sqr(t));
     double output;
     if(mePartonData()[0]->id()==mePartonData()[1]->id()) {
       output = 0.5*(4./9.*((s2+u2)/t2+(s2+t2)/u2)
 		    -8./27.*s2/u/t);
       double flow[2]={(s2+u2)/t2,(s2+t2)/u2}; 
       _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     }
     else {
       output = 4./9.*(s2+u2)/t2;
       _flow=2;
     }
     _diagram = 15+_flow;
     return output;
   }
 
   /**
    * Matrix element for \f$\bar{q}\bar{q}\to \bar{q}\bar{q}\f$
    */
   double qbarqbar2qbarqbarME() const {
     Energy2 u(uHat()),t(tHat());
     Energy4 u2(sqr(u)),t2(sqr(t)),s2(sqr(sHat()));
     double output;
     if(mePartonData()[0]->id()==mePartonData()[1]->id()) {
       output = 0.5*(4./9.*((s2+u2)/t2+(s2+t2)/u2)
 		    -8./27.*s2/u/t);
       double flow[2]={(s2+u2)/t2,(s2+t2)/u2};
       _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     }
     else {
       output = 4./9.*(s2+u2)/t2;
       _flow = 2;
     }
     _diagram = 17+_flow;
     // final part of colour and spin factors
     return output;
   }
   
   /**
    * Matrix element for \f$q\bar{q}\to q\bar{q}\f$
    */
   double qqbar2qqbarME() const {
     // type of process
     bool diagon[2]={mePartonData()[0]->id()== -mePartonData()[1]->id(),
 		    mePartonData()[0]->id()==  mePartonData()[2]->id()};
     // scale
     Energy2 u(uHat()),t(tHat()),s(sHat());
     Energy4 s2(sqr(s)),t2(sqr(t)),u2(sqr(u));
     double output;
     if(diagon[0]&&diagon[1]) {
       output= (4./9.*((s2+u2)/t2+(u2+t2)/s2)
 	       -8./27.*u2/s/t);
       double flow[2]={(t2+u2)/s2,(s2+u2)/t2};
       _flow=1+UseRandom::rnd2(flow[0],flow[1]);
     }
     else if(diagon[0]) {
       output = (4./9.*(t2+u2)/s2);
       _flow=1;
     }
     else {
       output = (4./9.*(s2+u2)/t2);
       _flow=2;
     }
     _diagram=19+_flow;
     return output;
   }
   //@}
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEQCD2to2Fast> initMEQCD2to2Fast;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEQCD2to2Fast & operator=(const MEQCD2to2Fast &);
 
 private:
 
   /**
    *  Maximum numbere of quark flavours to include
    */
   unsigned int _maxflavour;
 
   /**
    *  Processes to include
    */
   unsigned int _process;
 
   /**
    *  Colour flow
    */
   mutable unsigned int _flow;
 
   /**
    *  Diagram
    */
   mutable unsigned int _diagram;
 
   /**
    * Exclude contributions with massive incominbg quarks
    */
   bool _strictFlavourScheme;
 
 };
 
 }
 
 #endif /* HERWIG_MEQCD2to2Fast_H */
diff --git a/MatrixElement/Hadron/MEqq2W2ff.h b/MatrixElement/Hadron/MEqq2W2ff.h
--- a/MatrixElement/Hadron/MEqq2W2ff.h
+++ b/MatrixElement/Hadron/MEqq2W2ff.h
@@ -1,237 +1,231 @@
 // -*- C++ -*-
 //
 // MEqq2W2ff.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEqq2W2ff_H
 #define HERWIG_MEqq2W2ff_H
 //
 // This is the declaration of the MEqq2W2ff class.
 //
 
 #include "Herwig/MatrixElement/DrellYanBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEqq2W2ff class implements the matrix element for \f$q\bar{q'}\to W^\pm\f$
  * including the decay of the \f$W^\pm\f$ to Standard Model fermions.
  *
  * @see \ref MEqq2W2ffInterfaces "The interfaces"
  * defined for MEqq2W2ff.
  */
 class MEqq2W2ff: public DrellYanBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEqq2W2ff();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$.
    * @param fin  Spinors for incoming quark
    * @param ain  Spinors for incoming antiquark
    * @param fout Spinors for incoming quark
    * @param aout Spinors for incoming antiquark
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double qqbarME(vector<SpinorWaveFunction>    & fin ,
 		 vector<SpinorBarWaveFunction> & ain ,
 		 vector<SpinorBarWaveFunction> & fout,
 		 vector<SpinorWaveFunction>    & aout,
 		 bool me) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEqq2W2ff> initMEqq2W2ff;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEqq2W2ff & operator=(const MEqq2W2ff &);
 
 private:
 
   /**
    *  Pointer to the W vertex
    */
   AbstractFFVVertexPtr  _theFFWVertex;
 
   /**
    *  Pointers to the intermediates resonances
    */
   //@{
   /**
    *  Pointer to the \f$W^+\f$
    */
   tcPDPtr _wp;
 
   /**
    *  Pointer to the \f$W^-\f$
    */
   tcPDPtr _wm;
   //@}
 
   /**
    *  Switches to control the particles in the hard process
    */
   //@{
   /**
    *  The allowed flavours of the incoming quarks
    */
   unsigned int _maxflavour;
 
   /**
    *  Which intermediate \f$W^\pm\f$ bosons to include
    */
   unsigned int _plusminus;
 
   /**
    *  Which decay products of the \f$W^\pm\f$ to include
    */
   unsigned int _process;
   //@}
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 };
 
 }
 
 #endif /* HERWIG_MEqq2W2ff_H */
diff --git a/MatrixElement/Hadron/MEqq2gZ2ff.h b/MatrixElement/Hadron/MEqq2gZ2ff.h
--- a/MatrixElement/Hadron/MEqq2gZ2ff.h
+++ b/MatrixElement/Hadron/MEqq2gZ2ff.h
@@ -1,258 +1,252 @@
 // -*- C++ -*-
 //
 // MEqq2gZ2ff.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEqq2gZ2ff_H
 #define HERWIG_MEqq2gZ2ff_H
 //
 // This is the declaration of the MEqq2gZ2ff class.
 //
 
 #include "Herwig/MatrixElement/DrellYanBase.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The MEqq2gZ2ff class implements the products of Standard Model
  * fermion antifermion pairs via the \f$Z^0\f$ resonance including
  * photon interference terms.
  *
  * @see \ref MEqq2gZ2ffInterfaces "The interfaces"
  * defined for MEqq2gZ2ff.
  */
 class MEqq2gZ2ff: public DrellYanBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEqq2gZ2ff();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$q\bar{q}\to \gamma/Z \to f\bar{f}\f$.
    * @param fin  Spinors for incoming quark
    * @param ain  Spinors for incoming antiquark
    * @param fout Spinors for incoming quark
    * @param aout Spinors for incoming antiquark
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double qqbarME(vector<SpinorWaveFunction>    & fin ,
 		 vector<SpinorBarWaveFunction> & ain ,
 		 vector<SpinorBarWaveFunction> & fout,
 		 vector<SpinorWaveFunction>    & aout,
 		 bool me) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEqq2gZ2ff> initMEqq2gZ2ff;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEqq2gZ2ff & operator=(const MEqq2gZ2ff &);
 
 private:
 
   /**
    *  Pointer to the vertices for the helicity calculations
    */
   //@{
   /**
    *  Pointer to the Z vertex
    */
   AbstractFFVVertexPtr _theFFZVertex;
 
   /**
    *  Pointer to the photon vertex
    */
   AbstractFFVVertexPtr _theFFPVertex;
   //@}
 
   /**
    *  Pointers to the intermediate resonances
    */
   //@{
   /**
    *  Pointer to the Z ParticleData object
    */
   tcPDPtr _z0;
 
   /**
    *  Pointer to the photon ParticleData object
    */
   tcPDPtr _gamma;
   //@}
 
   /**
    *  Switches to control the particles in the hard process
    */
   //@{
   /**
    *  Minimum allowed flavour for the incoming quarks
    */
   int _minflavour;
 
   /**
    *  Maximum allowed flavour for the incoming quarks
    */
   int _maxflavour;
 
   /**
    *  Whether to include both \f$Z^0\f$ and \f$\gamma\f$ or only one
    */
   unsigned int _gammaZ;
   
   /**
    *  Which processes to include
    */
   int _process;
   //@}
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 
   /**
    *  Whether of not to construct the vertex for spin correlations
    */
   bool spinCorrelations_;
 };
 
 }
 
 #endif /* HERWIG_MEqq2gZ2ff_H */
diff --git a/MatrixElement/HardVertex.h b/MatrixElement/HardVertex.h
--- a/MatrixElement/HardVertex.h
+++ b/MatrixElement/HardVertex.h
@@ -1,104 +1,99 @@
 // -*- C++ -*-
 //
 // HardVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_HardVertex_H
 #define HERWIG_HardVertex_H
 //
 // This is the declaration of the HardVertex class.
 
 #include "ThePEG/EventRecord/HelicityVertex.h"
 #include "ProductionMatrixElement.h"
 #include "HardVertex.fh"
 // #include "HardVertex.xh"
 
 namespace Herwig {
 
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *  \author Peter Richardson
  *
  *  The HardVertex class is designed to implement the vertex for a 
  *  hard interaction for the Herwig spin correlation algorithm. 
  *  It inherits from the HelicityVertex class of ThePEG and implements 
  *  the methods to calculate the \f$\rho\f$ and \f$D\f$ matrices.
  * 
  *  The ProductionMatrixElement class is used to store the matrix element
  *  and this class performs the calculations of the matrices.
  *
  *  @see HelicityVertex
  *  @see ProductionMatrixElement
  */ 
 
 class HardVertex: public HelicityVertex {
   
 public:
   
   /**
    *  Access to the matrix element
    */
   //@{
   /**
    * Get the matrix element
    */
   const ProductionMatrixElement & ME() const {
     return _matrixelement;
   }
 
   /**
    * Set the matrix element
    */
   void ME(const ProductionMatrixElement & in) const {
     _matrixelement.reset(in);
   }
   //@}
   
 public:
 
   /**
    * Standard Init function used to initialize the interfaces.  
    */
   static void Init();
   
 public:
   
   /**
    * Method to calculate the \f$\rho\f$ matrix for one of the outgoing particles
    * @param iout The outgoing particle we are calculating the \f$\rho\f$ matrix for.
    */
   virtual RhoDMatrix getRhoMatrix(int iout,bool) const;
 
   /**
    * Method to calculate the \f$D\f$ matrix for an incoming particle.
    * @param in The incoming particle we are calculating the \f$D\f$ matrix for.
    */
   virtual RhoDMatrix getDMatrix(int in) const;
   
 private:
   
   /**
-   * Describe a concrete class without persistent data.
-   */
-  static NoPIOClassDescription<HardVertex> initHardVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   HardVertex & operator=(const HardVertex &);
   
 private:
   
   /**
    * Storage of the matrix element.
    */
   ProductionMatrixElement _matrixelement;
   
 };
 }
 
 #endif /* HERWIG_HardVertex_H */
diff --git a/MatrixElement/HwMEBase.h b/MatrixElement/HwMEBase.h
--- a/MatrixElement/HwMEBase.h
+++ b/MatrixElement/HwMEBase.h
@@ -1,292 +1,286 @@
 // -*- C++ -*-
 #ifndef HERWIG_HwMEBase_H
 #define HERWIG_HwMEBase_H
 //
 // This is the declaration of the HwMEBase class.
 //
 
 #include "ThePEG/MatrixElement/MEBase.h"
 #include "Herwig/Shower/Core/Base/ShowerParticle.fh"
 #include "Herwig/Shower/Core/Base/ShowerProgenitor.fh"
 #include "Herwig/Shower/RealEmissionProcess.fh"
 #include "Herwig/Shower/Core/ShowerInteraction.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 #include "HwMEBase.fh"
 
 namespace Herwig {
 
 struct Branching;
 
 using namespace ThePEG;
 
 typedef Ptr<BeamParticleData>::transient_const_pointer tcBeamPtr;
 
 /**
  * The HwMEBase class serves a number of purposes
  * - it implements the phase space for \f$2\to2\f$ scattering processes
  * - it provides virtual members for the implementation of hard radiation
  * - it gives us greater control over the masses of the outgoing
  *   particles so that they can be
  *   - set massless where required by gauge invariance
  *   - have their off-shell masses generated using the sophisticated approaches
  *     available in Herwig.
  *
  * @see \ref HwMEBaseInterfaces "The interfaces"
  * defined for HwMEBase.
  */
 class HwMEBase: public MEBase {
 
 public:
 
   /**
    * Default constructor.
    */
   HwMEBase() : lastTHat_(ZERO), lastUHat_(ZERO),
 	       lastPhi_(0.0), rescaleOption_(1)
   {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given 'nDim()' uniform
    * random numbers in the interval ]0,1[. To help the phase space
    * generator, the 'dSigHatDR()' should be a smooth function of these
    * numbers, although this is not strictly necessary. Return
    * false if the chosen points failed the kinematical cuts.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object.
    */
   virtual void setKinematics();
   //@}
 
   /**
    *  Virtual members to be overridden by inheriting classes
    *  which implement hard corrections 
    */
   //@{
 
   /**
    * Type of POWHEG correction
    */
   enum POWHEGType {No, ISR, FSR, Both};
 
   /**
    *  Has a POWHEG style correction
    */
   virtual POWHEGType  hasPOWHEGCorrection() {return No;}
 
   /**
    *  Has an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return false;}
 
   /**
    *  Initialize the ME correction
    */
   virtual void initializeMECorrection(RealEmissionProcessPtr , double & ,
 				      double & );
 
   /**
    *  Apply the hard matrix element correction to a given hard process or decay
    */
   virtual RealEmissionProcessPtr applyHardMatrixElementCorrection(RealEmissionProcessPtr);
 
   /**
    * Apply the soft matrix element correction
    * @param initial The particle from the hard process which started the 
    * shower
    * @param parent The initial particle in the current branching
    * @param br The branching struct
    * @return If true the emission should be vetoed
    */
   virtual bool softMatrixElementVeto(ShowerProgenitorPtr initial,
 				     ShowerParticlePtr parent,
 				     Branching br);
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Access cached values in of the last set phase space point. */
   //@{
   /**
    * Return the \f$\hat{t}\f$ of the last set phase space point.
    */
   Energy2 tHat() const { return lastTHat_; }
 
   /**
    * Return the \f$\hat{u}\f$ of the last set phase space point.
    */
   Energy2 uHat() const { return lastUHat_; }
 
   /**
    * Return the azimuth angle of the last set phase space point.
    */
   double phi() const { return lastPhi_; }
   //@}
 
   /** @name Set the cached values in of the last set phase space point. */
   //@{
   /**
    * Set the \f$\hat{t}\f$ of the last set phase space point.
    */
   void tHat(Energy2 e2) { lastTHat_ = e2; }
 
   /**
    * Set the \f$\hat{u}\f$ of the last set phase space point.
    */
   void uHat(Energy2 e2) { lastUHat_ = e2; }
 
   /**
    * Set the azimuth angle of the last set phase space point.
    */
   void phi(double phi) { lastPhi_ = phi; }
   //@}
 
   /**
    *  Set the treatment of the outgoing masses
    * @param iopt The option for the treatment of the mass
    */
   void massOption(vector<unsigned int> iopt) {
     massOption_ = iopt;
   }
 
   /**
    *  Rescaled momenta for the helicity ME
    */
   //@{
   /**
    * Set the treatment of the rescaling of the momenta for 
    * the matrix element calculation
    * @param iopt The rescaling option
    */
   void rescalingOption(unsigned int iopt) {
     rescaleOption_=iopt;
   }
 
   /**
    *  rescale the momenta for the computation of the helicity matrix element
    */
   bool rescaleMomenta(const vector<Lorentz5Momentum> &,
 		      const cPDVector &);
 
   /**
    *  Access to the rescaled momenta
    */
   const vector<Lorentz5Momentum> & rescaledMomenta() const {
     return rescaledMomenta_;
   }
   //@}
 
   /**
    *  Generate the masses of the particles
    */ 
   bool generateMasses(vector<Energy> & masses, double & mjac,
 		      const double *r);
 
   /**
    * Used internally by generateKinematics, after calculating the
    * limits on cos(theta).
    */
   virtual double getCosTheta(double cthmin, double cthmax, const double r);
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class without persistent data.
-   */
-  static AbstractClassDescription<HwMEBase> initHwMEBase;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   HwMEBase & operator=(const HwMEBase &);
 
 private:
 
   /**
    *  Option for the treatment of the particle masses
    */
   vector<unsigned int> massOption_;
   
   /**
    * The \f$\hat{t}\f$ of the last set phase space point.
    */
   Energy2 lastTHat_;
   
   /**
    * The \f$\hat{u}\f$ of the last set phase space point.
    */
   Energy2 lastUHat_;
 
   /**
    * The azimuth angle of the last set phase space point.
    */
   double lastPhi_;
 
   /**
    *  Produced to produce rescaled momenta
    */
   unsigned int rescaleOption_;
 
   /**
    *  Rescaled momenta for use in ME calculations
    */
   vector<Lorentz5Momentum> rescaledMomenta_;
 
 };
 
 }
 
 #endif /* HERWIG_HwMEBase_H */
diff --git a/MatrixElement/Lepton/MEee2Higgs2SM.h b/MatrixElement/Lepton/MEee2Higgs2SM.h
--- a/MatrixElement/Lepton/MEee2Higgs2SM.h
+++ b/MatrixElement/Lepton/MEee2Higgs2SM.h
@@ -1,242 +1,236 @@
 // -*- C++ -*-
 //
 // MEee2Higgs2SM.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEee2Higgs2SM_H
 #define HERWIG_MEee2Higgs2SM_H
 //
 // This is the declaration of the MEee2Higgs2SM class.
 //
 
 #include "ThePEG/MatrixElement/ME2to2Base.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEee2Higgs2SM class implements the production of an \f$s\f$-channel
  * Higgs in \f$e^+e^-\f$ collisions in order to allow easy tests of Higgs
  * decays. It should not be used for physics studies.
  *
  * @see \ref MEee2Higgs2SMInterfaces "The interfaces"
  * defined for MEee2Higgs2SM.
  */
 class MEee2Higgs2SM: public ME2to2Base {
 
 public:
 
   /**
    * The default constructor.
    */
   inline MEee2Higgs2SM() : allowed_(0) {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    * set up the spin correlations
    */
   virtual void constructVertex(tSubProPtr sub);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Rebind pointer to other Interfaced objects. Called in the setup phase
    * after all objects used in an EventGenerator has been cloned so that
    * the pointers will refer to the cloned objects afterwards.
    * @param trans a TranslationMap relating the original objects to
    * their respective clones.
    * @throws RebindException if no cloned object was found for a given
    * pointer.
    */
   virtual void rebind(const TranslationMap & trans)
    ;
 
   /**
    * Return a vector of all pointers to Interfaced objects used in this
    * object.
    * @return a vector of pointers.
    */
   virtual IVector getReferences();
   //@}
 
 private: 
 
   /**
    *  The matrix element
    * @param fin The incoming spinor wavefunction
    * @param ain The incoming spinorbar wavefunction
    * @param fout The outgoing spinor bar wavefunction
    * @param aout The outgoing spinor wavefunction
    * @param me The spin averaged matrix element
    */
   ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> fin,
 				     vector<SpinorBarWaveFunction> ain,
 				     vector<SpinorBarWaveFunction> fout,
 				     vector<SpinorWaveFunction> aout,double& me) const;
   /**
    *  \f$H\to gg\f$ matrix element
    * @param fin The incoming spinor wavefunction
    * @param ain The incoming spinorbar wavefunction
    * @param g1 Outgoing gluon wavefunction
    * @param g2 Outgoing gluon wavefunction
    * @param me The spin averaged matrix element
    */
   ProductionMatrixElement ggME(vector<SpinorWaveFunction> fin,
 			       vector<SpinorBarWaveFunction> ain,
 			       vector<VectorWaveFunction> g1,
 			       vector<VectorWaveFunction> g2, 
 			       double & me) const;
   
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEee2Higgs2SM> initMEee2Higgs2SM;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2Higgs2SM & operator=(const MEee2Higgs2SM &);
 
 private:
 
   /**
    *  Pointer to the Higgs fermion-antifermion vertex
    */
   AbstractFFSVertexPtr FFHVertex_;
 
   /**
    *  Pointer to Higgs-gluon-gluon vertex
    */
   AbstractVVSVertexPtr HGGVertex_;
 
   /**
    * Allowed outgoing particles
    */
   int allowed_;
 
   /**
    *  Pointer to the Higgs ParticleData object
    */
   PDPtr h0_;
 };
 
 }
 
 #endif /* HERWIG_MEee2Higgs2SM_H */
diff --git a/MatrixElement/Lepton/MEee2HiggsVBF.h b/MatrixElement/Lepton/MEee2HiggsVBF.h
--- a/MatrixElement/Lepton/MEee2HiggsVBF.h
+++ b/MatrixElement/Lepton/MEee2HiggsVBF.h
@@ -1,89 +1,83 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEee2HiggsVBF_H
 #define HERWIG_MEee2HiggsVBF_H
 //
 // This is the declaration of the MEee2HiggsVBF class.
 //
 
 #include "Herwig/MatrixElement/MEfftoffH.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEee2HiggsVBF class 
  *
  * @see \ref MEee2HiggsVBFInterfaces "The interfaces"
  * defined for MEee2HiggsVBF.
  */
 class MEee2HiggsVBF: public MEfftoffH {
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
   //@}
 
 public:
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an concrete class without persistent data.
-   */
-  static NoPIOClassDescription<MEee2HiggsVBF> initMEee2HiggsVBF;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2HiggsVBF & operator=(const MEee2HiggsVBF &);
 
 };
 
 }
 
 #endif /* HERWIG_MEee2HiggsVBF_H */
diff --git a/MatrixElement/Lepton/MEee2VV.h b/MatrixElement/Lepton/MEee2VV.h
--- a/MatrixElement/Lepton/MEee2VV.h
+++ b/MatrixElement/Lepton/MEee2VV.h
@@ -1,239 +1,233 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEee2VV_H
 #define HERWIG_MEee2VV_H
 //
 // This is the declaration of the MEee2VV class.
 //
 
 #include "Herwig/MatrixElement/HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEee2VV class implements the matrix elements for 
  * \f$e^+e^-\to W^+W^-/|^0Z^0\f$.
  *
  * @see \ref MEee2VVInterfaces "The interfaces"
  * defined for MEee2VV.
  */
 class MEee2VV: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEee2VV();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    * Used internally by generateKinematics, after calculating the
    * limits on cos(theta).
    */
   virtual double getCosTheta(double cthmin, double cthmax, const double r);
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$f\bar{f}\to W^+W^-\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  Polarization vector for the 1st outgoing boson
    * @param v2  Polarization vector for the 2nd outgoing boson
    */
   double WWME(vector<SpinorWaveFunction>    & f1,
 	      vector<SpinorBarWaveFunction> & a1,
 	      vector<VectorWaveFunction>    & v1,
 	      vector<VectorWaveFunction>    & v2) const;
 
   /**
    * Matrix element for \f$f\bar{f}\to Z^0Z^0\f$.
    * @param f1  Spinors for the incoming fermion
    * @param a1  Spinors for the incoming antifermion
    * @param v1  Polarization vector for the 1st outgoing boson
    * @param v2  Polarization vector for the 2nd outgoing boson
    */
   double ZZME(vector<SpinorWaveFunction>    & f1,
 	      vector<SpinorBarWaveFunction> & a1,
 	      vector<VectorWaveFunction>    & v1,
 	      vector<VectorWaveFunction>    & v2) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEee2VV> initMEee2VV;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2VV & operator=(const MEee2VV &);
 
 private:
 
   /**
    *  Vertices
    */
   //@{
   /**
    *   FFPVertex
    */
   AbstractFFVVertexPtr FFPvertex_;
 
   /**
    *   FFWVertex
    */
   AbstractFFVVertexPtr FFWvertex_;
 
   /**
    *   FFZVertex
    */
   AbstractFFVVertexPtr FFZvertex_;
 
   /**
    *  WWW Vertex
    */ 
   AbstractVVVVertexPtr WWWvertex_;
   //@}
 
   /**
    *  Processes
    */
   unsigned int process_;
 
   /**
    *  Treatment of the the W and Z masses
    */
   unsigned int massOption_;
 
   /**
    *  The matrix element
    */
   mutable ProductionMatrixElement me_;
 };
 
 }
 
 #endif /* HERWIG_MEee2VV_H */
diff --git a/MatrixElement/Lepton/MEee2VectorMeson.h b/MatrixElement/Lepton/MEee2VectorMeson.h
--- a/MatrixElement/Lepton/MEee2VectorMeson.h
+++ b/MatrixElement/Lepton/MEee2VectorMeson.h
@@ -1,242 +1,236 @@
 // -*- C++ -*-
 //
 // MEee2VectorMeson.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef THEPEG_MEee2VectorMeson_H
 #define THEPEG_MEee2VectorMeson_H
 //
 // This is the declaration of the MEee2VectorMeson class.
 //
 
 #include "ThePEG/MatrixElement/MEBase.h"
 #include "Herwig/PDT/GenericMassGenerator.fh"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h"
 #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 using Helicity::SpinorWaveFunction;
 using Helicity::SpinorBarWaveFunction;
 using Helicity::VectorWaveFunction;
 
 /**
  * The MEee2VectorMeson class is designed to produce neutral vector mesons
  * in \f$e^+e^-\f$ collisions and is primarily intended to test the hadronic
  * decay package.
  *
  * @see \ref MEee2VectorMesonInterfaces "The interfaces"
  * defined for MEee2VectorMeson.
  */
 class MEee2VectorMeson: public MEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   inline MEee2VectorMeson() :_coupling(0.0012), _lineshape(false) 
   {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Set up the spin correlations 
    */
   virtual void constructVertex(tSubProPtr sub);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
   
   /**
    *  Member to return the helicity amplitudes
    */
   ProductionMatrixElement HelicityME(vector<SpinorWaveFunction> fin,
 				     vector<SpinorBarWaveFunction> ain,
 				     vector<VectorWaveFunction> vout,double& me) const;
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEee2VectorMeson> initMEee2VectorMeson;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2VectorMeson & operator=(const MEee2VectorMeson &);
 
 private:
 
   /**
    *  The vector meson being produced
    */
   PDPtr _vector;
 
   /**
    *  The coupling
    */
   double _coupling;
 
   /**
    *  Use the mass generator for the line shape
    */
   bool _lineshape;
 
   /**
    *  Pointer to the mass generator for the Higgs
    */
   GenericMassGeneratorPtr _massgen;
 
 };
 
 }
 
 #endif /* THEPEG_MEee2VectorMeson_H */
diff --git a/MatrixElement/Lepton/MEee2ZH.h b/MatrixElement/Lepton/MEee2ZH.h
--- a/MatrixElement/Lepton/MEee2ZH.h
+++ b/MatrixElement/Lepton/MEee2ZH.h
@@ -1,99 +1,93 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEee2ZH_H
 #define HERWIG_MEee2ZH_H
 //
 // This is the declaration of the MEee2ZH class.
 //
 
 #include "Herwig/MatrixElement/MEfftoVH.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEee2ZH class implements the matrix element
  * for \f$e^+e^-\to Z^0h^0\f$.
  *
  * @see \ref MEee2ZHInterfaces "The interfaces"
  * defined for MEee2ZH.
  */
 class MEee2ZH: public MEfftoVH {
 
 public:
 
   /** @name Virtual functions required by the MEfftoVH class. */
   //@{
   /**
    * Add all possible diagrams with the add() function.
    */
   virtual void getDiagrams() const;
 
   /**
    *  Has not got a POWHEG style correction
    */
   virtual POWHEGType hasPOWHEGCorrection() {return No;}
 
   /**
    *  Has not got an old fashioned ME correction
    */
   virtual bool hasMECorrection() {return false;}
 
 public:
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<MEee2ZH> initMEee2ZH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2ZH & operator=(const MEee2ZH &);
 
 };
 
 }
 
 #endif /* HERWIG_MEee2ZH_H */
diff --git a/MatrixElement/MEfftoVH.h b/MatrixElement/MEfftoVH.h
--- a/MatrixElement/MEfftoVH.h
+++ b/MatrixElement/MEfftoVH.h
@@ -1,315 +1,309 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEfftoVH_H
 #define HERWIG_MEfftoVH_H
 //
 // This is the declaration of the MEfftoVH class.
 //
 
 #include "DrellYanBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The MEfftoVH class is the base class for \f$f\bar{f}\to VH\f$ processes. 
  * This base class handles the phase-space integration while
  * the inheriting classes implement the matrix element
  *
  * @see \ref MEfftoVHInterfaces "The interfaces"
  * defined for MEfftoVH.
  */
 class MEfftoVH: public DrellYanBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEfftoVH() : _shapeopt(2), _maxflavour(5), _mh(), _wh() {}
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$f\bar{f}\to V h^0\to f'\bar{f'} h^0\f$.
    * @param fin  Spinors for incoming fermion
    * @param ain  Spinors for incoming antifermion
    * @param fout Spinors for incoming fermion
    * @param aout Spinors for incoming antifermion
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double helicityME(vector<SpinorWaveFunction> & fin ,
 		 vector<SpinorBarWaveFunction> & ain ,
 		 vector<SpinorBarWaveFunction> & fout,
 		 vector<SpinorWaveFunction>    & aout,
 		 bool me) const;
 
   /**
    *  Access to the vector ParticleData objects
    */
   //@{
   /**
    *  Access to the \f$W^+\f$ data
    */ 
   PDPtr WPlus() const { return _wplus; }
 
   /**
    *  Access to the \f$W^-\f$ data
    */ 
   PDPtr WMinus() const { return _wminus; }
 
   /**
    *  Access to the \f$Z^0\f$ data
    */ 
   PDPtr Z0() const { return _z0; }
 
   /**
    *  Access to the higgs data
    */ 
   PDPtr higgs() const { return _higgs; }
 
   /**
    *  Set the higgs data
    */ 
   void higgs(PDPtr in) {_higgs =in;}
   //@}
 
   /**
    *  Set the pointer to the vector-vector-Higgs vertex
    */
   void setWWHVertex(AbstractVVSVertexPtr in) {
     _vertexWWH = in;
   }
 
   /**
    *  Set the line shape treatment
    */
   void lineShape(unsigned int in) {_shapeopt=in;}
 
   /**
    *  Maximum flavour of the incoming partons
    */
   unsigned int maxFlavour() const {return _maxflavour;}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<MEfftoVH> initMEfftoVH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEfftoVH & operator=(const MEfftoVH &);
 
 private:
 
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int _shapeopt;
 
   /**
    *  The allowed flavours of the incoming quarks
    */
   unsigned int _maxflavour;
 
   /**
    *  The intermediate vector bosons
    */
   //@{
   /**
    *  \f$W^+\f$
    */
   PDPtr _wplus;
 
   /**
    *  \f$W^-\f$
    */
   PDPtr _wminus;
 
   /**
    *  \f$Z^0\f$
    */
   PDPtr _z0;
 
   /**
    *  The higgs bosom
    */
   PDPtr _higgs;
   //@}
 
   /**
    *  The vertices for the calculation of the matrix element
    */
   //@{
   /**
    *  Vertex for fermion-fermion-W
    */
   AbstractFFVVertexPtr _vertexFFW;
 
   /**
    *  Vertex for fermion-fermion-Z
    */
   AbstractFFVVertexPtr _vertexFFZ;
 
   /**
    *  Vertex for vector-vector-Higgs
    */
   AbstractVVSVertexPtr _vertexWWH;
   //@}
 
   /**
    *  On-shell mass for the higgs
    */
   Energy _mh;
 
   /**
    *  On-shell width for the higgs
    */
   Energy _wh;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr _hmass;
 
   /**
    * Matrix element for spin correlations
    */
   ProductionMatrixElement _me;
 };
 
 }
 
 #endif /* HERWIG_MEfftoVH_H */
diff --git a/MatrixElement/MEfftoffH.h b/MatrixElement/MEfftoffH.h
--- a/MatrixElement/MEfftoffH.h
+++ b/MatrixElement/MEfftoffH.h
@@ -1,355 +1,349 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEfftoffH_H
 #define HERWIG_MEfftoffH_H
 //
 // This is the declaration of the MEfftoffH class.
 //
 
 #include "HwMEBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "Herwig/MatrixElement/ProductionMatrixElement.h"
 #include "Herwig/PDT/GenericMassGenerator.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEfftoffH class is the base class for vector boson fusion type
  * processes in Herwig.
  *
  * @see \ref MEfftoffHInterfaces "The interfaces"
  * defined for MEfftoffH.
  */
 class MEfftoffH: public HwMEBase {
 
 public:
 
   /**
    * The default constructor.
    */
   MEfftoffH() : _shapeopt(2), _maxflavour(5), _minflavour(1), _process(0), 
 		_mh(), _wh(), _swap(false) {}
   
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the order in \f$\alpha_S\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaS() const;
 
   /**
    * Return the order in \f$\alpha_{EW}\f$ in which this matrix
    * element is given.
    */
   virtual unsigned int orderInAlphaEW() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * Set the typed and momenta of the incoming and outgoing partons to
    * be used in subsequent calls to me() and colourGeometries()
    * according to the associated XComb object. If the function is
    * overridden in a sub class the new function must call the base
    * class one first.
    */
   virtual void setKinematics();
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
 
   /**
    * Get diagram selector. With the information previously supplied with the
    * setKinematics method, a derived class may optionally
    * override this method to weight the given diagrams with their
    * (although certainly not physical) relative probabilities.
    * @param dv the diagrams to be weighted.
    * @return a Selector relating the given diagrams to their weights.
    */
   virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
 
   /**
    * Return a Selector with possible colour geometries for the selected
    * diagram weighted by their relative probabilities.
    * @param diag the diagram chosen.
    * @return the possible colour geometries weighted by their
    * relative probabilities.
    */
   virtual Selector<const ColourLines *>
   colourGeometries(tcDiagPtr diag) const;
 
   /**
    *  Construct the vertex of spin correlations.
    */
   virtual void constructVertex(tSubProPtr);
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Matrix element for \f$ff\to h^0\to ff h^0\f$.
    * @param f1  Spinors for first  incoming fermion
    * @param f2  Spinors for second incoming fermion
    * @param a1  Spinors for first  outgoing fermion
    * @param a2  Spinors for second outgoing fermion
    * @param swap1 Whether or not to swap the order for the first fermion line
    * @param swap2 Whether or not to swap the order for the second fermion line
    * @param me  Whether or not to calculate the matrix element for spin correlations
    */
   double helicityME(vector<SpinorWaveFunction> & f1 ,
 		    vector<SpinorWaveFunction> & f2 ,
 		    vector<SpinorBarWaveFunction> & a1,
 		    vector<SpinorBarWaveFunction> & a2,
 		    bool swap1, bool swap2,
 		    bool me) const;
 
   /**
    *  Access to the vector ParticleData objects
    */
   //@{
   /**
    *  Access to the \f$W^+\f$ data
    */ 
   PDPtr WPlus() const {return _wplus;}
 
   /**
    *  Access to the \f$W^-\f$ data
    */ 
   PDPtr WMinus() const {return _wminus;}
 
   /**
    *  Access to the \f$Z^0\f$ data
    */ 
   PDPtr Z0() const {return _z0;}
 
   /**
    *  Access to the Higgs boson
    */
   PDPtr higgs() const {return _higgs;}
 
   /**
    *  Set the Higgs boson
    */
   void higgs(PDPtr in) {_higgs=in;}
   //@}
 
   /**
    *  Set the pointer to the vector-vector-Higgs vertex
    */
   void setWWHVertex(AbstractVVSVertexPtr in) {
     _vertexWWH = in;
   }
 
   /**
    *  Set the line shape treatment
    */
   void lineShape(unsigned int in) {_shapeopt=in;}
 
   /**
    *  Which process to generate
    */
   unsigned int process() const {return _process;}
 
   /**
    *  Whether momenta are swapped
    */
   bool swapOrder() {return _swap;}
 
   /**
    *  Which process to generate
    */
   void process(unsigned int in) {_process = in;}
 
   /**
    *  Maximum flavour of the incoming partons
    */
   unsigned int maxFlavour() const {return _maxflavour;}
 
   /**
    *  Minimum flavour of the incoming partons
    */
   unsigned int minFlavour() const {return _minflavour;}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<MEfftoffH> initMEfftoffH;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEfftoffH & operator=(const MEfftoffH &);
 
 private:
 
   /**
    * Defines the Higgs resonance shape
    */
   unsigned int _shapeopt;
 
   /**
    *  Maximum flavour of the quarks involved 
    */
   unsigned int _maxflavour;
 
   /**
    *  Minimum flavour of the quarks involved 
    */
   unsigned int _minflavour;
 
   /**
    *  Whether to include $WW$ and $ZZ$ processes or both
    */
   unsigned int _process;
 
   /**
    *  The intermediate vector bosons
    */
   //@{
   /**
    *  \f$W^+\f$
    */
   PDPtr _wplus;
 
   /**
    *  \f$W^-\f$
    */
   PDPtr _wminus;
 
   /**
    *  \f$Z^0\f$
    */
   PDPtr _z0;
 
   /**
    *  Higgs boson
    */
   PDPtr _higgs;
   //@}
 
   /**
    *  The vertices for the calculation of the matrix element
    */
   //@{
   /**
    *  Vertex for fermion-fermion-W
    */
   AbstractFFVVertexPtr _vertexFFW;
 
   /**
    *  Vertex for fermion-fermion-Z
    */
   AbstractFFVVertexPtr _vertexFFZ;
 
   /**
    *  Vertex for vector-vector-Higgs
    */
   AbstractVVSVertexPtr _vertexWWH;
   //@}
 
   /**
    *  On-shell mass for the higgs
    */
   Energy _mh;
 
   /**
    *  On-shell width for the higgs
    */
   Energy _wh;
 
   /**
    *  The mass generator for the Higgs
    */
   GenericMassGeneratorPtr _hmass;
 
 
   /**
    * Matrix element for spin correlations
    */
   mutable ProductionMatrixElement _me;
 
   /**
    *  if order swaped
    */
   bool _swap;
 };
 
 }
 
 #endif /* HERWIG_MEfftoffH_H */
diff --git a/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h b/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h
--- a/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h
+++ b/MatrixElement/Matchbox/Cuts/FrixionePhotonSeparationCut.h
@@ -1,155 +1,149 @@
 // -*- C++ -*-
 //
 // FrixionePhotonSeparationCut.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef Herwig_FrixionePhotonSeparationCut_H
 #define Herwig_FrixionePhotonSeparationCut_H
 //
 // This is the declaration of the FrixionePhotonSeparationCut class.
 //
 
 #include "ThePEG/Cuts/MultiCutBase.h"
 #include "ThePEG/PDT/MatcherBase.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * \ingroup Matchbox
  * \author Michael Rauch
  *
  * \brief This class implements a cut on legoplot and rapidity separation
  *
  * @see \ref FrixionePhotonSeparationCutInterfaces "The interfaces"
  * defined for FrixionePhotonSeparationCut.
  */
 class FrixionePhotonSeparationCut: public MultiCutBase {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   FrixionePhotonSeparationCut() :  theDeltaZero(0.0), theExponentn(1.0), theEfficiency(0.0), theCutType(1) {}
   //@}
 
 public:
 
   /** @name Overridden virtual functions defined in the base class. */
   //@{
   /**
    * Return true if a pair of particles with type \a pitype and \a
    * pjtype and momenta \a pi and \a pj respectively passes the
    * cuts. \a inci and \a inj indicates if the corresponding particles
    * are incoming.
    */
   virtual bool passCuts(tcCutsPtr, const tcPDVector & ptype,
 	                const vector<LorentzMomentum> & p) const;
   //@}
 
   /**
    * Describe the currently active cuts in the log file.
    */
   virtual void describe() const;
 
   /**
    * Return the matcher for particles to isolate on.
    */
   Ptr<MatcherBase>::tptr matcher() const { return theMatcher; }
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
    * The maximal legoplot separation where partons are included in the criterium
    */
   double theDeltaZero;
 
   /**
    * The exponent n of the algorithm
    */
   double theExponentn;
 
   /**
    * The efficiency epsilon of the algorithm
    */
   double theEfficiency;
 
   /**
    * The cut type of the algorithm
    */
   int theCutType;
 
   /**
    * A matcher for particles to isolate on.
    */
   Ptr<MatcherBase>::ptr theMatcher;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<FrixionePhotonSeparationCut> initFrixionePhotonSeparationCut;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   FrixionePhotonSeparationCut & operator=(const FrixionePhotonSeparationCut &);
 
 };
 
 }
 
 #endif /* Herwig_FrixionePhotonSeparationCut_H */
diff --git a/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h b/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h
--- a/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h
+++ b/MatrixElement/Matchbox/InsertionOperators/DipoleMPKOperator.h
@@ -1,489 +1,483 @@
 // -*- C++ -*-
 //
 // DipoleMPKOperator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_DipoleMPKOperator_H
 #define HERWIG_DipoleMPKOperator_H
 //
 // This is the declaration of the DipoleMPKOperator class.
 //
 
 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h"
 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h"
 #include "ThePEG/PDF/PDF.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * \ingroup Matchbox
  * \author Simon Platzer, Daniel Rauch, Christian Reuschle,
  *         Johannes Bellm
  *
  * \brief DipoleMPKOperator implements the P+K
  * insertion operator for the massive case.
  * DipoleMPKOperator does not apply for dimen-
  * sional reduction.
  *
  */
 class DipoleMPKOperator: public MatchboxInsertionOperator {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   DipoleMPKOperator();
 
   /**
    * The destructor.
    */
   virtual ~DipoleMPKOperator();
   //@}
 
 public:
 
   /**
    * Set the XComb object steering the Born matrix
    * element this class represents virtual corrections to.
    */
   virtual void setXComb(tStdXCombPtr xc);
 
   /**
    * Return the number of additional random variables
    * needed to calculate this virtual correction.
    * We treat all integrations on equal footing.
    */
   virtual int nDimAdditional() const { return 1; }
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the jet particle group.
    */
   vector<int> NLightJetVec() const;
 
   /**
    * Return a vector of PDG codes of the heavy flavours,
    * which are contained in the jet particle group.
    */
   vector<int> NHeavyJetVec() const;
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the associated Born sub-process.
    */
   vector<int> NLightBornVec() const;
 
   /**
    * Return a vector of PDG codes of the heavy flavours,
    * which are contained in the associated Born sub-process.
    */
   vector<int> NHeavyBornVec() const;
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the proton particle group.
    */
   vector<int> NLightProtonVec() const;
 
   /**
    * Evaluate the finite virtual correction for the
    * variables supplied through the Born XComb object
    * and possible additional random numbers.
    */
   virtual double me2() const;
 
   /**
    * Evaluate the finite virtual correction for the
    * variables supplied through the Born XComb object
    * and possible additional random numbers.
    */
   virtual CrossSection dSigHatDR() const { 
     return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat());
   }
 
 public:
 
   /**
    * Return true, if contributions exist to
    * the given parton.
    */
   bool apply(tcPDPtr) const;
 
   /**
    * Return true, if contributions exist to
    * the given parton.
    */
   bool applyNotMassless(tcPDPtr) const;
 
   /**
    * Return true, if this virtual correction
    * applies to the given process.
    */
   virtual bool apply(const cPDVector&) const;
 
   /**
    * The initial-final contribution
    * [1/(1-z)]_+ + \delta(1-z)
    */
   double gammaSoft() const;
 
   /**
    * [(1/(1-z))*ln((1-z)/z)]_+
    */
   double softLogByz(tcPDPtr p) const;
 
   /**
    * [(1/(1-z))*ln((1-z))]_+
    */
   double softLog(tcPDPtr p) const;
 
   /**
    * The Kbar^{qq} contribution
    */
   double KBarqq() const;
 
   /**
    * The Ktilde^{qq} contribution
    */
   double KTildeqq() const;
 
   /**
    * The P^{qq} contribution
    */
   double Pqq() const;
 
   /**
    * The Kbar^{qg} contribution
    */
   double KBarqg() const;
 
   /**
    * The Ktilde^{qg} contribution
    */
   double KTildeqg() const;
 
   /**
    * The P^{qg} contribution
    */
   double Pqg() const;
 
   /**
    * The Kbar^{gq} contribution
    */
   double KBargq() const;
 
   /**
    * The Ktilde^{gq} contribution
    */
   double KTildegq() const;
 
   /**
    * The P^{gq} contribution
    */
   double Pgq() const;
 
   /**
    * The Kbar^{gg} contribution
    */
   double KBargg() const;
 
   /**
    * The Ktilde^{gg} contribution
    */
   double KTildegg() const;
 
   /**
    * The P^{gg} contribution
    */
   double Pgg() const;
 
   //////////////////////////////////////
 
   /**
    * Kscript^{a,a'}_j terms with j=quark
    */
 
   /**
    * [J^a_{gQ}(z,\mu_Q^2)]_+
    * a,a' = quark for later
    * use of this function
    * in Kscript^{qq}_q
    */
   double Ja_gQplus(double muQ2) const;
 
   /**
    * [1/(1-z)]_+ * log( (2-z)/(2-z+\mu_Q^2) )
    * a,a' = quark for later use of this function
    * in Kscript^{qq}_q
    */
   double gammaSoft2(double muQ2) const;
 
   /**
    * The Kscript^{qq}_q contribution
    */
   double Kscriptqq_q(Energy2 sja, Energy2 mj2) const;
 
   /**
    * The Kscript^{qg}_q contribution
    */
   double Kscriptqg_q(Energy2 sja, Energy2 mj2) const;
 
   /**
    * The Kscript^{gq}_q contribution
    */
   double Kscriptgq_q() const;
 
   /**
    * The Kscript^{gg}_q contribution
    */
   double Kscriptgg_q(Energy2 sja, Energy2 mj2) const;
 
   /**
    * The Kscriptbar^{qq}_q contribution (B.17)
    */
   double Kscriptbarqq_q(Energy2 Qja2, Energy2 mj2) const;
 
   /**
    * The Kscriptbar^{qg}_q contribution (B.17)
    */
   double Kscriptbarqg_q(Energy2 Qja2, Energy2 mj2) const;
 
   /**
    * The Kscriptbar^{gq}_q contribution (B.17)
    */
   double Kscriptbargq_q() const;
 
   /**
    * The Kscriptbar^{gg}_q contribution (B.17)
    */
   double Kscriptbargg_q(Energy2 Qja2, Energy2 mj2) const;
 
   ////////////////////////////
 
   /**
    * Kscript^{a,a'}_j terms with j=gluon
    * The ones for a!=a' will return zero
    */
 
   /**
    * J^{a;NS}_{Q\bar{Q}}(\mu_Q^2)
    * Not folded with 1/z*PDF(x/z)*\Theta(z-x)
    */
   double JaNS_QQ(double muQ2) const;
 
   /**
    * [J^a_{Q\bar{Q}}(z,\mu_Q^2)]_{z_+}
    */
   double Ja_QQzplus(double muQ2, int F, double zplus) const;
 
   /**
    * The Kscript^{qq}_g contribution
    */
   // double Kscriptqq_g(Energy2 sja) const;
   double Kscriptqq_g(Energy2 sja, double lambda) const;
 
   /**
    * The Kscript^{qg}_g contribution
    */
   double Kscriptqg_g() const;
 
   /**
    * The Kscript^{gq}_g contribution
    */
   double Kscriptgq_g() const;
 
   /**
    * The Kscript^{gg}_g contribution
    * equals the Kscript^{qq}_g contribution
    */
   // double Kscriptgg_g(Energy2 sja) const;
   double Kscriptgg_g(Energy2 sja, double lambda) const;
 
   /**
    * The Kscriptbar^{qq}_g contribution (B.18)
    */
   // double Kscriptbarqq_g(Energy2 Qja2) const;
   double Kscriptbarqq_g(Energy2 Qja2, double lambda) const;
 
   /**
    * The Kscriptbar^{qg}_g contribution (B.18)
    */
   double Kscriptbarqg_g() const;
 
   /**
    * The Kscriptbar^{gq}_g contribution (B.18)
    */
   double Kscriptbargq_g() const;
 
   /**
    * The Kscriptbar^{gg}_g contribution (B.18)
    */
   // double Kscriptbargg_g(Energy2 Qja2) const;
   double Kscriptbargg_g(Energy2 Qja2, double lambda) const;
 
   //////////////////////////////////////
 
   /**
    * Get all contributions for the indicated incoming parton.
    */
   double sumParton(int id) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
    * C_A
    */
   double CA;
 
   /**
    * C_F
    */
   double CF;
 
   /**
    * \gamma_q
    */
   double gammaQuark;
 
   /**
    * \gamma_g
    */
   double gammaGluon;
 
   /**
    * K_q
    */
   double KQuark;
 
   /**
    * K_g
    */
   double KGluon;
 
   /**
    * The scale to be used.
    */
   mutable Energy2 scale;
 
   /**
    * The PDF to be used.
    */
   mutable tcPDFPtr pdf;
 
   /**
    * The incoming parton type considered.
    */
   mutable tcPDPtr particle;
 
   /**
    * The x to be used.
    */
   mutable double x;
 
   /**
    * The convolution variable to be used.
    */
   mutable double z;
 
   /**
    * Cache PDFs evaluated at x, x/z and x/z_+,
    * z_+ depends hereby on the masses of the heavy flavours,
    * so, in contrast to the massless case, we need a vector
    * of size 2+n_F(heavy) instead of the pair<double,double>
    */
   mutable map<pair<tcPDFPtr,tcPDPtr>,vector<double> > pdfCache;
 
   /**
    * The currently considered incoming parton.
    */
   mutable tcPDPtr parton;
 
   /**
    * Get a PDF value at x
    */
   double PDFx(tcPDPtr) const;
 
   /**
    * Get a PDF value at x/z
    */
   double PDFxByz(tcPDPtr) const;
 
   //////////////////////////////////////
 
   /**
    * Get a PDF value at x/z_+
    */
   double PDFxByzplus(tcPDPtr,int,double) const;
 
   //////////////////////////////////////
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<DipoleMPKOperator> initDipoleMPKOperator;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DipoleMPKOperator & operator=(const DipoleMPKOperator &);
 
 };
 
 }
 
 #endif /* HERWIG_DipoleMPKOperator_H */
diff --git a/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h b/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h
--- a/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h
+++ b/MatrixElement/Matchbox/InsertionOperators/DipolePKOperator.h
@@ -1,346 +1,340 @@
 // -*- C++ -*-
 //
 // DipolePKOperator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_DipolePKOperator_H
 #define HERWIG_DipolePKOperator_H
 //
 // This is the declaration of the DipolePKOperator class.
 //
 
 #include "Herwig/MatrixElement/Matchbox/InsertionOperators/MatchboxInsertionOperator.h"
 #include "Herwig/MatrixElement/Matchbox/Base/MatchboxMEBase.h"
 #include "ThePEG/PDF/PDF.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * \ingroup Matchbox
  * \author Simon Platzer, Christian Reuschle
  *
  * \brief DipolePKOperator implements the P+K
  * insertion operator.
  *
  */
 class DipolePKOperator: public MatchboxInsertionOperator {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   DipolePKOperator();
 
   /**
    * The destructor.
    */
   virtual ~DipolePKOperator();
   //@}
 
 public:
 
   /**
    * Set the XComb object steering the Born matrix
    * element this class represents virtual corrections to.
    */
   virtual void setXComb(tStdXCombPtr xc);
   
   /**
    * Set parameters for new alpha parameter.
    */
   virtual void setAlpha (double alpha)const;
 
   /**
    * Return the number of additional random variables
    * needed to calculate this virtual correction.
    * We treat all integrations on equal footing.
    */
   virtual int nDimAdditional() const { return 1; }
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the jet particle group.
    */
   vector<int> NLightJetVec() const;
 
   /**
    * Return a vector of PDG codes of the heavy flavours,
    * which are contained in the jet particle group.
    */
   vector<int> NHeavyJetVec() const;
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the associated Born sub-process.
    */
   vector<int> NLightBornVec() const;
 
   /**
    * Return a vector of PDG codes of the heavy flavours,
    * which are contained in the associated Born sub-process.
    */
   vector<int> NHeavyBornVec() const;
 
   /**
    * Return a vector of PDG codes of the light flavours,
    * which are contained in the proton particle group.
    */
   vector<int> NLightProtonVec() const;
 
   /**
    * Evaluate the finite virtual correction for the
    * variables supplied through the Born XComb object
    * and possible additional random numbers.
    */
   virtual double me2() const;
 
   /**
    * Evaluate the finite virtual correction for the
    * variables supplied through the Born XComb object
    * and possible additional random numbers.
    */
   virtual CrossSection dSigHatDR() const { 
     return sqr(hbarc) * me2() * lastBorn()->lastXComb().jacobian() / (2.*lastSHat());
   }
 
 public:
 
   /**
    * Return true, if contributions exist to
    * the given parton.
    */
   bool apply(tcPDPtr) const;
 
   /**
    * Return true, if this virtual correction
    * applies to the given process.
    */
   virtual bool apply(const cPDVector&) const;
 
   /**
    * The initial-final contribution
    */
   double gammaSoft() const;
 
   /**
    * [(1/(1-z))*ln((1-z)/z)]_+
    */
   double softLogByz(tcPDPtr p) const;
 
   /**
    * [(1/(1-z))*ln((1-z))]_+
    */
   double softLog(tcPDPtr p) const;
 
   /**
    * The Kbar^{qq} contribution
    */
   double KBarqq() const;
 
   /**
    * The Ktilde^{qq} contribution
    */
   double KTildeqq() const;
 
   /**
    * The P^{qq} contribution
    */
   double Pqq() const;
 
   /**
    * The Kbar^{qg} contribution
    */
   double KBarqg() const;
 
   /**
    * The Ktilde^{qg} contribution
    */
   double KTildeqg() const;
 
   /**
    * The P^{qg} contribution
    */
   double Pqg() const;
 
   /**
    * The Kbar^{gq} contribution
    */
   double KBargq() const;
 
   /**
    * The Ktilde^{gq} contribution
    */
   double KTildegq() const;
 
   /**
    * The P^{gq} contribution
    */
   double Pgq() const;
 
   /**
    * The Kbar^{gg} contribution
    */
   double KBargg() const;
 
   /**
    * The Ktilde^{gg} contribution
    */
   double KTildegg() const;
 
   /**
    * The P^{gg} contribution
    */
   double Pgg() const;
 
   /**
    * Get all contributions for the indicated incoming parton.
    */
   double sumParton(int id) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
    * C_A
    */
   double CA;
 
   /**
    * C_F
    */
   double CF;
 
   /**
    * \gamma_q
    */
   double gammaQuark;
 
   /**
    * \gamma_g
    */
   double gammaGluon;
 
   /**
    * K_q
    */
   mutable double KQuark;
 
   /**
    * K_g
    */
   mutable  double KGluon;
 
   /**
    * The scale to be used.
    */
   mutable Energy2 scale;
 
   /**
    * The PDF to be used.
    */
   mutable tcPDFPtr pdf;
 
   /**
    * The incoming parton type considered.
    */
   mutable tcPDPtr particle;
 
   /**
    * The x to be used.
    */
   mutable double x;
 
   /**
    * The convolution variable to be used.
    */
   mutable double z;
 
   /**
    * Cache PDFs evaluated at x and x/z
    */
   mutable map<pair<tcPDFPtr,tcPDPtr>,pair<double,double> > pdfCache;
 
   /**
    * The currently considered incoming parton.
    */
   mutable tcPDPtr parton;
 
   /**
    * Get a PDF value at x
    */
   double PDFx(tcPDPtr) const;
 
   /**
    * Get a PDF value at x/z
    */
   double PDFxByz(tcPDPtr) const;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<DipolePKOperator> initDipolePKOperator;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DipolePKOperator & operator=(const DipolePKOperator &);
 
 };
 
 }
 
 #endif /* HERWIG_DipolePKOperator_H */
diff --git a/MatrixElement/Powheg/MEPP2HiggsPowheg.h b/MatrixElement/Powheg/MEPP2HiggsPowheg.h
--- a/MatrixElement/Powheg/MEPP2HiggsPowheg.h
+++ b/MatrixElement/Powheg/MEPP2HiggsPowheg.h
@@ -1,425 +1,419 @@
 // -*- C++ -*-
 //
 // MEPP2HiggsPowheg.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEPP2HiggsPowheg_H
 #define HERWIG_MEPP2HiggsPowheg_H
 //
 // This is the declaration of the MEPP2HiggsPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEPP2Higgs.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
  
 /**
  * The MEPP2HiggsPowheg class implements the matrix element for the process
  * pp->Higgs with different Higgs shape prescriptions (see details in hep-ph/9505211)
  * and the NLL corrected Higgs width (see details in the FORTRAN HERWIG manual).
  *
  * @see \ref MEPP2HiggsPowhegInterfaces "The interfaces"
  * defined for MEPP2HiggsPowheg.
  */
 class MEPP2HiggsPowheg: public MEPP2Higgs {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2HiggsPowheg();
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Function to set the born variables. 
    */
   void get_born_variables() const;
 
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
 
   /**
    * Invariant required for the evaluation of next-to-leading order
    * quantities (Frixione et al. NPB.383 WZ production at colliders). 
    */
   Energy2 s(double xt, double y) const {
     return  p2_/x(xt,y);
   }
 
   /**
    * Invariant required for the evaluation of next-to-leading order
    * quantities (Frixione et al. NPB.383 WZ production at colliders). 
    */
   Energy2 tk(double xt, double y) const {
     double  x_xt_y(x(xt,y));
     return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.-y);
   }
 
   /**
    * Invariant required for the evaluation of next-to-leading order
    * quantities (Frixione et al. NPB.383 WZ production at colliders). 
    */
   Energy2 uk(double xt, double y) const {
     double  x_xt_y(x(xt,y));
     return -0.5*p2_/x_xt_y*(1.- x_xt_y)*(1.+y);
   }
 
   /**
    * Calculate the minimum of \f$x\f$. 
    */
   double xbar(double y) const;
 
   /**
    * Calculate auxiliary function of \f$\bar{x}(y)\f$, \f$\bar{\eta}(y)\f$. 
    */
   double etabar(double y) const;
 
   /**
    * Calculate the variable \f$x=p^{2}/s\f$ from the integration variables. 
    */
   double x(double xt, double y) const {
     double x0(xbar(y));
     return x0+(1.-x0)*xt;
   }
 
   /**
    * Calculate the momentum fraction of the plus parton. 
    */
   double xp(double x, double y) const;
 
   /**
    * Calculate the momentum fraction of the minus parton. 
    */
   double xm(double x, double y) const;
 
   /**
    * Calculate the ratio of the NLO luminosity to the LO
    * luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Lhat_ab(tcPDPtr a, tcPDPtr b, double x, double y) const;
 
   /**
    * Calculate the universal soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_universal() const;
 
   /**
    * Function for calculation of the \f$gg\f$ initiated real
    * contribution.
    */
   double Ctilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ctilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$gq\f$ initiated real
    * contribution.
    */
   double Ctilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * The regular part of the virtual correction matrix element(s) 
    */
   double M_V_regular() const;
 
   /**
    * The matrix element q + qbar -> n + g times tk*uk 
    */
   Energy2 t_u_M_R_qqbar(double xt, double y) const;
 
   /**
    * The matrix element qbar + q -> n + g times tk*uk 
    */
   Energy2 t_u_M_R_qbarq(double xt, double y) const;
 
   /**
    * The matrix element g + g    -> n + g times tk*uk 
    */
   Energy2 t_u_M_R_gg(double xt, double y) const;
 
   /**
    * The matrix element q + g    -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_qg(double xt, double y) const;
 
   /**
    * The matrix element g + q    -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_gq(double xt, double y) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_qqbar_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$\bar{q}q\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_qbarq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$qq\f$ 
    * initiated real contribution.
    */
   double Rtilde_Ltilde_gg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
   /**
    * Function for calculation of the \f$gq\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,double xt,double y) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2HiggsPowheg> initMEPP2HiggsPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2HiggsPowheg & operator=(const MEPP2HiggsPowheg &);
 
 private:
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
   /**
    *  The colour factors
    */
   const double CF_ , CA_ , TR_;
 
   /**
    * Number of light flavours (in the beta function beta0_)
    */
   const int nlf_;
 
   /**
    * (Proportional to) The beta function
    */
   const double beta0_;
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int nlo_alphaS_opt_;
 
   /**
    *  The value of alphaS to use for the nlo weight if nlo_alphaS_opt_=1
    */
   double fixed_alphaS_;
   //@}
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double xt_;
 
   /**
    *  The \f$y\f$ angular variable
    */
   double y_;
   //@}
 
   /**
    *  Values of the PDF's before radiation
    */
   mutable double lo_lumi_;
 
   /**
    *  The value of the leading order gg->H matrix element
    */
   mutable double lo_ggME_;
 
   /**
    * The invariant mass of the lo final state. 
    */
   mutable Energy2 p2_      ;
 
   /**
    * The invariant mass of the lo final state. 
    */
   mutable Energy2 s2_      ;
 
   /**
    *  The momentum fraction of the plus parton in the Born process
    */
   mutable double xbp_;
 
   /**
    *  The momentum fraction of the minus parton in the Born process
    */
   mutable double  xbm_;
 
   /**
    *  The sqrt(1-xbp_) 
    */
   mutable double etabarp_;
 
   /**
    *  The sqrt(1-xbm_) 
    */
   mutable double etabarm_;
 
   /**
    *  The ParticleData object for the plus lo parton
    */
   mutable tcPDPtr a_lo_;
 
   /**
    *  The ParticleData object for the minus lo parton
    */
   mutable tcPDPtr b_lo_;
 
   /**
    *  The BeamParticleData object for the plus direction hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer hadron_A_;
 
   /**
    *  The BeamParticleData object for the  minus direction hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer hadron_B_;
 
   /**
    *  The value of \f$\alpha_S\f$ used for the calculation
    */
   mutable double alphaS_;
 
   /**
    * Selects a dynamic (sHat) or fixed factorization scale
    */
   unsigned int scaleopt_;
 
   /**
    * The factorization  scale 
    */
   Energy mu_F_;
 
   /**
    * The renormalization scale
    */
   Energy mu_UV_;
 
   /**
    *  Prefactor if variable scale used
    */
   double scaleFact_;
 };
 
 }
 
 #endif /* HERWIG_MEPP2HiggsPowheg_H */
diff --git a/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h b/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h
--- a/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h
+++ b/MatrixElement/Powheg/MEPP2HiggsVBFPowheg.h
@@ -1,273 +1,267 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2HiggsVBFPowheg_H
 #define HERWIG_MEPP2HiggsVBFPowheg_H
 //
 // This is the declaration of the MEPP2HiggsVBFPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEPP2HiggsVBF.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the MEPP2HiggsVBFPowheg class.
  *
  * @see \ref MEPP2HiggsVBFPowhegInterfaces "The interfaces"
  * defined for MEPP2HiggsVBFPowheg.
  */
 class MEPP2HiggsVBFPowheg: public Herwig::MEPP2HiggsVBF {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2HiggsVBFPowheg();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
  /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element squared differential in the variables
    * given by the last call to generateKinematics().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  The NLO weight
    */
   double NLOWeight() const;
 
   /**
    *  Leading order matrix element
    */
   Energy4 loMatrixElement(const Lorentz5Momentum &p1,
 			  const Lorentz5Momentum &p2,
 			  const Lorentz5Momentum &q1,
 			  const Lorentz5Momentum &q2,
 			  double G1, double G2) const;
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2HiggsVBFPowheg> initMEPP2HiggsVBFPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2HiggsVBFPowheg & operator=(const MEPP2HiggsVBFPowheg &);
 
 private:
 
   /**
    *  The Born variables
    */
   //@{
   /**
    *  \f$x_B\f$
    */
   double _xB;
 
   /**
    *  Partons
    */
   tcPDPtr _partons[5];
 
   mutable Energy2 _q2;
   //@}
 
   /**
    *  The radiative variables
    */
   //@{
   /**
    *  The \f$x_p\f$ or \f$z\f$ real integration variable
    */
   double  _xp;
 
   /**
    *  The \f$z_p\f$ real integration variable 
    */
   double _zp;
 
   /**
    *  The \f$fi\f$ real integration variable 
    */
   double _phi;
   //@}
 
   /**
    *  The variables to get the right boost
    */
   //@{
   /**
    *  LO momenta 
    */
   Lorentz5Momentum _loMomenta[4];
   /**
    *  The transfered (virtual boson) momentum 
    */
   mutable Lorentz5Momentum _pa;
 
   /**
    *  The incoming quark momentum 
    */
   mutable Lorentz5Momentum _pb;
 
   /**
    *  The outgoing quark momentum
    */
   Lorentz5Momentum _pc;
 
   /**
    *  The incoming quark momentum 
    */
   Lorentz5Momentum _pbother;
 
   /**
    *  The outgoing quark momentum
    */
   Lorentz5Momentum _pcother;
   //@}
 
   /**
    *  Electroweak parameters
    */
   //@{
   /**
    *  The square of the Z mass
    */
   Energy2 _mz2;
 
   /**
    *  The square of the W mass
    */
   Energy2 _mw2;
   //@}
 
   /**
    *  The first hadron
    */
   tcBeamPtr _hadron;
 
   /**
    * Selects a dynamic or fixed factorization scale
    */
   unsigned int scaleOpt_;
 
   /**
    * The factorization scale 
    */
   Energy muF_;
 
   /**
    *  Prefactor if variable scale used
    */
   double scaleFact_;
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *  Power for sampling \f$x_p\f$
    */
   double power_;
 
   /**
    *  Jacobian for \f$x_p\f$ integral
    */
   double jac_;
 
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2HiggsVBFPowheg_H */
diff --git a/MatrixElement/Powheg/MEPP2VVPowheg.h b/MatrixElement/Powheg/MEPP2VVPowheg.h
--- a/MatrixElement/Powheg/MEPP2VVPowheg.h
+++ b/MatrixElement/Powheg/MEPP2VVPowheg.h
@@ -1,838 +1,832 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2VVPowheg_H
 #define HERWIG_MEPP2VVPowheg_H
 //
 // This is the declaration of the MEPP2VVPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEPP2VV.h"
 #include "Herwig/MatrixElement/Powheg/VVKinematics.h"
 #include "Herwig/Utilities/Maths.h"
 #include "Herwig/Models/StandardModel/StandardCKM.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using Math::ReLi2;
 using Constants::pi;
 
 /**
  * Here is the documentation of the MEPP2VVPowheg class.
  *
  * @see \ref MEPP2VVPowhegInterfaces "The interfaces"
  * defined for MEPP2VVPowheg.
  */
 class MEPP2VVPowheg: public MEPP2VV {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2VVPowheg();
  
   /** @name Member functions for the generation of hard QCD radiation */
   //@{
   /**
    *  Has a POWHEG style correction
    */
   virtual POWHEGType hasPOWHEGCorrection() {return ISR;}
 
   /**
    *  Apply the POWHEG style correction
    */
   virtual RealEmissionProcessPtr generateHardest(RealEmissionProcessPtr,
 						 ShowerInteraction inter);
   //@}
 
 public:
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * This member check the collinear limits of the 
    * real emission matrix elements are equal to the 
    * appropriate combinations of Born ME's multiplied
    * by the splitting functions.
    */
   bool sanityCheck() const;
 
   /**
    * Return the CKM matrix elements.
    */
   Complex CKM(int ix,int iy) const { return ckm_[ix][iy]; }
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
     static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 public:
 
   /**
    * Function to set the born variables. 
    */
   void getKinematics(double xt, double y, double theta2);
 
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
 
   /**
    * Calculate the ratio of the NLO luminosity to the LO
    * luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Lhat_ab(tcPDPtr a, tcPDPtr b, realVVKinematics Kinematics) const;
 
   /**
    * Calculate the universal soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_universal(realVVKinematics S) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_Ltilde_qq_on_x(tcPDPtr a,tcPDPtr b,realVVKinematics C) const;
 
   /**
    * Function for calculation of the \f$gq\f$ initiated real
    * contribution.
    */
   double Ctilde_Ltilde_gq_on_x(tcPDPtr a,tcPDPtr b,realVVKinematics C) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_qqb_on_x(tcPDPtr a,tcPDPtr b) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_qg_on_x(tcPDPtr a,tcPDPtr b) const;
 
   /**
    * Function for calculation of the \f$gqb\f$ initiated real
    * contribution.
    */
   double Rtilde_Ltilde_gqb_on_x(tcPDPtr a,tcPDPtr b) const;
 
   /**
    * The regular part of the virtual correction matrix element(s).
    * For WZ production this is given by Equation B.2 in NPB 383 (1992) 
    * 3-44 *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_V_regular(realVVKinematics S) const;
 
   /**
    *  Member variable to store the
    * regular part of the virtual correction matrix element(s).
    * For WZ production this is given by Equation B.2 in NPB 383 (1992) 
    * 3-44 *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element.
    */
   mutable double M_V_regular_;
 
   /**
    * The matrix element q + qb -> n + g times tk*uk 
    */
   Energy2 t_u_M_R_qqb(realVVKinematics R) const;
 
   /**
    *  Member variable to store the matrix element q + qb -> n + g times tk*uk 
    */
   mutable Energy2 t_u_M_R_qqb_;
 
   /**
    * The matrix element q + g  -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_qg(realVVKinematics R) const;
 
   /**
    *  Member variable to store the matrix element q + g  -> n + q times tk*uk 
    */
   mutable Energy2 t_u_M_R_qg_;
 
   /**
    * The matrix element g + qb -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_gqb(realVVKinematics R) const;
 
   /**
    *  Member variable to store the matrix element g + qb -> n + q times tk*uk 
    */
   mutable Energy2 t_u_M_R_gqb_;
 
   /**
    * The matrix element q + qb -> n + g times (tk*uk)^2 - using helicity amplitudes
    */
   Energy2 t_u_M_R_qqb_hel_amp(realVVKinematics R) const;
 
   /**
    *  Member variable to store the
    * matrix element q + qb -> n + g times (tk*uk)^2 - using helicity amplitudes
    */
   mutable Energy2 t_u_M_R_qqb_hel_amp_;
 
   /**
    * The matrix element q + g -> n + q times (tk*uk)^2 - using helicity amplitudes
    */
   Energy2 t_u_M_R_qg_hel_amp(realVVKinematics R) const;
 
   /**
    *  Member variable to store the
    * matrix element q + g -> n + q times (tk*uk)^2 - using helicity amplitudes
    */
   mutable Energy2 t_u_M_R_qg_hel_amp_;
 
   /**
    * The matrix element g + qb -> n + qb times (tk*uk)^2 - using helicity amplitudes
    */
   Energy2 t_u_M_R_gqb_hel_amp(realVVKinematics R) const;
 
   /**
    *  Member variable to store the
    * matrix element g + qb -> n + qb times (tk*uk)^2 - using helicity amplitudes
    */
   mutable Energy2 t_u_M_R_gqb_hel_amp_;
 
   /**
    * The leading order matrix element - using helicity amplitudes
    */
   double lo_me() const;
 
   /**
    * The Born matrix element as given in Equation 3.1 - 3.3 in NPB 383 
    * (1992) *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_Born_WZ(bornVVKinematics B) const;
 
   /**
    *  Member variable to store the 
    * Born matrix element as given in Equation 3.1 - 3.3 in NPB 383 
    * (1992) *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   mutable double M_Born_;
 
   /**
    * The Born matrix element as given in Equation 2.18 - 2.19 in NPB 357 
    * (1991) *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_Born_ZZ(bornVVKinematics B) const;
 
   /**
    * M_V_regular_ZZ is the regular part of the one-loop ZZ matrix element 
    * exactly as defined in Eqs. B.1 & B.2 of  NPB 357(1991)409-438 ***
    * modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_V_regular_ZZ(realVVKinematics S) const;
 
   /**
    * t_u_M_R_qqb_ZZ is the q + qb -> n + g times tk*uk real emission 
    * matrix element as defined in Eq. C.1 of  NPB 357(1991)409-438 ***
    * modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   Energy2 t_u_M_R_qqb_ZZ(realVVKinematics R) const;
 
   /**
    * The Born matrix element as given in Equation 3.2 - 3.8 in NPB 410 
    * (1993) *** modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_Born_WW(bornVVKinematics B) const;
 
   /**
    * M_V_regular_WW is the regular part of the one-loop WW matrix element 
    * exactly as defined in Eqs. C.1 - C.7 of of NPB 410(1993)280-324 ***
    * modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   double M_V_regular_WW(realVVKinematics S) const;
 
   /**
    * t_u_M_R_qqb_WW is the q + qb -> n + g times tk*uk real emission 
    * matrix element as defined in Eq. D.1-D.5 of  NPB 410(1993)280-324 ***
    * modulo a factor 1/(2s) ***, which is a flux factor that 
    * those authors absorb in the matrix element. 
    */
   Energy2 t_u_M_R_qqb_WW(realVVKinematics R) const;
 
   /**
    * Return the factorion scale squared.
    */
   Energy2 mu_F2() const;
 
   /**
    * Return the renormalisation scale squared.
    */
   Energy2 mu_UV2() const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   inline virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2VVPowheg> initMEPP2VVPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2VVPowheg & operator=(const MEPP2VVPowheg &);
 
 private:
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
 
   /**
    * Parameter to determine when to use limiting value of real emission
    * matrix elements, to avoid rounding error issues.
    */
   double tiny;
 
   /**
    *  The BeamParticleData object for the plus and minus direction hadrons
    */
   tcBeamPtr hadron_A_;
   tcBeamPtr hadron_B_;
 
   /**
    * Born / virtual 2->2 kinematics.
    */
   bornVVKinematics B_;
 
   /**
    * Soft limit of the 2->3 real emission kinematics.
    */
   realVVKinematics S_;
 
   /**
    * Soft-collinear limit of the 2->3 kinematics (emission in +z direction).
    */
   realVVKinematics SCp_;
 
   /**
    * The collinear limit of the 2->3 kinematics (emission in -z direction).
    */
   realVVKinematics SCm_;
 
   /**
    * The collinear limit of the 2->3 kinematics (emission in +z direction).
    */
   realVVKinematics Cp_;
 
   /**
    * The collinear limit of the 2->3 kinematics (emission in -z direction).
    */
   realVVKinematics Cm_;
 
   /**
    * The resolved 2->3 real emission kinematics:
    */
   realVVKinematics H_;
 
   /**
    *  The ParticleData object for the plus and minus lo partons
    */
   tcPDPtr ab_, bb_;
 
   /**
    *  The ParticleData object for the quark and antiquark 
    *  (which can be in a different order to ab_ and bb_).
    */
   tcPDPtr quark_, antiquark_;
 
   /**
    *  Values of the PDF's before radiation
    */
   double lo_lumi_;
 
   /**
    *  The value of the leading order qqbar->VV matrix element
    */
   mutable double lo_me2_;
 
   /**
    *  The CF_ colour factor
    */
   double CF_;
 
   /**
    *  The TR_ colour factor
    */
   double TR_;
 
   /**
    *  The number of colours
    */
   double NC_;
 
   /**
    *  The weak coupling and the sin (squared) of the Weinberg angle
    */
   mutable double gW_, sin2ThetaW_;
 
   /**
    *  The up and down, left handed, quark-boson couplings
    */
   mutable double guL_, gdL_;
 
   /**
    *  The up and down, right handed, quark-boson couplings (for WW & ZZ)
    */
   mutable double guR_, gdR_;
 
   /**
    *  The TGC coupling
    */
   mutable double eZ_;
 
   /**
    *  The TGC coupling squared. This is useful for debugging purposes
    *  when one wants to turn of t-channel * TGC interference contributions
    *  but leave the pure TGC contributions intact. It is also needed in 
    *  order to transform WZ matrix elements into WW ones.
    */
   mutable double eZ2_;
 
   /**
    *  The CKM factor (Fij^2)
    */
   mutable double Fij2_;
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *  Whether to generate all channels contributions or just qqb or just 
    *  qg+gqb contributions
    */
   unsigned int channels_;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int nlo_alphaS_opt_;
 
   /**
    *  The value of alphaS to use for the nlo weight if nlo_alphaS_opt_=1
    */
   double fixed_alphaS_;
 
   /**
    *  Flag to remove or multiply in MCFM branching fractions for testing
    */
   unsigned int removebr_;
 
   /**
    * Selects a dynamic (sHat) or fixed factorization scale
    */
   unsigned int scaleopt_;
 
   /**
    * The factorization scale
    */
   Energy mu_F_;
 
   /**
    * The renormalization scale
    */
   Energy mu_UV_;
 
   /**
    * The pT of V1 in a radiative event in the lab frame (for scale setting only)
    */
   Energy2 k1r_perp2_lab_;
 
   /**
    * The pT of V2 in a radiative event in the lab frame (for scale setting only)
    */
   Energy2 k2r_perp2_lab_;
 
   /**
    * The ckm matrix elements (unsquared, to allow interference)
    */
   vector< vector<Complex> > ckm_;
 
   /**
    * Option to impose helicity conservation on the real NLO ME's (greatly improves evaluation time).
    */
   bool helicityConservation_;
 
   /**
    *  The q + qb -> v1 + v2 + g  helicity amplitudes  
    */
   mutable ProductionMatrixElement qqb_hel_amps_;
 
   /**
    *  The q + g  -> v1 + v2 + q  helicity amplitudes  
    */
   mutable ProductionMatrixElement qg_hel_amps_;
 
   /**
    *  The g + qb -> v1 + v2 + qb helicity amplitudes  
    */
   mutable ProductionMatrixElement gqb_hel_amps_;
   //@}
 
   /**
    *  The vertices
    */
   //@{
   /**
    *  The photon fermion-antifermion vertex
    */
   AbstractFFVVertexPtr FFPvertex_;
 
   /**
    *  The W fermion-antifermion vertex
    */
   AbstractFFVVertexPtr FFWvertex_;
 
   /**
    *  The Z fermion-antifermionvertex
    */
   AbstractFFVVertexPtr FFZvertex_;
 
   /**
    *  The triple electroweak gauge boson vertex
    */
   AbstractVVVVertexPtr WWWvertex_;
 
   /**
    *  The quark-antiquark gluon vertex
    */
   AbstractFFVVertexPtr FFGvertex_;
   //@}
 
   /**
    *  The value of \f$\alpha_S\f$ used for the calculation
    */
   mutable double alphaS_;
 
 protected:
 
   /**
    * Returns the matrix element for a given type of process,
    * rapidity of the jet \f$y_j\f$ and transverse momentum \f$p_T\f$
    * @param emis_type the type of emission,
    * (0 is \f$q\bar{q}\to Vg\f$, 1 is \f$qg\to Vq\f$ and 2 is \f$g\bar{q}\to V\bar{q}\f$)
    * @param pT The transverse momentum of the jet
    * @param R The object containing the kinematics
    */
   double getResult(int emis_type, realVVKinematics R, Energy pT);
  
   /**
    *  generates the hardest emission (yj,p)
    * @param pnew The momenta of the new particles
    * @param emissiontype The type of emission, as for getResult
    * @return Whether not an emission was generated
    */
   bool getEvent(vector<Lorentz5Momentum> & pnew,unsigned int & emissiontype);
   
   /**
    *  sets the QCD, EW and PDF scales
    * @param pT The pT of the current step in the veto algorithm
    */
   void setTheScales(Energy pT);
 
   /**
    * The matrix element q + qb -> n + g times tk*uk 
    */
   Energy2 t_u_M_R_qqb_hel_amp(realVVKinematics R, bool getMatrix) const;
 
 
   /**
    * The matrix element q + g  -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_qg_hel_amp(realVVKinematics R, bool getMatrix) const;
 
   /**
    * The matrix element g + qb -> n + q times tk*uk 
    */
   Energy2 t_u_M_R_gqb_hel_amp(realVVKinematics R, bool getMatrix) const;
 
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   double lo_me(bool getMatrix) const;
 
   /**
    * Recalculate hard vertex to include spin correlations for radiative events.
    */
   void recalculateVertex();
 
   /**
    * Member which selects a two body decay mode for each vector
    * boson and distributes decay products isotropically
    */
   bool isotropicDecayer();
 
   /**
    * The triangle function lambda(x,y,z)=sqrt(x^2+y^2+z^2-2*x*y-2*y*z-2*x*z)
    */
   Energy2 triangleFn(Energy2,Energy2,Energy2);
 
 private:
 
   /**
    * If this boolean is true the n+1 body helicity amplitudes will be
    * used to calculate a hard vertex based on those kinematics for spin
    * correlations in the decays.
    */
   bool realMESpinCorrelations_;
 
   /**
    * The colour & spin averaged n-body (leading order) matrix element squared.
    */
   double lo_me_;
 
   /**
    * The resolved 2->3 real emission kinematics.
    */
   realVVKinematics R_;
 
   /**
    * This specifies the emitting configuration: 
    * 1: q + qbar -> V1 + V2 + g
    * 2: q + g    -> V1 + V2 + q
    * 3: g + qbar -> V1 + V2 + qbar.
    */
   unsigned int channel_;
 
   /**
    * Identifies the space-like mother of the branching
    * as quark (+1) or antiquark (-1):
    */
   int fermionNumberOfMother_;
 
   /**
    *  Pointer to the object calculating the strong coupling
    */
   ShowerAlphaPtr showerAlphaS_;
 
   /**
    *  Constants for the sampling. The distribution is assumed to have the
    *  form \f$\frac{c}{{\rm GeV}}\times\left(\frac{{\rm GeV}}{p_T}\right)^n\f$ 
    */
   //@{
   /**
    * The power, \f$n\f$, for the sampling
    */
   double power_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$q\bar{q}\f$ channel
    */
   double preqqbar_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$qg\f$ channel
    */
   double preqg_;
 
   /**
    *  The prefactor, \f$c\f$ for the \f$g\bar{q}\f$ channel
    */
   double pregqbar_;
 
   /**
    * The QCD beta function divided by 4pi, (11-2/3*nf)/4/pi, with nf = 5.
    */
   double b0_;
 
   /**
    * The fundamental QCD scale in the one-loop alpha_{S} used for the crude
    * (not the very crude) overestimate of the Sudakov exponent. The default
    * value is set so such that alphaS(MZ), neglecting all flavour threshold
    * effects i.e. MZ*exp(-1/2/b0_/alphaS(MZ)).
    */
   Energy LambdaQCD_;
 
   /**
    *  The prefactors as a vector for easy use
    */
   vector<double> prefactor_;
   //@}
 
   /**
    *  Properties of the incoming particles
    */
   //@{
   /**
    *  Pointers to the ShowerProgenitor objects for the partons
    */
   PPtr qProgenitor_;
   PPtr qbProgenitor_;
 
   /**
    *  Pointers to the Shower particle objects for the partons
    */
   PPtr showerQuark_;
   PPtr showerAntiquark_;
 
   /**
    *  Pointers to the BeamParticleData objects
    */
   tcBeamPtr qHadron_;
   tcBeamPtr qbHadron_;
   //@}
 
   /**
    *  Properties of the boson and jets
    */
   //@{
   /**
    *  Pointers to the Shower particle objects for the partons
    */
   PPtr gluon_;
   PPtr V1_;
   PPtr V2_;
   vector<PPtr> children_;
 
   /**
    *  Flag indicating if the q & qbar are flipped or not i.e. this
    *  is true if q enters from the -z direction in the lab frame.
    */
   bool flipped_;
 
   /**
    *  the rapidity of the jet
    */
   double Yk_;
 
   /**
    *  The transverse momentum of the jet
    */
   Energy pT_;
   //@}
 
   /**
    *  The transverse momentum of the jet
    */
   Energy min_pT_;
 
   // Work out the scales we want to use in the matrix elements and the pdfs:
   /**
    * Scale for alpha_S: pT^2 of the diboson system.
    */
   Energy2 QCDScale_;
 
   /**
    * Scale for real emission PDF: 
    */
   Energy2 PDFScale_;
 
   /**
    * Scale of electroweak vertices: mVV^2 the invariant mass of the diboson system.
    */
   Energy2 EWScale_;
 
   /**
    * A matrix to hold the home-grown production matrix element
    */
   mutable Complex productionMatrix_[3][3][3][3];
 
 };
 
 }
 
 #endif /* HERWIG_MEPP2VVPowheg_H */
diff --git a/MatrixElement/Powheg/MEPP2WHPowheg.h b/MatrixElement/Powheg/MEPP2WHPowheg.h
--- a/MatrixElement/Powheg/MEPP2WHPowheg.h
+++ b/MatrixElement/Powheg/MEPP2WHPowheg.h
@@ -1,392 +1,386 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2WHPowheg_H
 #define HERWIG_MEPP2WHPowheg_H
 //
 // This is the declaration of the MEPP2WHPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEPP2WH.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2WHPowheg class provides the next-to-leading order
  * matrix elements for \f$W^\pm\f$ in assoication with a Higgs boson
  * in the PoOWHEG scheme.
  *
  * @see \ref MEPP2WHPowhegInterfaces "The interfaces"
  * defined for MEPP2WHPowheg.
  */
 class MEPP2WHPowheg: public MEPP2WH {
 
 public:
 
   /**
    *  Default constructor
    */
   MEPP2WHPowheg();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given 'nDim()' uniform
    * random numbers in the interval ]0,1[. To help the phase space
    * generator, the 'dSigHatDR()' should be a smooth function of these
    * numbers, although this is not strictly necessary. Return
    * false if the chosen points failed the kinematical cuts.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
 
   /**
    * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. 
    */
   double x(double xt, double v) const;
 
   /**
    * Calculate the momentum fraction of the first parton. 
    */
   double x_a(double x, double v) const;
 
   /**
    * Calculate the momentum fraction of second parton. 
    */
   double x_b(double x, double v) const;
 
   /**
    * Calculate the minimum of \f$x\f$. 
    */
   double xbar(double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$qg\f$ initiated channel. 
    */
   double Ltilde_qg(double x, double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. 
    */
   double Ltilde_gq(double x, double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Ltilde_qq(double x, double v) const;
 
   /**
    * Calculate the soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_qq() const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ 
    * initiated real contribution.
    */
   double Ccalbar_qg(double x) const;
 
   /**
    * Function for calculation of the \f$qg\f$ 
    * initiated real contribution.
    */
   double Fcal_qg(double x, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_gq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_qq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ftilde_qg(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_gq(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_qq(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ctilde_qg(double x, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_gq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_qq(double x, double v) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2WHPowheg> initMEPP2WHPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2WHPowheg & operator=(const MEPP2WHPowheg &);
 
 private:
 
   /**
    *  The momentum fraction of the first parton in the Born process
    */
   mutable double _xb_a;
 
   /**
    *  The momentum fraction of the second parton in the Born process
    */
   mutable double _xb_b;
 
   /**
    *  The ParticleData object for the first parton in the Born process
    */
   mutable tcPDPtr _parton_a;
 
   /**
    *  The ParticleData object for the second parton in the Born process
    */
   mutable tcPDPtr _parton_b;
 
   /**
    *  The BeamParticleData object for the first  hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A;
 
   /**
    *  The BeamParticleData object for the second hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B;
 
   /**
    *  the ParticleData object for the gluon
    */
   tcPDPtr _gluon;
 
   /**
    * The \f$T_R\f$ colour factor
    */
   const double TR_;
 
   /**
    *  The \f$C_F\f$ colour factor
    */
   const double CF_;
 
   /**
    *  The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation
    */
   mutable double _alphaS2Pi;
 
   /**
    *  The mass squared of the lepton pair
    */
   mutable Energy2 _mll2;
 
   /**  
    * The renormalization/factorization scale
    */
   mutable Energy2 _mu2;
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int _contrib;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int _nlo_alphaS_opt;
 
   /**
    *  The value of alphaS to use for the nlo weight if _nloalphaSopt=1
    */
   double _fixed_alphaS;
 
   /**
    *  The magnitude of the correction term to reduce the negative contribution
    */
   double _a;
 
   /**
    *  The power of the correction term to reduce the negative contribution
    */
   double _p;
 
   /**
    *  Cut-off for the correction function
    */
   double _eps;
   //@}
 
   /**
    *  Choice of the scale
    */
   //@{
   /**
    *  Type of scale
    */
   unsigned int _scaleopt;
 
   /**
    *  Fixed scale if used
    */
   Energy _fixedScale;
 
   /**
    *  Prefactor if variable scale used
    */
   double _scaleFact;
   //@}
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double _xt;
 
   /**
    *  The \f$v\f$ angular variable
    */
   double _v;
   //@}
 
   /**
    *  Values of the PDF's before radiation
    */
   //@{
   /**
    *  For the quark
    */
   mutable double _oldq;
 
   /**
    *  For the antiquark
    */
   mutable double _oldqbar;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEPP2WHPowheg_H */
diff --git a/MatrixElement/Powheg/MEPP2ZHPowheg.h b/MatrixElement/Powheg/MEPP2ZHPowheg.h
--- a/MatrixElement/Powheg/MEPP2ZHPowheg.h
+++ b/MatrixElement/Powheg/MEPP2ZHPowheg.h
@@ -1,390 +1,384 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEPP2ZHPowheg_H
 #define HERWIG_MEPP2ZHPowheg_H
 //
 // This is the declaration of the MEPP2ZHPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEPP2ZH.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The MEPP2ZHPowheg class implements the matrix element
  * for \f$q\bar{q}\to Z^0h^0\f$.
  *
  * @see \ref MEPP2ZHPowhegInterfaces "The interfaces"
  * defined for MEPP2ZHPowheg.
  */
 class MEPP2ZHPowheg: public MEPP2ZH {
 
 public:
 
   /**
    * The default constructor.
    */
   MEPP2ZHPowheg();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given 'nDim()' uniform
    * random numbers in the interval ]0,1[. To help the phase space
    * generator, the 'dSigHatDR()' should be a smooth function of these
    * numbers, although this is not strictly necessary. Return
    * false if the chosen points failed the kinematical cuts.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
 
   /**
    * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. 
    */
   double x(double xt, double v) const;
 
   /**
    * Calculate the momentum fraction of the first parton. 
    */
   double x_a(double x, double v) const;
 
   /**
    * Calculate the momentum fraction of second parton. 
    */
   double x_b(double x, double v) const;
 
   /**
    * Calculate the minimum of \f$x\f$. 
    */
   double xbar(double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$qg\f$ initiated channel. 
    */
   double Ltilde_qg(double x, double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. 
    */
   double Ltilde_gq(double x, double v) const;
 
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Ltilde_qq(double x, double v) const;
 
   /**
    * Calculate the soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_qq() const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ 
    * initiated real contribution.
    */
   double Ccalbar_qg(double x) const;
 
   /**
    * Function for calculation of the \f$qg\f$ 
    * initiated real contribution.
    */
   double Fcal_qg(double x, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_gq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_qq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ftilde_qg(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_gq(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_qq(double xt, double v) const;
 
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ctilde_qg(double x, double v) const;
 
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_gq(double x, double v) const;
 
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_qq(double x, double v) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEPP2ZHPowheg> initMEPP2ZHPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEPP2ZHPowheg & operator=(const MEPP2ZHPowheg &);
 
 private:
 
   /**
    *  The momentum fraction of the first parton in the Born process
    */
   mutable double _xb_a;
 
   /**
    *  The momentum fraction of the second parton in the Born process
    */
   mutable double _xb_b;
 
   /**
    *  The ParticleData object for the first parton in the Born process
    */
   mutable tcPDPtr _parton_a;
 
   /**
    *  The ParticleData object for the second parton in the Born process
    */
   mutable tcPDPtr _parton_b;
 
   /**
    *  The BeamParticleData object for the first  hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A;
 
   /**
    *  The BeamParticleData object for the second hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B;
 
   /**
    *  the ParticleData object for the gluon
    */
   tcPDPtr _gluon;
 
   /**
    * The \f$T_R\f$ colour factor
    */
   const double TR_;
 
   /**
    *  The \f$C_F\f$ colour factor
    */
   const double CF_;
 
   /**
    *  The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation
    */
   mutable double _alphaS2Pi;
 
   /**
    *  The mass squared of the lepton pair
    */
   mutable Energy2 _mll2;
 
   /**  
    * The renormalization/factorization scale
    */
   mutable Energy2 _mu2;
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int _contrib;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int _nlo_alphaS_opt;
 
   /**
    *  The value of alphaS to use for the nlo weight if _nloalphaSopt=1
    */
   double _fixed_alphaS;
 
   /**
    *  The magnitude of the correction term to reduce the negative contribution
    */
   double _a;
 
   /**
    *  The power of the correction term to reduce the negative contribution
    */
   double _p;
 
   /**
    *  Cut-off for the correction function
    */
   double _eps;
   //@}
 
   /**
    *  Choice of the scale
    */
   //@{
   /**
    *  Type of scale
    */
   unsigned int _scaleopt;
 
   /**
    *  Fixed scale if used
    */
   Energy _fixedScale;
 
   /**
    *  Prefactor if variable scale used
    */
   double _scaleFact;
   //@}
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double _xt;
 
   /**
    *  The \f$v\f$ angular variable
    */
   double _v;
   //@}
 
   /**
    *  Values of the PDF's before radiation
    */
   //@{
   /**
    *  For the quark
    */
   mutable double _oldq;
 
   /**
    *  For the antiquark
    */
   mutable double _oldqbar;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEPP2ZHPowheg_H */
diff --git a/MatrixElement/Powheg/MEee2gZ2llPowheg.h b/MatrixElement/Powheg/MEee2gZ2llPowheg.h
--- a/MatrixElement/Powheg/MEee2gZ2llPowheg.h
+++ b/MatrixElement/Powheg/MEee2gZ2llPowheg.h
@@ -1,157 +1,151 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEee2gZ2llPowheg_H
 #define HERWIG_MEee2gZ2llPowheg_H
 //
 // This is the declaration of the MEee2gZ2llPowheg class.
 //
 
 #include "Herwig/MatrixElement/Lepton/MEee2gZ2ll.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the MEee2gZ2llPowheg class.
  *
  * @see \ref MEee2gZ2llPowhegInterfaces "The interfaces"
  * defined for MEee2gZ2llPowheg.
  */
 class MEee2gZ2llPowheg: public MEee2gZ2ll {
 
 public:
 
   /**
    * The default constructor.
    */
   MEee2gZ2llPowheg() : contrib_(1), zPow_(0.5), yPow_(0.9)
   {}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEee2gZ2llPowheg> initMEee2gZ2llPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2gZ2llPowheg & operator=(const MEee2gZ2llPowheg &);
 
 private:
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *  Phase-space sampling for z
    */
   double zPow_;
 
   /**
    *  Phase-space sampling for y
    */
   double yPow_;
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double z_;
 
   /**
    *  The \f$y\f$ angular variable
    */
   double y_;
 
   /**
    *  The azimuth
    */
   double phi_;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEee2gZ2llPowheg_H */
diff --git a/MatrixElement/Powheg/MEee2gZ2qqPowheg.h b/MatrixElement/Powheg/MEee2gZ2qqPowheg.h
--- a/MatrixElement/Powheg/MEee2gZ2qqPowheg.h
+++ b/MatrixElement/Powheg/MEee2gZ2qqPowheg.h
@@ -1,163 +1,157 @@
 // -*- C++ -*-
 #ifndef HERWIG_MEee2gZ2qqPowheg_H
 #define HERWIG_MEee2gZ2qqPowheg_H
 //
 // This is the declaration of the MEee2gZ2qqPowheg class.
 //
 
 #include "Herwig/MatrixElement/Lepton/MEee2gZ2qq.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the MEee2gZ2qqPowheg class.
  *
  * @see \ref MEee2gZ2qqPowhegInterfaces "The interfaces"
  * defined for MEee2gZ2qqPowheg.
  */
 class MEee2gZ2qqPowheg: public MEee2gZ2qq {
 
 public:
 
   /**
    * The default constructor.
    */
   MEee2gZ2qqPowheg() : contrib_(1), corrections_(1),
 		       zPow_(0.5), yPow_(0.9)
   {}
 
 public:
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * The matrix element for the kinematical configuration
    * previously provided by the last call to setKinematics(), suitably
    * scaled by sHat() to give a dimension-less number.
    * @return the matrix element scaled with sHat() to give a
    * dimensionless number.
    */
   virtual double me2() const;
 
   /**
    * Generate internal degrees of freedom given nDim() uniform
    * random numbers in the interval \f$ ]0,1[ \f$. To help the phase space
    * generator, the dSigHatDR should be a smooth function of these
    * numbers, although this is not strictly necessary.
    * @param r a pointer to the first of nDim() consecutive random numbers.
    * @return true if the generation succeeded, otherwise false.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * The number of internal degrees of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEee2gZ2qqPowheg> initMEee2gZ2qqPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEee2gZ2qqPowheg & operator=(const MEee2gZ2qqPowheg &);
 
 private:
 
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int contrib_;
 
   /**
    *   Which corrections to included
    */
   unsigned int corrections_;
 
   /**
    *  Phase-space sampling for z
    */
   double zPow_;
 
   /**
    *  Phase-space sampling for y
    */
   double yPow_;
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double z_;
 
   /**
    *  The \f$y\f$ angular variable
    */
   double y_;
 
   /**
    *  The azimuth
    */
   double phi_;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEee2gZ2qqPowheg_H */
diff --git a/MatrixElement/Powheg/MEqq2W2ffPowheg.h b/MatrixElement/Powheg/MEqq2W2ffPowheg.h
--- a/MatrixElement/Powheg/MEqq2W2ffPowheg.h
+++ b/MatrixElement/Powheg/MEqq2W2ffPowheg.h
@@ -1,379 +1,373 @@
 // -*- C++ -*-
 //
 // MEqq2W2ffPowheg.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEqq2W2ffPowheg_H
 #define HERWIG_MEqq2W2ffPowheg_H
 //
 // This is the declaration of the MEqq2W2ffPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEqq2W2ff.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The MEqq2W2ffPowheg class implements the matrix element for \f$q\bar{q'}\to W^\pm\f$
  * including the decay of the \f$W^\pm\f$ to Standard Model fermions.
  *
  * @see \ref MEqq2W2ffPowhegInterfaces "The interfaces"
  * defined for MEqq2W2ffPowheg.
  */
 class MEqq2W2ffPowheg: public MEqq2W2ff {
 
 public:
 
   /**
    * The default constructor.
    */
   MEqq2W2ffPowheg();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given 'nDim()' uniform
    * random numbers in the interval ]0,1[. To help the phase space
    * generator, the 'dSigHatDR()' should be a smooth function of these
    * numbers, although this is not strictly necessary. Return
    * false if the chosen points failed the kinematical cuts.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
   /**
    * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. 
    */
   double x(double xt, double v) const;
   /**
    * Calculate the momentum fraction of the first parton. 
    */
   double x_a(double x, double v) const;
   /**
    * Calculate the momentum fraction of second parton. 
    */
   double x_b(double x, double v) const;
   /**
    * Calculate the minimum of \f$x\f$. 
    */
   double xbar(double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$qg\f$ initiated channel. 
    */
   double Ltilde_qg(double x, double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. 
    */
   double Ltilde_gq(double x, double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Ltilde_qq(double x, double v) const;
   /**
    * Calculate the soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_qq() const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ and \f$g\bar{q}\f$ 
    * initiated real contribution.
    */
   double Ccalbar_qg(double x) const;
   /**
    * Function for calculation of the \f$qg\f$ 
    * initiated real contribution.
    */
   double Fcal_qg(double x, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_gq(double x, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_qq(double x, double v) const;
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ftilde_qg(double xt, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_gq(double xt, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_qq(double xt, double v) const;
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ctilde_qg(double x, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_gq(double x, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_qq(double x, double v) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEqq2W2ffPowheg> initMEqq2W2ffPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEqq2W2ffPowheg & operator=(const MEqq2W2ffPowheg &);
 
 private:
   
   /**
    *  The momentum fraction of the first parton in the Born process
    */
   mutable double _xb_a;
 
   /**
    *  The momentum fraction of the second parton in the Born process
    */
   mutable double _xb_b;
 
   /**
    *  The ParticleData object for the first parton in the Born process
    */
   mutable tcPDPtr _parton_a;
 
   /**
    *  The ParticleData object for the second parton in the Born process
    */
   mutable tcPDPtr _parton_b;
 
   /**
    *  The BeamParticleData object for the first  hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A;
 
   /**
    *  The BeamParticleData object for the second hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B;
 
   /**
    *  the ParticleData object for the gluon
    */
   tcPDPtr _gluon;
 
   /**
    * The \f$T_R\f$ colour factor
    */
   const double TR_;
 
   /**
    *  The \f$C_F\f$ colour factor
    */
   const double CF_;
 
   /**
    *  The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation
    */
   mutable double _alphaS2Pi;
 
   /**
    *  The mass squared of the lepton pair
    */
   mutable Energy2 _mll2;
 
   /**  
    * The renormalization/factorization scale
    */
   mutable Energy2 _mu2;
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int _contrib;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int _nlo_alphaS_opt;
 
   /**
    *  The value of alphaS to use for the nlo weight if _nloalphaSopt=1
    */
   double _fixed_alphaS;
 
   /**
    *  The magnitude of the correction term to reduce the negative contribution
    */
   double _a;
 
   /**
    *  The power of the correction term to reduce the negative contribution
    */
   double _p;
 
   /**
    *  Cut-off for the correction function
    */
   double _eps;
   //@}
 
   /**
    *  Choice of the scale
    */
   //@{
   /**
    *  Type of scale
    */
   unsigned int _scaleopt;
 
   /**
    *  Fixed scale if used
    */
   Energy _fixedScale;
 
   /**
    *  Prefactor if variable scale used
    */
   double _scaleFact;
   //@}
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double _xt;
 
   /**
    *  The \f$v\f$ angular variable
    */
   double _v;
   //@}
 
   /**
    *  Values of the PDF's before radiation
    */
   //@{
   /**
    *  For the quark
    */
   mutable double _oldq;
 
   /**
    *  For the antiquark
    */
   mutable double _oldqbar;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEqq2W2ffPowheg_H */
diff --git a/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h b/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h
--- a/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h
+++ b/MatrixElement/Powheg/MEqq2gZ2ffPowheg.h
@@ -1,382 +1,376 @@
 // -*- C++ -*-
 //
 // MEqq2gZ2ffPowheg.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_MEqq2gZ2ffPowheg_H
 #define HERWIG_MEqq2gZ2ffPowheg_H
 //
 // This is the declaration of the MEqq2gZ2ffPowheg class.
 //
 
 #include "Herwig/MatrixElement/Hadron/MEqq2gZ2ff.h"
 #include "ThePEG/PDF/BeamParticleData.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The MEqq2gZ2ffPowheg class implements the products of Standard Model
  * fermion antifermion pairs via the \f$Z^0\f$ resonance including
  * photon interference terms.
  *
  * @see \ref MEqq2gZ2ffPowhegInterfaces "The interfaces"
  * defined for MEqq2gZ2ffPowheg.
  */
 class MEqq2gZ2ffPowheg: public MEqq2gZ2ff {
 
 public:
 
   /**
    * The default constructor.
    */
   MEqq2gZ2ffPowheg();
 
   /** @name Virtual functions required by the MEBase class. */
   //@{
   /**
    * Return the scale associated with the last set phase space point.
    */
   virtual Energy2 scale() const;
 
   /**
    * The number of internal degreed of freedom used in the matrix
    * element.
    */
   virtual int nDim() const;
 
   /**
    * Generate internal degrees of freedom given 'nDim()' uniform
    * random numbers in the interval ]0,1[. To help the phase space
    * generator, the 'dSigHatDR()' should be a smooth function of these
    * numbers, although this is not strictly necessary. Return
    * false if the chosen points failed the kinematical cuts.
    */
   virtual bool generateKinematics(const double * r);
 
   /**
    * Return the matrix element for the kinematical configuation
    * previously provided by the last call to setKinematics(). Uses
    * me().
    */
   virtual CrossSection dSigHatDR() const;
   //@}
 
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Calculate the correction weight with which leading-order
    * configurations are re-weighted.
    */
   double NLOweight() const;
   
   /**
    * Calculate the variable \f$x=M_{B}^2/s\f$ from the integration variables. 
    */
   double x(double xt, double v) const;
   /**
    * Calculate the momentum fraction of the first parton. 
    */
   double x_a(double x, double v) const;
   /**
    * Calculate the momentum fraction of the second parton. 
    */
   double x_b(double x, double v) const;
   /**
    * Calculate the minimum of \f$x\f$. 
    */
   double xbar(double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$qg\f$ initiated channel. 
    */
   double Ltilde_qg(double x, double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$g\bar{q}\f$ initiated channel. 
    */
   double Ltilde_gq(double x, double v) const;
   /**
    * Calculate the ratio of the radiative luminosity funcion to the
    * Born luminosity function for the \f$q\bar{q}\f$ initiated channel. 
    */
   double Ltilde_qq(double x, double v) const;
   /**
    * Calculate the soft-virtual contribution to the NLO weight. 
    */
   double Vtilde_qq() const;
   /**
    * Function for calculation of the \f$qg\f$ and \f$g\bar{q}\f$ initiated real
    * contributions.
    */
   double Ccalbar_qg(double x) const;
   /**
    * Function for calculation of the \f$qg\f$  
    * initiated real contribution.
    */
   double Fcal_qg(double x, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_gq(double x, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Fcal_qq(double x, double v) const;
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ftilde_qg(double xt, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_gq(double xt, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ftilde_qq(double xt, double v) const;
   /**
    * Function for calculation of the \f$qg\f$ initiated real
    * contribution.
    */
   double Ctilde_qg(double x, double v) const;
   /**
    * Function for calculation of the \f$g\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_gq(double x, double v) const;
   /**
    * Function for calculation of the \f$q\bar{q}\f$ initiated real
    * contribution.
    */
   double Ctilde_qq(double x, double v) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const { return new_ptr(*this); }
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const { return new_ptr(*this); }
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<MEqq2gZ2ffPowheg> initMEqq2gZ2ffPowheg;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   MEqq2gZ2ffPowheg & operator=(const MEqq2gZ2ffPowheg &);
 
 private:
  
   /**
    *  The momentum fraction of the first parton in the Born process
    */
   mutable double _xb_a;
 
   /**
    *  The momentum fraction of the second parton in the Born process
    */
   mutable double _xb_b;
 
   /**
    *  The ParticleData object for the first parton in the Born process
    */
   mutable tcPDPtr _parton_a;
 
   /**
    *  The ParticleData object for the second parton in the Born process
    */
   mutable tcPDPtr _parton_b;
 
   /**
    *  The BeamParticleData object for the first  hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_A;
 
   /**
    *  The BeamParticleData object for the second hadron
    */
   mutable Ptr<BeamParticleData>::transient_const_pointer _hadron_B;
 
   /**
    *  the ParticleData object for the gluon
    */
   tcPDPtr _gluon;
 
   /**
    * The \f$T_R\f$ colour factor
    */
   const double TR_;
 
   /**
    *  The \f$C_F\f$ colour factor
    */
   const double CF_;
 
   /**
    *  The value of \f$\frac{\alpha_S}{2\pi}\f$ used for the calculation
    */
   mutable double _alphaS2Pi;
 
   /**
    *  The mass squared of the lepton pair
    */
   mutable Energy2 _mll2;
 
   /**  
    * The renormalization/factorization scale
    */
   mutable Energy2 _mu2;
 
   /**
    *  Parameters for the NLO weight
    */
   //@{
   /**
    *  Whether to generate the positive, negative or leading order contribution
    */
   unsigned int _contrib;
 
   /**
    *  Whether to use a fixed or a running QCD coupling for the NLO weight
    */
   unsigned int _nlo_alphaS_opt;
 
   /**
    *  The value of alphaS to use for the nlo weight if _nloalphaSopt=1
    */
   double _fixed_alphaS;
 
   /**
    *  The magnitude of the correction term to reduce the negative contribution
    */
   double _a;
 
   /**
    *  The power of the correction term to reduce the negative contribution
    */
   double _p;
 
   /**
    *  Cut-off for the correction function
    */
   double _eps;
   //@}
 
   /**
    *  Choice of the scale
    */
   //@{
   /**
    *  Type of scale
    */
   unsigned int _scaleopt;
 
   /**
    *  Fixed scale if used
    */
   Energy _fixedScale;
 
   /**
    *  Prefactor if variable scale used
    */
   double _scaleFact;
   //@}
 
   /**
    *  Radiation variables
    */
   //@{
   /**
    *   The \f$\tilde{x}\f$ variable
    */
   double _xt;
 
   /**
    *  The \f$v\f$ angular variable
    */
   double _v;
   //@}
 
   /**
    *  Values of the PDF's before radiation
    */
   //@{
   /**
    *  For the quark
    */
   mutable double _oldq;
 
   /**
    *  For the antiquark
    */
   mutable double _oldqbar;
   //@}
 };
 
 }
 
 #endif /* HERWIG_MEqq2gZ2ffPowheg_H */
diff --git a/MatrixElement/Reweighters/ReweightEW.h b/MatrixElement/Reweighters/ReweightEW.h
--- a/MatrixElement/Reweighters/ReweightEW.h
+++ b/MatrixElement/Reweighters/ReweightEW.h
@@ -1,174 +1,169 @@
 // -*- C++ -*-
 #ifndef Herwig_ReweightEW_H
 #define Herwig_ReweightEW_H
 //
 // This is the declaration of the ReweightEW class.
 //
 
 #include "ThePEG/MatrixElement/ReweightBase.h"
 #include <array>
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the ReweightEW class.
  *
  * @see \ref ReweightEWInterfaces "The interfaces"
  * defined for ReweightEW.
  */
 class ReweightEW: public ReweightBase {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   ReweightEW();
 
   /**
    * The destructor.
    */
   virtual ~ReweightEW();
   //@}
 
 public:
 
   /**
    * Return the weight for the kinematical configuation provided by
    * the assigned XComb object (in the LastXCombInfo base class).
    */
   virtual double weight() const;
 
   /**
    * Return values of the last evaluation (double/doubles in GeV2)
    */
   double lastS() const {return thelasts;} 
   double lastT() const {return thelastt;} 
   double lastK() const {return thelastk;} 
 
   void setSTK(double s, double t, double K); 
 
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 
 private:
 
   /**
    * The last s
    */
   mutable double thelasts;
 
   /**
    * The last t
    */
   mutable double thelastt;
 
   /**
    * The last K-factor
    */
   mutable double thelastk;
 
   /**
    * The table of K factors to be read from file 
    */
   std::array<std::array<double,6>,40001> tab;
 
   /**
    *  EW K factor filename
    */
   string filename;
 
 public:
   /**
    * Computation of K factors from table (s and t in GeV)
    */
   double EWKFac(unsigned int f, double s, double t) const;
 
 private:
   /**
    * initialize tables
    */  
   void inittable();
 
 private:
 
   /**
-   * Describe a concrete base class with persistent data.
-   */
-  static ClassDescription<ReweightEW> initReweightEW;
-
-protected:
 
   /** @name Standard Interfaced functions. */
   //@{
 
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Initialize this object. Called in the run phase just before
    * a run begins.
    */
   virtual void doinitrun();
 
 private:
 
   /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   ReweightEW & operator=(const ReweightEW &);
 
 };
 
 }
 
 #endif /* Herwig_ReweightEW_H */
diff --git a/Models/ADD/ADDModel.h b/Models/ADD/ADDModel.h
--- a/Models/ADD/ADDModel.h
+++ b/Models/ADD/ADDModel.h
@@ -1,230 +1,225 @@
 // -*- C++ -*-
 //
 // ADDModel.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModel_H
 #define HERWIG_ADDModel_H
 // This is the declaration of the ADDModel class.
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h"
 #include "ADDModel.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup Models
  *
  *  This is the class to be used instead of the Standard Model class for
  *  the ADD model.
  *
  * @see \ref ADDModelInterfaces "The interfaces"
  * defined for ADDModel.
  * @see StandardModel
  * @see StandardModelBase
  * 
  */
 class ADDModel: public BSMModel {
 
 public:
 
   /**
    * The default constructor 
    */
   ADDModel() : delta_(2), mPlanckBar_(2.4e18*GeV),
 	       md_(1000.*GeV), lambdaT_(1000.*GeV) {
     useMe();
   }
   
   /**
    * Number of extrac dimensions
    */
   unsigned int delta() const {return delta_;}
 
   /**
    *  The reduced Planck mass in 4d
    */
   Energy MPlanckBar() const {return mPlanckBar_;}
 
   /**
    *  The d-dimension Planck mass
    */
   Energy MD() const {return md_;}
 
   /**
    *  The cut-off for virtual gravition processes
    */
   Energy LambdaT() const {return lambdaT_;}
 
   /** @name Vertices */
   //@{
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex.
    */
   tAbstractFFTVertexPtr   vertexFFGR() const {return FFGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to VV\f$ vertex.
    */
   tAbstractVVTVertexPtr   vertexVVGR() const {return VVGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to SS\f$ vertex.
    */
   tAbstractSSTVertexPtr   vertexSSGR() const {return SSGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex.
    */
   tAbstractFFVTVertexPtr  vertexFFGGR() const {return FFGGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}W^\pm/Z^0/\gamma\f$ vertex.
    */
   tAbstractFFVTVertexPtr  vertexFFWGR() const {return FFWGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to W^+W^-Z^0/\gamma\f$ vertex.
    */
   tAbstractVVVTVertexPtr  vertexWWWGR() const {return WWWGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to ggg\f$ vertex.
    */
   tAbstractVVVTVertexPtr  vertexGGGGR() const {return GGGGRVertex_;}
   //@}
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModel> initADDModel;
-  
-    /**
      * Private and non-existent assignment operator.
      */
   ADDModel & operator=(const ADDModel &);
 
 private:
   
   /**
    * Number of extrac dimensions
    */
   unsigned int delta_;
 
   /**
    *  The reduced Planck mass in 4d
    */
   Energy mPlanckBar_;
 
   /**
    *  The d-dimension Planck mass
    */
   Energy md_;
 
   /**
    *  Cut-off parameter for virtual gravitons
    */
   Energy lambdaT_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex.
    */
   AbstractFFTVertexPtr  FFGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to VV\f$ vertex.
    */
   AbstractVVTVertexPtr  VVGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to SS\f$ vertex.
    */
   AbstractSSTVertexPtr  SSGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex.
    */
   AbstractFFVTVertexPtr FFGGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}W/Z^0\gamma\f$ vertex.
    */
   AbstractFFVTVertexPtr FFWGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to W^+W^-Z^0\gamma\f$ vertex.
    */
   AbstractVVVTVertexPtr WWWGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to ggg\f$ vertex.
    */
   AbstractVVVTVertexPtr GGGGRVertex_;
   
 };
 }
 
 #endif /* HERWIG_ADDModel_H */
diff --git a/Models/ADD/ADDModelFFGGRVertex.h b/Models/ADD/ADDModelFFGGRVertex.h
--- a/Models/ADD/ADDModelFFGGRVertex.h
+++ b/Models/ADD/ADDModelFFGGRVertex.h
@@ -1,149 +1,144 @@
 // -*- C++ -*-
 //
 // ADDModelFFGGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelFFGGRVertex_H
 #define HERWIG_ADDModelFFGGRVertex_H
 //
 // This is the declaration of the ADDModelFFGGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the fermion-antifermion-vector-graviton
  *  vertex for the Randell-Sundrum model
  *
  *  @see FFVTVertex
  *  @see VertexBase
  */
 class ADDModelFFGGRVertex: public FFVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelFFGGRVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelFFGGRVertex> initADDModelFFGGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelFFGGRVertex & operator=(const ADDModelFFGGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
 
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
   //@}
 };
 }
 
 #endif /* HERWIG_ADDModelFFGGRVertex_H */
diff --git a/Models/ADD/ADDModelFFGRVertex.h b/Models/ADD/ADDModelFFGRVertex.h
--- a/Models/ADD/ADDModelFFGRVertex.h
+++ b/Models/ADD/ADDModelFFGRVertex.h
@@ -1,131 +1,126 @@
 // -*- C++ -*-
 //
 // ADDModelFFGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelFFGRVertex_H
 #define HERWIG_ADDModelFFGRVertex_H
 //
 // This is the declaration of the ADDModelFFGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the Randell-Sundrum model fermion-antifermion
  *  tensor vertex for helicity amplitude calculations 
  *
  *  @see FFTVertex
  *  @see VertexBase
  */
 class ADDModelFFGRVertex: public FFTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelFFGRVertex();
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelFFGRVertex> initADDModelFFGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelFFGRVertex & operator=(const ADDModelFFGRVertex &);
 
   /**
    * The coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
 
 };
 }
 
 #endif /* HERWIG_ADDModelFFGRVertex_H */
diff --git a/Models/ADD/ADDModelFFWGRVertex.h b/Models/ADD/ADDModelFFWGRVertex.h
--- a/Models/ADD/ADDModelFFWGRVertex.h
+++ b/Models/ADD/ADDModelFFWGRVertex.h
@@ -1,169 +1,164 @@
 // -*- C++ -*-
 //
 // ADDModelFFWGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelFFWGRVertex_H
 #define HERWIG_ADDModelFFWGRVertex_H
 //
 // This is the declaration of the ADDModelFFWGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the fermion-antifermion-vector-graviton
  *  vertex for the Randell-Sundrum model
  *
  *  @see FFVTVertex
  *  @see VertexBase
  */
 class ADDModelFFWGRVertex: public FFVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelFFWGRVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3, tcPDPtr part4);
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelFFWGRVertex> initADDModelFFWGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelFFWGRVertex & operator=(const ADDModelFFWGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The charges of the Standard Model fermions.
    */
   vector<double> charge_;
 
   /**
    *  The left couplings of the Standard Model fermions.
    */
   vector<double> gl_;
 
   /**
    *  The right couplings of the Standard Model fermions.
    */
   vector<double> gr_;
 
   /**
    *  The elements of the CKM matrix.
    */
   vector<vector<Complex> > ckm_;
 
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
 
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
   //@}
 };
 }
 
 #endif /* HERWIG_ADDModelFFWGRVertex_H */
diff --git a/Models/ADD/ADDModelGGGGRVertex.h b/Models/ADD/ADDModelGGGGRVertex.h
--- a/Models/ADD/ADDModelGGGGRVertex.h
+++ b/Models/ADD/ADDModelGGGGRVertex.h
@@ -1,149 +1,144 @@
 // -*- C++ -*-
 //
 // ADDModelGGGGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelGGGGRVertex_H
 #define HERWIG_ADDModelGGGGRVertex_H
 //
 // This is the declaration of the ADDModelGGGGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The ADDModelGGGGRVertex class is the implementation of the 
  *  triple vector graviton couling in the ADD model. 
  *  It inherits from VVVTVertex and implements the setCoupling member.
  *
  *  @see VVVTVertex
  *  @see VertexBase
  */
 class ADDModelGGGGRVertex: public VVVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelGGGGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
 
 protected:
    
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelGGGGRVertex> initADDModelGGGGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelGGGGRVertex & operator=(const ADDModelGGGGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
 
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
   //@}
 
 };
 }
 
 #endif /* HERWIG_ADDModelGGGGRVertex_H */
diff --git a/Models/ADD/ADDModelSSGRVertex.h b/Models/ADD/ADDModelSSGRVertex.h
--- a/Models/ADD/ADDModelSSGRVertex.h
+++ b/Models/ADD/ADDModelSSGRVertex.h
@@ -1,130 +1,125 @@
 // -*- C++ -*-
 //
 // ADDModelSSGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelSSGRVertex_H
 #define HERWIG_ADDModelSSGRVertex_H
 //
 // This is the declaration of the ADDModelSSGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/SSTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  * 
  *  The ADDModelSSGRVertex class is thew implementation of the graviton
  *  coupling to the Higgs in the ADDModel. It inherits from the SSTVertex 
  *  and implements the setCoupling member
  *
  *  @see SSTVertex
  *  @see VertexBase
  */
 class ADDModelSSGRVertex: public SSTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelSSGRVertex();
     
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelSSGRVertex> initADDModelSSGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelSSGRVertex & operator=(const ADDModelSSGRVertex &);
 
   /**
    * Coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
 };
 
 }
 
 #endif /* HERWIG_ADDModelSSGRVertex_H */
diff --git a/Models/ADD/ADDModelVVGRVertex.h b/Models/ADD/ADDModelVVGRVertex.h
--- a/Models/ADD/ADDModelVVGRVertex.h
+++ b/Models/ADD/ADDModelVVGRVertex.h
@@ -1,129 +1,124 @@
 // -*- C++ -*-
 //
 // ADDModelVVGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelVVGRVertex_H
 #define HERWIG_ADDModelVVGRVertex_H
 //
 // This is the declaration of the ADDModelVVGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  * 
  *  This is the implementation of the vector-vector-graviton vertex for
  *  the ADD model
  * 
  *  @see VVTVertex
  *  @see VertexBase
  */
 class ADDModelVVGRVertex: public VVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelVVGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelVVGRVertex> initADDModelVVGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelVVGRVertex & operator=(const ADDModelVVGRVertex &);
 
   /**
    * The coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
   
 };
 }
 
 #endif /* HERWIG_ADDModelVVGRVertex_H */
diff --git a/Models/ADD/ADDModelWWWGRVertex.h b/Models/ADD/ADDModelWWWGRVertex.h
--- a/Models/ADD/ADDModelWWWGRVertex.h
+++ b/Models/ADD/ADDModelWWWGRVertex.h
@@ -1,153 +1,148 @@
 // -*- C++ -*-
 //
 // ADDModelWWWGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ADDModelWWWGRVertex_H
 #define HERWIG_ADDModelWWWGRVertex_H
 //
 // This is the declaration of the ADDModelWWWGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h"
 #include "ADDModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The ADDModelWWWGRVertex class is the implementation of the 
  *  triple vector graviton couling in the ADD model. 
  *  It inherits from VVVTVertex and implements the setCoupling member.
  *
  *  @see VVVTVertex
  *  @see VertexBase
  */
 class ADDModelWWWGRVertex: public VVVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ADDModelWWWGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
 
 protected:
    
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
   /**
    * Calculate the propagator for a diagram.
    * @param iopt The option for the Breit-Wigner shape
    * @param q2 The scale
    * @param part The ParticleData pointer for the off-shell particle.
    * @param mass The mass if not to be taken from the ParticleData object
    * @param width The width if not to be taken from the ParticleData object
    */
   virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part,
 			     Energy mass=-GeV, Energy width=-GeV);
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ADDModelWWWGRVertex> initADDModelWWWGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ADDModelWWWGRVertex & operator=(const ADDModelWWWGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  Mass ratio for the propagator
    */
   Energy r_;
 
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
 
   /**
    *  The prefactor for the \f$Z\f$ vertex.
    */
   double zfact_;
   //@}
 };
 }
 
 #endif /* HERWIG_ADDModelWWWGRVertex_H */
diff --git a/Models/ADD/GravitonMassGenerator.h b/Models/ADD/GravitonMassGenerator.h
--- a/Models/ADD/GravitonMassGenerator.h
+++ b/Models/ADD/GravitonMassGenerator.h
@@ -1,140 +1,134 @@
 // -*- C++ -*-
 #ifndef HERWIG_GravitonMassGenerator_H
 #define HERWIG_GravitonMassGenerator_H
 //
 // This is the declaration of the GravitonMassGenerator class.
 //
 
 #include "Herwig/PDT/GenericMassGenerator.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the GravitonMassGenerator class.
  *
  * @see \ref GravitonMassGeneratorInterfaces "The interfaces"
  * defined for GravitonMassGenerator.
  */
 class GravitonMassGenerator: public GenericMassGenerator {
 
 public:
 
   /**
    * The default constructor.
    */
   GravitonMassGenerator();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /**
    * Return a mass with the weight using the specified limits.
    * @param part The particle data pointer of the particle.
    * @param low The lower limit on the particle's mass.
    * @param upp The upper limit on the particle's mass.
    * @param wgt The weight for this mass.
    * @param shape The type of shape to use
    * @param r   The random number used for the weight
    * @return The mass of the particle instance.
    */
   virtual Energy mass(double & wgt, const ParticleData & part,
 		      const Energy low,const Energy upp, int shape,
 		      double r=UseRandom::rnd()) const;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GravitonMassGenerator> initGravitonMassGenerator;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GravitonMassGenerator & operator=(const GravitonMassGenerator &);
 
 private:
 
   /**
    *  prefactor
    */
   double prefactor_;
 
   /**
    *  Number of extra dimensions
    */
   unsigned int delta_;
 
   /**
    *  d-dimensional Planck mass
    */
   Energy md_;
 
   /**
    *  Minimum mass cut to avoid numerical problems
    */
   Energy mMin_;
 
 };
 
 }
 
 #endif /* HERWIG_GravitonMassGenerator_H */
diff --git a/Models/General/BSMWidthGenerator.h b/Models/General/BSMWidthGenerator.h
--- a/Models/General/BSMWidthGenerator.h
+++ b/Models/General/BSMWidthGenerator.h
@@ -1,131 +1,125 @@
 // -*- C++ -*-
 //
 // BSMWidthGenerator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_BSMWidthGenerator_H
 #define HERWIG_BSMWidthGenerator_H
 //
 // This is the declaration of the BSMWidthGenerator class.
 //
 
 #include "Herwig/PDT/GenericWidthGenerator.h"
 #include "Herwig/Decay/General/GeneralTwoBodyDecayer.fh"
 #include "BSMWidthGenerator.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class is designed to be able to calculate the running
  * width for a BSM particle given the decay mode and partial width
  * calculated from the decayer.
  *
  * @see \ref BSMWidthGeneratorInterfaces "The interfaces"
  * defined for BSMWidthGenerator.
  */
 class BSMWidthGenerator: public GenericWidthGenerator {
 
 public:
 
   /**
    * The default constructor.
    */
   BSMWidthGenerator() : theModes(0) {}
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    * Perform the set up for a mode in classes inheriting from this one
    * @param mode The decay mode
    * @param decayer The decayer for the mode.
    * @param imode The number of the mode.
    */
   virtual void setupMode(tcDMPtr mode, tDecayIntegratorPtr decayer, 
 			 unsigned int imode);
 
   /**
    * The \f$1\to2\f$ width for outgoing particles which can be off-shell.
    * @param iloc The location of the mode in the list.
    * @param m0 The mass of the decaying particle.
    * @param m1 The mass of the first outgoing particle.
    * @param m2 The mass of the second outgoing particle.
    * @return The partial width.
    */
   virtual Energy partial2BodyWidth(int iloc,Energy m0,Energy m1,Energy m2) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<BSMWidthGenerator> initBSMWidthGenerator;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   BSMWidthGenerator & operator=(const BSMWidthGenerator &);
 
 private:
   
   /**
    * A vector decay modes with their associated decayer
    * cast to GeneralTwoBodyDecayer.
    */
   vector<pair<tcDMPtr, tcGeneralTwoBodyDecayerPtr> > theModes;
 };
 
   /** 
    * An exception class to report an error.
    */
   class BSMWidthException : public Exception {};
   
 }
 
 #endif /* HERWIG_BSMWidthGenerator_H */
diff --git a/Models/General/DecayConstructor.h b/Models/General/DecayConstructor.h
--- a/Models/General/DecayConstructor.h
+++ b/Models/General/DecayConstructor.h
@@ -1,173 +1,167 @@
 // -*- C++ -*-
 //
 // DecayConstructor.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_DecayConstructor_H
 #define HERWIG_DecayConstructor_H
 //
 // This is the declaration of the DecayConstructor class.
 //
 
 #include "ThePEG/Interface/Interfaced.h"
 #include "NBodyDecayConstructorBase.h"
 #include "Herwig/Decay/Radiation/DecayRadiationGenerator.h"
 #include "DecayConstructor.fh"
 
 namespace Herwig {
 using namespace ThePEG;
   
 /** 
  * The DecayConstructor class is an interfaced class that stores a 
  * vector of NBodyDecayConstructor objects and calls the appropriate 
  * function to create the decayers and decaymodes. There is also an interface
  * to add decay mode tags of the form a->b,c,...; which will not
  * be created.
  * 
  * @see \ref DecayConstructorInterfaces "The interfaces"
  * defined for DecayConstructor. 
  * @see Interfaced
  */
 class DecayConstructor: public Interfaced {
 
 public:
 
   /**
    * The default constructor.
    */
   DecayConstructor() : NBodyDecayConstructors_(0), 
 		       _disableDMTags(0), _minBR(0.) {}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Function to create decayers
    * @param particles vector of ParticleData pointers to particles contained
    * in model
    * @param minBR minimum branching ratio for modes
    */
   void createDecayers(const vector<PDPtr> & particles, double minBR);
 
   /**
    * Check whether the decay mode given is one that should not be
    * created
    * @param tag The decay mode tag, a->b,c,d,...;
    */
   bool disableDecayMode(string tag) const;
 
   /**
    *  QED Generator
    */
   DecayRadiationGeneratorPtr QEDGenerator() {return QEDGenerator_;}
 
   /**
    * Vector of references to the objects that will construct the N-Body
    * decays.
    */
   const vector<NBodyDecayConstructorBasePtr> & decayConstructors() {
     return NBodyDecayConstructors_;
   }
 
   /**
    *  Get minimum branching ratio
    */
   double minimumBR() const { return _minBR;}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<DecayConstructor> initDecayConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   DecayConstructor & operator=(const DecayConstructor &);
 
 private:
 
   /**
    * Vector of references to the objects that will construct the N-Body
    * decays.
    */
    vector<NBodyDecayConstructorBasePtr> NBodyDecayConstructors_;
 
   /**
    * A list of DecayMode tags that are not to be created 
    */
   vector<string> _disableDMTags;
 
   /**
    *  The decay radiation generator to use for QED radiation
    */
   DecayRadiationGeneratorPtr QEDGenerator_;
 
   /**
    *  Minimum allowed branching ratio
    */
   double _minBR;
 };
 
 }
 
 
 #endif /* HERWIG_DecayConstructor_H */
diff --git a/Models/General/HardProcessConstructor.h b/Models/General/HardProcessConstructor.h
--- a/Models/General/HardProcessConstructor.h
+++ b/Models/General/HardProcessConstructor.h
@@ -1,217 +1,211 @@
 // -*- C++ -*-
 #ifndef HERWIG_HardProcessConstructor_H
 #define HERWIG_HardProcessConstructor_H
 //
 // This is the declaration of the HardProcessConstructor class.
 //
 
 #include "ThePEG/Interface/Interfaced.h"
 #include "HPDiagram.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/Handlers/SubProcessHandler.h"
 #include "ThePEG/Repository/EventGenerator.h"
 #include "ThePEG/Handlers/StandardEventHandler.h"
 #include "Herwig/MatrixElement/General/GeneralHardME.h"
 #include "HardProcessConstructor.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the HardProcessConstructor class.
  *
  * @see \ref HardProcessConstructorInterfaces "The interfaces"
  * defined for HardProcessConstructor.
  */
 class HardProcessConstructor: public Interfaced {
 
 public:
 
   /** Vector of HPDiagrams. */
   typedef vector<HPDiagram> HPDVector;
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   HardProcessConstructor() : debug_(false) {}
   //@}
 
   /**
    * The main function to create diagrams etc for the processes
    */
   virtual void constructDiagrams() = 0;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** Functions to set up colour flows and matrix elements. */
   //@{
   /**
    * Determine whether the ordering of the outgoing states is the same
    * as the ordering in the matrix elements
    * @param diag The diagram to question
    */
   void fixFSOrder(HPDiagram & diag);
 
   /**
    * Assign a diagram to the appropriate colour flow(s).
    * @param diag The diagram to assign
    */
   void assignToCF(HPDiagram & diag);
 
   /**
    * Assign a $s$-channel diagram to the appropriate colour flow(s).
    * @param diag The diagram to assign
    */
   void sChannelCF(HPDiagram & diag);
 
   /**
    * Assign a $t$-channel diagram to the appropriate colour flow(s).
    * @param diag The diagram to assign
    */
   void tChannelCF(HPDiagram & diag);
 
   /**
    * Assign a $u$-channel diagram to the appropriate colour flow(s).
    * @param diag The diagram to assign
    */
   void uChannelCF(HPDiagram & diag);
 
   /**
    * Assign a $u$-channel diagram to the appropriate colour flow(s).
    * @param diag The diagram to assign
    */
   void fourPointCF(HPDiagram & diag);
   //@}
 
   /**
    * Pointer to the model being used
    */
   tHwSMPtr model() const {return model_;}
   
   /**
    * Pointer to the sub process handler
    */
   tSubHdlPtr subProcess() const {return subProcess_;}
 
   /**
    * Whether to print the debug information with the matrix 
    * element. This is here solely so it can be passed to 
    * a matrix element that is created here.
    */
   bool debug() const {return debug_;}
 
   /**
    * Get the correct colour factor matrix.
    * @param extpart Vector of external ParticleData pointers
    */
   GeneralHardME::ColourStructure colourFlow(const tcPDVector & extpart) const;
 
   /**
    * Search for a diagram that has already been created
    * @param diagram The diagram to search for
    * @param group The group of diagrams to search through 
    */
   bool duplicate(const HPDiagram & diagram, 
 		 const HPDVector & group) const;
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<HardProcessConstructor> initHardProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   HardProcessConstructor & operator=(const HardProcessConstructor &);
 
 private:
 
   /**
    * Pointer to the model being used
    */
   tHwSMPtr model_;
   
   /**
    * Pointer to the sub process handler
    */
    tSubHdlPtr subProcess_;
 
   /**
    * Whether to print the debug information with the matrix 
    * element. This is here solely so it can be passed to 
    * a matrix element that is created here.
    */
   bool debug_;
 
 };
 
 namespace HPC_helper {
   // Helper functor for find_if in duplicate function.
   class SameIncomingAs {
   public:
     SameIncomingAs(tPDPair in) : a(in.first->id()), b(in.second->id())  {}
     bool operator()(tPDPair ppair) const {
       long id1(ppair.first->id()), id2(ppair.second->id());
       return ( id1 == a && id2 == b ) || ( id1 == b && id2 == a );
     }
   private:
     long a, b;
   };
 
   inline bool duplicateIncoming(tPDPair ppair,const vector<tPDPair> &incPairs) {
     vector<tPDPair>::const_iterator it = 
       find_if( incPairs.begin(), incPairs.end(), SameIncomingAs(ppair) );
     return it != incPairs.end(); 
   }
 }
 
 }
 
 #endif /* HERWIG_HardProcessConstructor_H */
diff --git a/Models/General/HiggsVBFProcessConstructor.h b/Models/General/HiggsVBFProcessConstructor.h
--- a/Models/General/HiggsVBFProcessConstructor.h
+++ b/Models/General/HiggsVBFProcessConstructor.h
@@ -1,119 +1,112 @@
 // -*- C++ -*-
 #ifndef HERWIG_HiggsVBFProcessConstructor_H
 #define HERWIG_HiggsVBFProcessConstructor_H
 //
 // This is the declaration of the HiggsVBFProcessConstructor class.
 //
 
 #include "HardProcessConstructor.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the HiggsVBFProcessConstructor class.
  *
  * @see \ref HiggsVBFProcessConstructorInterfaces "The interfaces"
  * defined for HiggsVBFProcessConstructor.
  */
 class HiggsVBFProcessConstructor: public HardProcessConstructor {
 
 public:
 
   /**
    * The default constructor.
    */
   HiggsVBFProcessConstructor();
 
   /**
    * Main function called to start constructing the diagrams for 
    * the 2->2 process
    */
   void constructDiagrams();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<HiggsVBFProcessConstructor> 
-  initHiggsVBFProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   HiggsVBFProcessConstructor & 
   operator=(const HiggsVBFProcessConstructor &);
 
 private:
 
   /**
    *  The outgoing higgs bosons
    */
   PDVector _higgs;
 
   /**
    *  Collision Type
    */
   bool _type;
 
   /**
    *  Treatment of the Higgs width
    */
   unsigned int _shapeOpt;
 
   /**
    *  which intermediates to include
    */
   unsigned int _intermediates;
 };
 
 }
 
 #endif /* HERWIG_HiggsVBFProcessConstructor_H */
diff --git a/Models/General/HiggsVectorBosonProcessConstructor.h b/Models/General/HiggsVectorBosonProcessConstructor.h
--- a/Models/General/HiggsVectorBosonProcessConstructor.h
+++ b/Models/General/HiggsVectorBosonProcessConstructor.h
@@ -1,125 +1,118 @@
 // -*- C++ -*-
 #ifndef HERWIG_HiggsVectorBosonProcessConstructor_H
 #define HERWIG_HiggsVectorBosonProcessConstructor_H
 //
 // This is the declaration of the HiggsVectorBosonProcessConstructor class.
 //
 
 #include "HardProcessConstructor.h"
 #include "Herwig/Shower/Core/Couplings/ShowerAlpha.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the HiggsVectorBosonProcessConstructor class.
  *
  * @see \ref HiggsVectorBosonProcessConstructorInterfaces "The interfaces"
  * defined for HiggsVectorBosonProcessConstructor.
  */
 class HiggsVectorBosonProcessConstructor: public HardProcessConstructor {
 
 public:
 
   /**
    * The default constructor.
    */
   HiggsVectorBosonProcessConstructor();
 
   /**
    * Main function called to start constructing the diagrams for 
    * the 2->2 process
    */
   void constructDiagrams();  
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<HiggsVectorBosonProcessConstructor> 
-  initHiggsVectorBosonProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   HiggsVectorBosonProcessConstructor & 
   operator=(const HiggsVectorBosonProcessConstructor &);
 
 private:
 
   /**
    *  The allowed outgoing vector bosons
    */
   PDVector _vector;
 
   /**
    *  The outgoing higgs bosons
    */
   PDVector _higgs;
 
   /**
    *  Collision Type
    */
   bool _type;
 
   /**
    *  Treatment of the Higgs width
    */
   unsigned int _shapeOpt;
 
   /**
    *  The shower coupling for the Matrix Element corrections
    */
   ShowerAlphaPtr _alpha;
 };
 
 }
 
 #endif /* HERWIG_HiggsVectorBosonProcessConstructor_H */
diff --git a/Models/General/ModelGenerator.h b/Models/General/ModelGenerator.h
--- a/Models/General/ModelGenerator.h
+++ b/Models/General/ModelGenerator.h
@@ -1,225 +1,219 @@
 // -*- C++ -*-
 //
 // ModelGenerator.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ModelGenerator_H
 #define HERWIG_ModelGenerator_H
 //
 // This is the declaration of the ModelGenerator class.
 //
 
 #include "ThePEG/Interface/Interfaced.h"
 #include "DecayConstructor.h"
 #include "HardProcessConstructor.h"
 #include "ModelGenerator.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class is designed to store the particles in some model and 
  * then call the appropriate function to setup the model
  *
  * @see \ref ModelGeneratorInterfaces "The interfaces"
  * defined for ModelGenerator.
  * @see Interfaced 
  */
 class ModelGenerator: public Interfaced {
 
 public:
 
   /**
    * The default constructor.
    */
   ModelGenerator() : particles_(0), offshell_(0),
 		     Offsel_(0), BRnorm_(true),
 		     Npoints_(10), Iorder_(1),
 		     BWshape_(0), brMin_(1e-6), twoBodyOnly_(false), 
 		     decayOutput_(1), minWidth_(1e-6),
 		     howOffShell_(5.) {}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Overloaded function from Interfaced
    */
   virtual bool preInitialize() const {
     return true;
   }
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<ModelGenerator> initModelGenerator;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   ModelGenerator & operator=(const ModelGenerator &);
 
 private:
 
   /**
    * Check the decay modes a given particle type. This checks whether
    * the decay has quarks in the final state and that they can be put on
    * mass-shell during the shower.
    * @param parent The parent particle
    */
   void checkDecays(PDPtr parent);
 
   /**
    * Write out the spectrum of masses and decay modes
    */
   void writeDecayModes(ostream & ofs, tcPDPtr parent) const;
 
   /**
    * Create mass and width generators to simulate off-shell effects
    * @param p A pointer to the ParticleData object to create
    * the width and mass generators for.
    */
   void createWidthGenerator(tPDPtr p);
 			   
 private:
   
   /**
    * Pointer to the TwoToTwoProcessConstructor
    */
   vector<HPConstructorPtr> hardProcessConstructors_;
   
   /**
    * Pointer to DecayConstructor
    */
   DecayConstructorPtr _theDecayConstructor;
 
   /**
    * Vector of ParticleData pointer
    */
   PDVector particles_;
 
   /** @name Width and Mass Generator variables. */
   //@{
   /**
    * The particles to create MassGenerator and WidthGenerators  
    */
   PDVector offshell_;
   
   /**
    * Which particles to treat as off-shell. 1 treats all particles in
    * particles_ vector as off-shell, 0 allows selection via
    * offshell_ vector.
    */
   int Offsel_;
   
   /**
    * Whether to normalise the partial widths to BR*Total width for 
    * an on-shell particle
    */
   bool BRnorm_;
 
   /**
    * The number of points to include in the interpolation table
    */
   int Npoints_;
   
   /**
    * The order for the interpolation
    */
   unsigned int Iorder_;
 
   /**
    * The shape of the Breit-Wigner used in the mass generation
    */
   int BWshape_;
 
   /**
    * The minimum branching ratio to use 
    */
   double brMin_;
 
   /**
    *  Whether to use only two-body or all modes for running width
    */
   bool twoBodyOnly_;
   //@}
 
   /**
    *   Option for the outputs of the decays to a file
    */
   unsigned int decayOutput_;
 
   /**
    *  Minimum fraction of particle's mass width can be for off-shell
    *  treatment
    */
   double minWidth_;
 
   /**
    *  How much a particle is allowed to be offshell
    */
   double howOffShell_;
 };
 
 }
 
 #endif /* HERWIG_ModelGenerator_H */
diff --git a/Models/General/NBodyDecayConstructorBase.h b/Models/General/NBodyDecayConstructorBase.h
--- a/Models/General/NBodyDecayConstructorBase.h
+++ b/Models/General/NBodyDecayConstructorBase.h
@@ -1,347 +1,340 @@
 // -*- C++ -*-
 //
 // NBodyDecayConstructorBase.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_NBodyDecayConstructorBase_H
 #define HERWIG_NBodyDecayConstructorBase_H
 //
 // This is the declaration of the NBodyDecayConstructorBase class.
 //
 
 #include "ThePEG/Interface/Interfaced.h"
 #include "ThePEG/Utilities/Exception.h"
 #include "ThePEG/PDT/ParticleData.h"
 #include "NBodyDecayConstructorBase.fh"
 #include "PrototypeVertex.h"
 #include "DecayConstructor.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * This is the base class for NBodyDecayConstructors. An N-body 
  * decay constructor should inherit from this and implement the 
  * DecayList virtual funtcion to create the decays and decayers.  
  *
  * @see \ref NBodyDecayConstructorBaseInterfaces "The interfaces"
  * defined for NBodyDecayConstructor. 
  */
 class NBodyDecayConstructorBase: public Interfaced {
 
 public:
 
   /**
    * The default constructor.
    */
   NBodyDecayConstructorBase() : 
     init_(true),iteration_(1), points_(1000), info_(false), 
     createModes_(true), removeOnShell_(1), excludeEffective_(true), 
     minReleaseFraction_(1e-3), maxBoson_(1), maxList_(1),
     includeTopOnShell_(false ), removeFlavourChangingVertices_(false),
     removeSmallVertices_(false), minVertexNorm_(1e-8) 
   {}
 
   /**
    * Function used to determine allowed decaymodes, to be implemented
    * in derived class.
    * @param particles vector of ParticleData pointers containing 
    * particles in model
    */
   virtual void DecayList(const set<PDPtr> & particles);
 
   /**
    * Number of outgoing lines. Required for correct ordering.
    */
   virtual unsigned int numBodies() const = 0;
 
   /**
    * Set the pointer to the DecayConstrcutor
    */
   void decayConstructor(tDecayConstructorPtr d) { 
     decayConstructor_ = d;
   }
 
   /**
    *  Remove flavour changing vertices ?
    */
   bool removeFlavourChangingVertices() const {
     return removeFlavourChangingVertices_;
   }
 
   /**
    *  Remove small vertices ?
    */
   bool removeSmallVertices() const {
     return removeSmallVertices_;
   }
 
   /**
    *  Minimum norm for vertex removal
    */
   double minVertexNorm() const {
     return minVertexNorm_;
   }
 
 protected:
   
   /**
    *  Method to set up the decay mode, should be overidden in inheriting class
    */
   virtual void createDecayMode(vector<NBDiagram> & mode,
 			       bool possibleOnShell,
 			       double symfac);
   
 
   /**
    * Set the branching ratio of this mode. This requires 
    * calculating a new width for the decaying particle and reweighting
    * the current branching fractions.
    * @param dm The decaymode for which to set the branching ratio
    * @param pwidth The calculated width of the mode
    */
   void setBranchingRatio(tDMPtr dm, Energy pwidth);
 
   /**
    * Set the interfaces of the decayers depending on the flags stored.
    * @param name Fullname of the decayer in the EventGenerator
    * including the path
    */
   void setDecayerInterfaces(string name) const;
 
   /**
    * Whether to initialize decayers or not
    */
   bool initialize() const { return init_; }
   
   /**
    * Number of iterations if initializing (default 1)
    */
   int iteration() const { return iteration_; }
 
   /**
    * Number of points to do in initialization
    */
   int points() const { return points_; }
 
   /**
    * Whether to output information on the decayers 
    */
   bool info() const { return info_; }
 
   /**
    * Whether to create the DecayModes as well as the Decayer objects 
    */
   bool createDecayModes() const { return createModes_; }
 
   /**
    *  Maximum number of electroweak gauge bosons
    */
   unsigned int maximumGaugeBosons() const { return maxBoson_;}
 
   /**
    *  Maximum number of particles from the list whose decays we are calculating
    */
   unsigned int maximumList() const { return maxList_;}
 
   /**
    *  Minimum energy release fraction
    */ 
   double minimumReleaseFraction() const {return minReleaseFraction_;}
 
   /**
    * Get the pointer to the DecayConstructor object
    */
   tDecayConstructorPtr decayConstructor() const { 
     return decayConstructor_;
   }
 
   /**
    *  Option for on-shell particles
    */
   unsigned int removeOnShell() const { return removeOnShell_; }
 
   /**
    *  Check if a vertex is excluded
    */
   bool excluded(VertexBasePtr vertex) const {
     // skip an effective vertex
     if( excludeEffective_ &&
 	int(vertex->orderInGs() + vertex->orderInGem()) != int(vertex->getNpoint())-2)
       return true;
     // check if explicitly forbidden
     return excludedVerticesSet_.find(vertex)!=excludedVerticesSet_.end();
   }
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is an abstract class with persistent data.
-   */
-  static AbstractClassDescription<NBodyDecayConstructorBase> 
-  initNBodyDecayConstructorBase;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NBodyDecayConstructorBase & operator=(const NBodyDecayConstructorBase &);
 
 private:
 
   /**
    * Whether to initialize decayers or not
    */
   bool init_;
   
   /**
    * Number of iterations if initializing (default 1)
    */
   int iteration_;
 
   /**
    * Number of points to do in initialization
    */
   int points_;
 
   /**
    * Whether to output information on the decayers 
    */
   bool info_;
 
   /**
    * Whether to create the DecayModes as well as the Decayer objects 
    */
   bool createModes_;
 
   /**
    *  Whether or not to remove on-shell diagrams
    */
   unsigned int removeOnShell_;
 
   /**
    *  Excluded Vertices
    */
   vector<VertexBasePtr> excludedVerticesVector_;
 
   /**
    *  Excluded Vertices
    */
   set<VertexBasePtr> excludedVerticesSet_;
 
   /**
    *  Excluded Particles
    */
   vector<PDPtr> excludedParticlesVector_;
 
   /**
    *  Excluded Particles
    */
   set<PDPtr> excludedParticlesSet_;
 
   /**
    *  Whether or not to exclude effective vertices
    */
   bool excludeEffective_;
   
   /**
    * A pointer to the DecayConstructor object 
    */
   tDecayConstructorPtr decayConstructor_;
 
   /**
    * The minimum energy release for a three-body decay as a 
    * fraction of the parent mass
    */
   double minReleaseFraction_;
 
   /**
    *  Maximum number of EW gauge bosons
    */
   unsigned int maxBoson_;
 
   /**
    *  Maximum number of particles from the decaying particle list
    */
   unsigned int maxList_;
 
   /**
    *  Include on-shell for \f$t\to b W\f$
    */
   bool includeTopOnShell_;
 
   /**
    *  Remove flavour changing vertices ?
    */
   bool removeFlavourChangingVertices_;
 
   /**
    *  Remove small vertices ?
    */
   bool removeSmallVertices_;
 
   /**
    *  Minimum norm for vertex removal
    */
   double minVertexNorm_;
 };
 
   /** An Exception class that can be used by all inheriting classes to
    * indicate a setup problem. */
   class NBodyDecayConstructorError : public Exception {
 
   public:
 
     NBodyDecayConstructorError() : Exception() {}
     
     NBodyDecayConstructorError(const string & str,
 			       Severity sev) : Exception(str,sev)
     {}
   };
 
 }
 
 #endif /* HERWIG_NBodyDecayConstructorBase_H */
diff --git a/Models/General/QQHiggsProcessConstructor.h b/Models/General/QQHiggsProcessConstructor.h
--- a/Models/General/QQHiggsProcessConstructor.h
+++ b/Models/General/QQHiggsProcessConstructor.h
@@ -1,117 +1,111 @@
 // -*- C++ -*-
 #ifndef HERWIG_QQHiggsProcessConstructor_H
 #define HERWIG_QQHiggsProcessConstructor_H
 //
 // This is the declaration of the QQHiggsProcessConstructor class.
 //
 
 #include "HardProcessConstructor.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the QQHiggsProcessConstructor class.
  *
  * @see \ref QQHiggsProcessConstructorInterfaces "The interfaces"
  * defined for QQHiggsProcessConstructor.
  */
 class QQHiggsProcessConstructor: public HardProcessConstructor {
 
 public:
 
   /**
    * The default constructor.
    */
   QQHiggsProcessConstructor();
 
   /**
    * Main function called to start constructing the diagrams for 
    * the 2->2 process
    */
   void constructDiagrams();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<QQHiggsProcessConstructor> initQQHiggsProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   QQHiggsProcessConstructor & operator=(const QQHiggsProcessConstructor &);
 
 private:
 
   /**
    * Which partonic processes to include 
    */
   unsigned int _process;
 
   /**
    *  Which outgoing quark flavours to include
    */
   unsigned int _quarkFlavour;
 
   /**
    *  The outgoing higgs bosons
    */
   PDVector _higgs;
 
   /**
    *  Treatment of the Higgs width
    */
   unsigned int _shapeOpt;
 };
 
 }
 
 #endif /* HERWIG_QQHiggsProcessConstructor_H */
diff --git a/Models/General/ResonantProcessConstructor.h b/Models/General/ResonantProcessConstructor.h
--- a/Models/General/ResonantProcessConstructor.h
+++ b/Models/General/ResonantProcessConstructor.h
@@ -1,218 +1,211 @@
 // -*- C++ -*-
 //
 // ResonantProcessConstructor.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ResonantProcessConstructor_H
 #define HERWIG_ResonantProcessConstructor_H
 //
 // This is the declaration of the ResonantProcessConstructor class.
 //
 
 #include "HardProcessConstructor.h"
 #include "ThePEG/Utilities/Exception.h"
 #include "ResonantProcessConstructor.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class is designed to construct the diagrams for resonant processes
  * using a provdided set of particles as interemdiates.
  *
  * @see \ref ResonantProcessConstructorInterfaces "The interfaces"
  * defined for ResonantProcessConstructor.
  * @see HardProcessConstructor
  */
 class ResonantProcessConstructor: public HardProcessConstructor {
 
 public:
 
   /** Set of ParticleData pointers */
   typedef set<tPDPtr> tPDSet;
 
   /** Nested vector of doubles. */
   typedef vector<vector<double> > CFMatrix;
 
   /** Enumeration for the direction */
   enum direction {incoming, outgoing};
 
 public:
 
   /**
    * The default constructor.
    */
   ResonantProcessConstructor() :
     processOption_(0), scaleChoice_(1), scaleFactor_(1.),
     incoming_(0), intermediates_(0),
     outgoing_(0), diagrams_(0)
   {}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * The main function to create the resonant diagrams
    */
   void constructDiagrams() ;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard HardProcessConstructor functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
    * Utility function to help second vertex
    */
   void constructVertex2(IDPair in, VertexBasePtr vertex, 
 			PDPtr partc);
   
   /**
    * Function to create the appropriate diagrams
    */
   void makeResonantDiagram(IDPair in, PDPtr offshell, long outa, 
 			   long outb, VBPair vertices);
   
   /**
    * Given a vertex and 2 particle id's find the possible states
    * that can be the 3rd external particle
    * @param vertex Pointer to the vertex
    * @param part1 id of first particle
    * @param d1 direction of particle one
    * @param part2 id of other particle
    * @param d2 direction of particle two
    * @param d3 required direction of 3rd state (default = outgoing)
    * @return container of third particles
    */
   tPDSet search(VertexBasePtr vertex, long part1, direction d1, 
 	       long part2, direction d2, direction d3 = outgoing);
 
   /** 
    * Return the pair of outgoing particles from the list
    */
   IDPair find(long part, const PDVector & out) const;
 
   /**
    * Create a matrix element from the given resonant process diagram
    */
   void createMatrixElement(const HPDiagram & diag) const;
 
   /**
    * Create the correct classname and objectname for a matrix element 
    */
   string MEClassname(const tcPDVector & extpart, tcPDPtr inter,
 		     string & objname) const;
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<ResonantProcessConstructor> 
-  initResonantProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   ResonantProcessConstructor & operator=(const ResonantProcessConstructor &);
 
 private:
 
   /**
    * Which types of processes to generate
    */
   unsigned int processOption_;
 
   /**
    *  Scale choice
    */
   unsigned int scaleChoice_;
 
   /**
    *  Prefactor for the scale calculation
    */
   double scaleFactor_;
   
   /**
    * Storage for the required intermediate particles
    */
   vector<PDPtr> incoming_;
 
   /**
    * Storage for the required intermediate particles
    */
   vector<PDPtr> intermediates_;
 
   /**
    * Storage for the required intermediate particles
    */
   vector<PDPtr> outgoing_; 
 
   /**
    * Storage for the diagrams
    */
   vector<HPDiagram> diagrams_;
 
 };
 
   /** Exception class indicating setup problem. */
   class RPConstructorError : public Exception {};
 
 }
 
 
 #endif /* HERWIG_ResonantProcessConstructor_H */
diff --git a/Models/General/ThreeBodyDecayConstructor.h b/Models/General/ThreeBodyDecayConstructor.h
--- a/Models/General/ThreeBodyDecayConstructor.h
+++ b/Models/General/ThreeBodyDecayConstructor.h
@@ -1,173 +1,167 @@
 // -*- C++ -*-
 #ifndef HERWIG_ThreeBodyDecayConstructor_H
 #define HERWIG_ThreeBodyDecayConstructor_H
 //
 // This is the declaration of the ThreeBodyDecayConstructor class.
 //
 
 #include "NBodyDecayConstructorBase.h"
 #include "ThePEG/Helicity/Vertex/VertexBase.h"
 #include "TBDiagram.h"
 #include "PrototypeVertex.h"
 #include "Herwig/Decay/General/GeneralThreeBodyDecayer.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 using Helicity::VertexBasePtr;
 
 /**
  * The ThreeBodyDecayConstructor class inherits from the dummy base class
  * NBodyDecayConstructorBase and implements the necessary functions in
  * order to create the 3 body decaymodes for a given set of vertices
  * stored in a Model class.
  *
  * @see \ref ThreeBodyDecayConstructorInterfaces "The interfaces"
  * defined for ThreeBodyDecayConstructor.
  * @see NBodyDecayConstructor
  */
 class ThreeBodyDecayConstructor: public NBodyDecayConstructorBase {
 
 public:
 
   /**
    * The default constructor.
    */
   ThreeBodyDecayConstructor() : 
     includeIntermediatePhotons_(false),
     interOpt_(0), widthOpt_(1), weakMassCut_(-GeV),
     intOpt_(1), relErr_(1e-2) {}
 
   /**
    * Function used to determine allowed decaymodes, to be implemented
    * in derived class.
    *@param part vector of ParticleData pointers containing particles in model
    */
   virtual void DecayList(const set<PDPtr> & part);
 
   /**
    * Number of outgoing lines. Required for correct ordering.
    */
   virtual unsigned int numBodies() const { return 3; }
 
 protected:
 
   /**
    * Create the decayer
    * @param diagrams The diagrams for the decay
    * @param inter Option for intermediates
    */
   GeneralThreeBodyDecayerPtr createDecayer(vector<TBDiagram> & diagrams, 
 					   bool inter,double symfac) const;
 
   /**
    * Contruct the classname and object name for the Decayer
    * @param incoming The incoming particle
    * @param outgoing The decay products
    * @param objname a string containing the default path of the Decayer object
    */  
   string DecayerClassName(tcPDPtr incoming, const OrderedParticles & outgoing, 
 			  string & objname) const;
 
   /**
    *  Create the DecayMode from the diagrams
    * @param diagrams The diagrams
    * @param inter Option for intermediates
    */
   virtual void createDecayMode(vector<NBDiagram> & mode,
 			       bool possibleOnShell,
 			       double symfac);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<ThreeBodyDecayConstructor> initThreeBodyDecayConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   ThreeBodyDecayConstructor & operator=(const ThreeBodyDecayConstructor &);
 
 private:
 
   /**
    *  Option for intermediate photons
    */
   bool includeIntermediatePhotons_;
 
   /**
    *  Option for the inclusion of intermediates
    */
   unsigned int interOpt_;
 
   /**
    *  How to treat the widths of the intermediate particles
    */
   unsigned int widthOpt_;
 
   /**
    *  Cut off or decays via the weak current
    */
   Energy weakMassCut_;
 
   /**
    *  Option for the integration to get the partial width
    */
   unsigned int intOpt_;
 
   /**
    *  Relative error for partial width integration
    */
   double relErr_;
 };
 
 }
 
 #endif /* HERWIG_ThreeBodyDecayConstructor_H */
diff --git a/Models/General/TwoBodyDecayConstructor.h b/Models/General/TwoBodyDecayConstructor.h
--- a/Models/General/TwoBodyDecayConstructor.h
+++ b/Models/General/TwoBodyDecayConstructor.h
@@ -1,149 +1,143 @@
 // -*- C++ -*-
 //
 // TwoBodyDecayConstructor.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TwoBodyDecayConstructor_H
 #define HERWIG_TwoBodyDecayConstructor_H
 //
 // This is the declaration of the TwoBodyDecayConstructor class.
 //
 
 #include "NBodyDecayConstructorBase.h"
 #include "ThePEG/Helicity/Vertex/VertexBase.h"
 #include "Herwig/Decay/General/GeneralTwoBodyDecayer.fh"
 #include "TwoBodyDecay.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 using Helicity::VertexBasePtr;
 using Helicity::tVertexBasePtr;
 
 /**
  * The TwoBodyDecayConstructor class inherits from the dummy base class
  * NBodyDecayConstructorBase and implements the necessary functions in
  * order to create the 2 body decay modes for a given set of vertices
  * stored in a Model class.
  *
  * @see \ref TwoBodyDecayConstructorInterfaces "The interfaces"
  * defined for TwoBodyDecayConstructor.
  * @see NBodyDecayConstructor
  **/
 class TwoBodyDecayConstructor: public NBodyDecayConstructorBase {
 
 public:
 
   /**
    * The default constructor.
    */
   TwoBodyDecayConstructor() : showerAlpha_("/Herwig/Shower/AlphaQCD") {}
 
   /**
    * Function used to determine allowed decaymodes
    *@param part vector of ParticleData pointers containing particles in model
    */
   virtual void DecayList(const set<PDPtr> & part);
 
   /**
    * Number of outgoing lines. Required for correct ordering.
    */
   virtual unsigned int numBodies() const { return 2; }
 
   
 public:
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<TwoBodyDecayConstructor> initTwoBodyDecayConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   TwoBodyDecayConstructor & operator=(const TwoBodyDecayConstructor &);
 
 private:
   
   /** @name Functions to create decayers and decaymodes. */
   //@{
   /**
    * Function to create decays
    * @param inpart Incoming particle 
    * @param vert The vertex to create decays for
    * @param ilist Which list to search
    * @param iv Row number in _theExistingDecayers member
    * @return A vector a decay modes
    */
   set<TwoBodyDecay> createModes(tPDPtr inpart, VertexBasePtr vert,
 				unsigned int ilist);
 
   /**
    * Function to create decayer for specific vertex
    * @param decay decay mode for this decay
    * member variable
    */
   GeneralTwoBodyDecayerPtr createDecayer(TwoBodyDecay decay);
 
   /**
    * Create decay mode(s) from given part and decay modes
    * @param decays The vector of decay modes
    * @param decayer The decayer responsible for this decay
    */
   void createDecayMode(set<TwoBodyDecay> & decays);
   //@}
 
   /**
    * Get the vertex for QCD radiation
    */
   VertexBasePtr radiationVertex(tPDPtr particle,tPDPair children = tPDPair ());
 
 private:
 
   /**
    *  Map of particles and the vertices which generate their QCD
    *  radiation
    */
   map<tPDPtr,VertexBasePtr> radiationVertices_;
 
   /**
    *  Default choice for the strong coupling object for hard radiation
    */
   string showerAlpha_;
 };
   
 }
 
 #endif /* HERWIG_TwoBodyDecayConstructor_H */
diff --git a/Models/General/TwoToTwoProcessConstructor.h b/Models/General/TwoToTwoProcessConstructor.h
--- a/Models/General/TwoToTwoProcessConstructor.h
+++ b/Models/General/TwoToTwoProcessConstructor.h
@@ -1,319 +1,313 @@
 // -*- C++ -*-
 //
 // TwoToTwoProcessConstructor.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TwoToTwoProcessConstructor_H
 #define HERWIG_TwoToTwoProcessConstructor_H
 //
 // This is the declaration of the TwoToTwoProcessConstructor class.
 //
 
 #include "HardProcessConstructor.h"
 #include "ThePEG/Utilities/Exception.h"
 #include "TwoToTwoProcessConstructor.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The TwoToTwoProcessConstructor is designed to construct the diagrams that are 
  * possible for a given set of incoming and outgoing particles.
  *
  * @see \ref TwoToTwoProcessConstructorInterfaces "The interfaces"
  * defined for TwoToTwoProcessConstructor.
  * @see HardProcessConstructor
  */
 class TwoToTwoProcessConstructor: public HardProcessConstructor {
 
 public:
 
   /** Set of ParticleData pointers */
   typedef set<tPDPtr> tPDSet;
 
   /** Map of HPDiagrams. */
   typedef multimap<HPDiagram, HPDiagram> HPDMap;
 
   /** Enumeration for the direction */
   enum direction {incoming, outgoing};
 
 public:
 
   /**
    * The default constructor.
    */
   TwoToTwoProcessConstructor();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 public:
 
   /**
    * Main function called to start constructing the diagrams for 
    * the 2->2 process
    */
   void constructDiagrams();  
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 
 protected:
 
   /** @name Standard HardProcessConstructor functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<TwoToTwoProcessConstructor> initTwoToTwoProcessConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   TwoToTwoProcessConstructor & operator=(const TwoToTwoProcessConstructor &);
 
 private:
 
   /** Functions to create the diagrams.*/
   //@{
   /**
    * Given a vertex and 2 particle id's find the possible states
    * that can be the 3rd external particle
    * @param vertex Pointer to the vertex
    * @param part1 id of first particle
    * @param d1 direction of particle one
    * @param part2 id of other particle
    * @param d2 direction of particle two
    * @param d3 required direction of 3rd state (default = outgoing)
    * @return container of third particles
    */
   tPDSet search(VertexBasePtr vertex, long part1, direction d1, 
 	       long part2, direction d2, direction d3 = outgoing);    
 
   /**
    * Given a vertex and 3 particle id's find the possible states
    * that can be the 4th external particle
    * @param vertex Pointer to the vertex
    * @param part1 id of first particle
    * @param d1 direction of particle one
    * @param part2 id of second particle
    * @param d2 direction of particle two
    * @param part3 id of third particle
    * @param d3 direction of particle three
    * @param d4 Required direction of fourth state (default = outgoing)
    * @return container of fourth particles
    */
   tPDSet search(VertexBasePtr vertex, long part1, direction d1, long part2,
 	       direction d2, long part3, direction d3, 
 	       direction d4 = outgoing);
   
   /**
    * Create the resonance diagrams.
    * @param inpp The incoming pair of particles.
    * @param fs A possible final state.
    * @param vertex The possible interaction vertex for the incoming pair
    */
   void createSChannels(tcPDPair inpp, long fs, tVertexBasePtr vertex);
 
  /**
    * Create the scattering diagrams.
    * @param inpp The incoming pair of particles.
    * @param fs A possible final state.
    * @param vertex The first vertex
    */
   void createTChannels(tPDPair inpp, long fs, tVertexBasePtr vertex);
 
   /**
    * Populate the diagram structure
    * @param in Pair of incoming particle id's
    * @param out1 first outgoing particle
    * @param out2 set of second outgoing particles
    * @param inter pointer to particle data for intermediate
    * @param chan the channel type 
    * @param vertices pair of vertices for the diagram
    * @param order The order
    */
   void makeDiagrams(IDPair in, long out1, const tPDSet & out2, PDPtr inter,
 		    HPDiagram::Channel chan, VBPair vertices, BPair order);
 
   /**
    * Create diagrams from 4 point vertices
    * @param parta id of first incoming particle
    * @param partb id of second incoming particle
    * @param partc id of first outgoing particle
    * @param vert pointer to the vertex
    */
   void makeFourPointDiagrams(long parta,long partb,long partc,
 			     VertexBasePtr vert);
     
   /**
    * Create the matrix element that will calculate me2() for this
    * process
    * @param process vector of HardPrcoessDiagrams structs that store 
    * the information about the diagrams
    */  
   void createMatrixElement(const HPDVector & process) const;
    //@}
   
 
   /**
    * Contruct the classname and object name for the matrix element
    * @param extpart vector containing incoming and outgoing particle data pointers
    * @param objname a string containing the default path of the ME object
    */  
   string MEClassname(const vector<tcPDPtr> & extpart, 
 		     string & objname) const;
  
 private:
 
   /**
    * Required initial state particles
    */
   PDVector incoming_;
 
   /**
    * Pairs of particles for initial state, ordered by spin or id.
    * If both are of differing spin then lowest is first and if the spin is
    * equal the particle goes first then the anti-particle. This is setup
    * in the doinit() member.
    */
   vector<tPDPair> incPairs_;
   
   /**
    * Required final state particles
    */
   PDVector outgoing_;
 
   /**
    * Number of incoming particles
    */
   unsigned int Nout_;
 
   /**
    * Number of vertices in the model
    */
   unsigned int nv_;
 
   /**
    *  The vertices
    */
   vector<VertexBasePtr> vertices_;
 
   /**
    * Store the configuration of the diagrams
    */
   HPDVector processes_;
 
   /**
    * Whether to include all diagrams or just those with strong
    * coupling in them
    */
   bool allDiagrams_;
 
   /**
    * Which types of processes to generate
    */
   unsigned int processOption_;
 
   /**
    *  Option for the scales
    */
   unsigned int scaleChoice_;
 
   /**
    *  Prefactor for the scale calculation
    */
   double scaleFactor_;
 
   /**
    *  Option to exclude certain intermediates
    */
   vector<PDPtr> excluded_;
 
   /**
    *  Option to exclude certain external particles
    */
   vector<PDPtr> excludedExternal_;
 
   /**
    *  Excluded Vertices
    */
   vector<VertexBasePtr> excludedVertexVector_;
 
   /**
    *  Excluded Vertices
    */
   set<VertexBasePtr> excludedVertexSet_;
 };
 
   /** Exception class indicating setup problem. */
   class TwoToTwoProcessConstructorError : public Exception {
 
   public:
 
     /**
      * Exception for error handling
      * @param str Error message
      * @param sev Severity
      */
     TwoToTwoProcessConstructorError(const string & str, Severity sev) 
       : Exception(str,sev) {}
 
   };
 
 }
 
 #endif /* HERWIG_TwoToTwoProcessConstructor_H */
diff --git a/Models/General/VVSLoopVertex.h b/Models/General/VVSLoopVertex.h
--- a/Models/General/VVSLoopVertex.h
+++ b/Models/General/VVSLoopVertex.h
@@ -1,153 +1,147 @@
 // -*- C++ -*-
 #ifndef HERWIG_VVSLoopVertex_H
 #define HERWIG_VVSLoopVertex_H
 // // This is the declaration of the VVSLoopVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h"
 #include "VVSLoopVertex.fh"
  
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The <code>VVSLoopVertex</code> is designed to
  * calculate the coefficents for the terms in the
  * Passarino-Veltman tensor reduction scheme. A vertex
  * class should inherit from this and implement it's own 
  * setCoupling member from which the VVSLoopVertex  
  * setCoupling member is called.
  */
 class VVSLoopVertex: public Helicity::GeneralVVSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   VVSLoopVertex() : masses(0), type(0), couplings(0), Npart_(0), loopToolsInit_(false) {
     kinematics(true);
   }
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param part1 ParticleData pointer to first particle
    *@param part2 ParticleData pointer to first particle
    *@param part3 ParticleData pointer to first particle
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Finalize this object. Called in the run phase just after a
    * run has ended. Used eg. to write out statistics.
    */
   virtual void dofinish();
   //@}
 
 protected:
   
   /**
    * Vector of loop masses
    */
   vector<Energy> masses;
   
   /**
    * Vector of loop types
    */
   vector<PDT::Spin> type;
 
   /**
    * The left and right couplings for a fermion loop 
    */
   vector<pair<Complex, Complex> > couplings;
 
   /**
    * Set the number of particles in the loop 
    */
   void setNParticles(unsigned int npart) { Npart_ = npart; }
 
   /**
    *  Is loopTools initialized
    */
   bool loopToolsInitialized() { return loopToolsInit_; }
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<VVSLoopVertex> initVVSLoopVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   VVSLoopVertex & operator=(const VVSLoopVertex &);
 
 private:
   
   /**
    * The number of particles in the loop 
    */
   unsigned int Npart_;
 
   /**
    *  Loop tools initialised ?
    */
   bool loopToolsInit_;
 
 };
 
 }
 
 #endif /* HERWIG_VVSLoopVertex_H */
diff --git a/Models/General/WeakCurrentDecayConstructor.h b/Models/General/WeakCurrentDecayConstructor.h
--- a/Models/General/WeakCurrentDecayConstructor.h
+++ b/Models/General/WeakCurrentDecayConstructor.h
@@ -1,202 +1,196 @@
 // -*- C++ -*-
 //
 // WeakCurrentDecayConstructor.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_WeakCurrentDecayConstructor_H
 #define HERWIG_WeakCurrentDecayConstructor_H
 //
 // This is the declaration of the WeakCurrentDecayConstructor class.
 //
 
 #include "NBodyDecayConstructorBase.h"
 #include "ThePEG/Helicity/Vertex/VertexBase.h"
 #include "Herwig/Decay/DecayIntegrator.h"
 #include "Herwig/Decay/DecayPhaseSpaceMode.h"
 #include "Herwig/Decay/General/GeneralCurrentDecayer.fh"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "Herwig/Decay/WeakCurrents/WeakDecayCurrent.h"
 #include "Herwig/Decay/General/GeneralCurrentDecayer.h"
 #include "TwoBodyDecay.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the WeakCurrentDecayConstructor class.
  *
  * @see \ref WeakCurrentDecayConstructorInterfaces "The interfaces"
  * defined for WeakCurrentDecayConstructor.
  */
 class WeakCurrentDecayConstructor: public NBodyDecayConstructorBase {
 
 public:
 
   /**
    * The default constructor.
    */
   WeakCurrentDecayConstructor() : _masscut(5.*GeV) {}
   
   /**
    * Function used to determine allowed decaymodes, to be implemented
    * in derived class.
    *@param part vector of ParticleData pointers containing particles in model
    */
   virtual void DecayList(const set<PDPtr> & part);
 
   /**
    * Number of outgoing lines. Required for correct ordering (do this one last)
    */
   virtual unsigned int numBodies() const { return 1000; }
 
   /**
    *  Cut off
    */
   Energy massCut() const { return _masscut;}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /** @name Functions to create decayers and decaymodes. */
   //@{
   /**
    * Function to create decays
    * @param inpart Incoming particle 
    * @param vert The vertex to create decays for
    * @param ilist Which list to search
    * @param iv Row number in _theExistingDecayers member
    * @return vector of ParticleData ptrs
    */
   vector<TwoBodyDecay>
   createModes(const PDPtr inpart,const VertexBasePtr vert,
 	      unsigned int ilist);
 
   /**
    * Function to create decayer for specific vertex
    * @param vert Pointer to vertex 
    * @param icol Integer referring to the colmun in _theExistingDecayers
    * @param ivert Integer referring to the row in _theExistingDecayers
    * member variable
    */
   GeneralCurrentDecayerPtr createDecayer(PDPtr in, PDPtr out1,
 					 vector<tPDPtr> outCurrent,
 					 VertexBasePtr vertex,
 					 WeakDecayCurrentPtr current);
 
   /**
    * Create decay mode(s) from given part and decay modes
    * @param inpart pointer to incoming particle
    * @param decays list of allowed interactions
    * @param decayer The decayer responsible for this decay
    */
   void createDecayMode(vector<TwoBodyDecay> & decays);
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<WeakCurrentDecayConstructor> initWeakCurrentDecayConstructor;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   WeakCurrentDecayConstructor & operator=(const WeakCurrentDecayConstructor &);
 
 private:
 
   /**
    * Model Pointer
    */
   Ptr<Herwig::StandardModel>::pointer _theModel;
 
   /**
    *  Cut-off on the mass difference
    */
   Energy _masscut;
 
   /**
    *  Tags for the modes
    */
   vector<string> decayTags_;
 
   /**
    *  Particles for the mode
    */
   vector<vector<tPDPtr> > particles_;
 
   /**
    *  Normalisation
    */
   vector<double> _norm;
 
   /**
    *  The current for the mode
    */
   vector<WeakDecayCurrentPtr> _current;
 };
 
 }
 
 #endif /* HERWIG_WeakCurrentDecayConstructor_H */
diff --git a/Models/Leptoquarks/LeptoquarkModel.h b/Models/Leptoquarks/LeptoquarkModel.h
--- a/Models/Leptoquarks/LeptoquarkModel.h
+++ b/Models/Leptoquarks/LeptoquarkModel.h
@@ -1,321 +1,315 @@
 // -*- C++ -*-
 #ifndef HERWIG_LeptoquarkModel_H
 #define HERWIG_LeptoquarkModel_H
 //
 // This is the declaration of the LeptoquarkModel class.
 //
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
 #include "LeptoquarkModel.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * Here is the documentation of the LeptoquarkModel class.
  *
  * @see \ref LeptoquarkModelInterfaces "The interfaces"
  * defined for LeptoquarkModel.
  */
 class LeptoquarkModel: public BSMModel {
 
 public:
 
   /**
    * The default constructor.
    */
   LeptoquarkModel();
  
   /** @name Vertices */
   //@{
   /**
    * Pointer to the object handling S0S0barg vertex.
    */
   tAbstractVSSVertexPtr   vertexSLQSLQG() const {return _theSLQSLQGVertex;}
   
   /**
    * Pointer to the object handling the S0S0bargg vertex.
    */
   tAbstractVVSSVertexPtr   vertexSLQSLQGG() const {return _theSLQSLQGGVertex;}
 
   /**
    * Pointer to the object handling the S0ql vertex.
    */
   tAbstractFFSVertexPtr   vertexSLQFF() const {return _theSLQFFVertex;}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
  /**
    * Return the overall fermion coupling
    */
   double cfermion() const {return _CouplFF;}
 
   /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S0)
    */
   double cleft() const {return _leftcoup;}
 
  /**
    * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (S0)
    */
   double cright() const {return _rightcoup;}
 
   /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1 triplet)
    */
   double cleft1() const {return _leftcoup1;}
 
   /**
    * Return the coupling of the leptoquark to right-handed leptons
    * + left-handed quarks (~S0)
    */
   double crighttilde() const {return _rightcouptilde;}
 
  /**
   * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1/2)
    */  
   double cleft12() const {return _leftcoup12;}
 
   /**
    * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (S1/2)
    */
   double cright12() const {return _rightcoup12;}
 
   /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S1/2)
    */
   double cleft12tilde() const {return _leftcoup12t;}
 
  /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (S0)
    */
   double dcleft() const {return _dleftcoup;}
  /**
    * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (dS0)
    */
   double dcright() const {return _drightcoup;}
 
   /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1 triplet)
    */
 
   double dcleft1() const {return _dleftcoup1;}
 
   /**
    * Return the coupling of the leptoquark to right-handed leptons
    * + left-handed quarks (~dS0)
    */
   double dcrighttilde() const {return _drightcouptilde;}
 
  /**
   * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1/2)
    */  
   double dcleft12() const {return _dleftcoup12;}
 
   /**
    * Return the coupling of the leptoquark to right-handed leptons + left-handed quarks (dS1/2)
    */
   double dcright12() const {return _drightcoup12;}
 
   /**
    * Return the coupling of the leptoquark to left-handed leptons + right-handed quarks (dS1/2)
    */
   
   double dcleft12tilde() const {return _dleftcoup12t;}
   /**
    * Suppression scale for derivatively coupled scalar leptoquarks
    */
   
   Energy fscale() const {return _derivscalef;}
 
 
 
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
 
   
     
   
   //@}
 
 
 // If needed, insert declarations of virtual function defined in the
 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
 
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<LeptoquarkModel> initLeptoquarkModel;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   LeptoquarkModel & operator=(const LeptoquarkModel &);
 
   
   /**
    * Pointer to the object handling the G to SLQ SLQ vertex.
    */
   AbstractVSSVertexPtr  _theSLQSLQGVertex;
 
   /**
    * Pointer to the object handling the GG to SLQ SLQ vertex.
    */
   AbstractVVSSVertexPtr  _theSLQSLQGGVertex;
 
 
   /**
    * Pointer to the object handling the SLQ to FF vertex.
    */
   AbstractFFSVertexPtr  _theSLQFFVertex;
 
 
 
   /**
    *  Overall coupling to fermions
    */
   double _CouplFF;
 
 
   /**
    *  Overall coupling to left-handed leptons (S0)
    */
   double _leftcoup;
 
   /**
    *  Overall coupling to right-handed leptons (S0)
    */
   double _rightcoup;
 
   /**
    *  Overall coupling to left-handed leptons (~S0)
    */
   double _rightcouptilde;
   
   /**
    *  Overall coupling to left-handed leptons (S1 triplet)
    */
   double _leftcoup1;
 
   /**
    *  Overall coupling to left-handed leptons (S1/2)
    */
   double _leftcoup12;
 
   /**
    *  Overall coupling to right-handed leptons (S1/2)
    */
   double _rightcoup12;
 
   /**
    *  Overall coupling to left-handed leptons (~S1/2)
    */
   double _leftcoup12t;
 
    /**
    *  Overall coupling to left-handed leptons (dS0)
    */
   double _dleftcoup;
 
   /**
    *  Overall coupling to right-handed leptons (dS0)
    */
   double _drightcoup;
 
   /**
    *  Overall coupling to left-handed leptons (~dS0)
    */
   double _drightcouptilde;
   
   /**
    *  Overall coupling to left-handed leptons (dS1 triplet)
    */
   double _dleftcoup1;
 
   /**
    *  Overall coupling to left-handed leptons (dS1/2)
    */
   double _dleftcoup12;
 
   /**
    *  Overall coupling to right-handed leptons (dS1/2)
    */
   double _drightcoup12;
 
   /**
    *  Overall coupling to left-handed leptons (~dS1/2)
    */
   double _dleftcoup12t;
 
   /**
    *  Suppression scale for derivatively coupled scalar leptoquarks, f
    */
   Energy _derivscalef;
 
   
 
 };
 
 }
 
 #endif /* HERWIG_LeptoquarkModel_H */
diff --git a/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h
--- a/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h
+++ b/Models/Leptoquarks/LeptoquarkModelSLQFFVertex.h
@@ -1,251 +1,246 @@
 // -*- C++ -*-
 //
 // LeptoquarkModelSLQFFVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_LeptoquarkModelSLQFFVertex_H
 #define HERWIG_LeptoquarkModelSLQFFVertex_H
 //
 // This is the declaration of the LeptoquarkModelSLQFFVertex class.
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFSVertex
  *  @see VertexBase
  */
 class LeptoquarkModelSLQFFVertex: public FFSVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   LeptoquarkModelSLQFFVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<LeptoquarkModelSLQFFVertex> initLeptoquarkModelSLQFFVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   LeptoquarkModelSLQFFVertex & operator=(const LeptoquarkModelSLQFFVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    *  Overall coupling to fermions
    */
   double _CFF;
   
   
   /**
    *  Overall coupling to left-handed leptons 
    */
   //double _cL;
   Complex _cL;
 
   /**
    *  Overall coupling to right-handed leptons 
    */
   //  double _cR;
   Complex _cR;
 
   /**
    *  Overall coupling to left-handed leptons for S0
    */
   // double _cL0;
   Complex _cL0;
   
 
   /**
    *  Overall coupling to right-handed leptons for S0
    */
   //  double _cR0;
   Complex _cR0;
 
   /**
    *  Overall coupling to right-handed leptons for ~S0
    */
   // double _cR0t;
   Complex _cR0t;
   
   /**
    *  Overall coupling to left-handed leptons for ~S1 triplet
    */
   // double _cL1;
   Complex _cL1;
 
   /**
    *  Overall coupling to left-handed leptons for S1/2 triplet
    */
   // double _cL12;
   Complex _cL12;
   
 
   /**
    *  Overall coupling to right-handed leptons for S1/2 triplet
    */
   // double _cR12;
   Complex _cR12;
 
   /**
    *  Overall coupling to left-handed leptons for ~S1/2 triplet
    */
   //  double _cL12t;
   Complex _cL12t;
   
   /**
    *  Overall coupling to left-handed leptons 
    */
   //double _dcL;
   Complex _dcL;
 
   /**
    *  Overall coupling to right-handed leptons 
    */
   // double _dcR;
   Complex _dcR;
 
 
   /**
    *  Overall coupling to left-handed leptons for dS0
    */
   //  double _dcL0;
   Complex _dcL0;
 
   /**
    *  Overall coupling to right-handed leptons for dS0
    */
   //  double _dcR0;
   Complex _dcR0;
 
   /**
    *  Overall coupling to right-handed leptons for ~dS0
    */
   double _dcR0t;
 
   /**
    *  Overall coupling to left-handed leptons for ~dS1 triplet
    */
   double _dcL1;
 
   /**
    *  Overall coupling to left-handed leptons for dS1/2 triplet
    */
   //double _dcL12;
   Complex _dcL12;
 
   /**
    *  Overall coupling to right-handed leptons for dS1/2 triplet
    */
   //double _dcR12;
   Complex _dcR12;
 
 
   /**
    *  Overall coupling to left-handed leptons for ~dS1/2 triplet
    */
   //  double _dcL12t;
   Complex _dcL12t;
   
   /**
    *  Suppression scale for derivatively coupled scalar leptoquarks
    */
   Energy _derivscale;
 
 
 
 
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_LeptoquarkModelSLQFFVertex_H */
diff --git a/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h
--- a/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h
+++ b/Models/Leptoquarks/LeptoquarkModelSLQSLQGGVertex.h
@@ -1,127 +1,122 @@
 // -*- C++ -*-
 //
 // LeptoquarkModelSLQSLQGGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_LeptoquarkModelSLQSLQGGVertex_H
 #define HERWIG_LeptoquarkModelSLQSLQGGVertex_H
 //
 // This is the declaration of the LeptoquarkModelSLQSLQGGVertex class.
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h"
 #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  * 
  *  The LeptoquarkModelSLQSLQGGVertex class is the implementation of the gluon
  *  gluon coupling to pairs of scalar leptoquarks in the LeptoquarkModel. It inherits from the VVSSVertex 
  *  and implements the setCoupling member
  *
  *  @see VVSSVertex
  *  @see VertexBase
  */
 class LeptoquarkModelSLQSLQGGVertex: public VVSSVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   LeptoquarkModelSLQSLQGGVertex();
     
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the third  particle.
 
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<LeptoquarkModelSLQSLQGGVertex> initLeptoquarkModelSLQSLQGGVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   LeptoquarkModelSLQSLQGGVertex & operator=(const LeptoquarkModelSLQSLQGGVertex &);
   
   /**
    * Pointer to the model.
    */
   tcSMPtr _theModel;
   
   /**
    * The energy at which the coupling was last evaluated
    */
   Energy2 _q2last;
 
   /**
    * The coupling when it was last evaluated
    */
   Complex _couplast;
 
 };
 
 }
 
 #endif /* HERWIG_LeptoquarkModelSLQSLQGGVertex_H */
diff --git a/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h b/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h
--- a/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h
+++ b/Models/Leptoquarks/LeptoquarkModelSLQSLQGVertex.h
@@ -1,126 +1,121 @@
 // -*- C++ -*-
 //
 // LeptoquarkModelSLQSLQGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_LeptoquarkModelSLQSLQGVertex_H
 #define HERWIG_LeptoquarkModelSLQSLQGVertex_H
 //
 // This is the declaration of the LeptoquarkModelSLQSLQGVertex class.
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "Herwig/Models/Leptoquarks/LeptoquarkModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  * 
  *  The LeptoquarkModelSLQSLQGVertex class is the implementation of the gluon
  *  coupling to pairs of scalar leptoquarks in the LeptoquarkModel. It inherits from the VSSVertex 
  *  and implements the setCoupling member
  *
  *  @see VSSVertex
  *  @see VertexBase
  */
 class LeptoquarkModelSLQSLQGVertex: public VSSVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   LeptoquarkModelSLQSLQGVertex();
     
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<LeptoquarkModelSLQSLQGVertex> initLeptoquarkModelSLQSLQGVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   LeptoquarkModelSLQSLQGVertex & operator=(const LeptoquarkModelSLQSLQGVertex &);
   
   /**
    * Pointer to the model.
    */
   tcSMPtr _theModel;
 
   
   /**
    * The energy at which the coupling was last evaluated
    */
   Energy2 _q2last;
 
   /**
    * The coupling when it was last evaluated
    */
   Complex _couplast;
 
 };
 
 }
 
 #endif /* HERWIG_LeptoquarkModelSLQSLQGVertex_H */
diff --git a/Models/RSModel/RSModel.h b/Models/RSModel/RSModel.h
--- a/Models/RSModel/RSModel.h
+++ b/Models/RSModel/RSModel.h
@@ -1,200 +1,195 @@
 // -*- C++ -*-
 //
 // RSModel.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModel_H
 #define HERWIG_RSModel_H
 // This is the declaration of the RSModel class.
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h"
 #include "RSModel.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup Models
  *
  *  This is the class to be used instead of the Standard Model class for
  *  the Randell Sundrum model.
  *
  * @see \ref RSModelInterfaces "The interfaces"
  * defined for RSModel.
  * @see StandardModel
  * @see StandardModelBase
  * 
  */
 class RSModel: public BSMModel {
 
 public:
 
   /**
    * The default constructor 
    */
   RSModel(): Lambda_pi_(10000*GeV) {
     useMe();
   }
   
   /**
    * Return the gravition coupling
    */
   Energy lambda_pi() const {return Lambda_pi_;}
 
 
   /** @name Vertices */
   //@{
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex.
    */
   tAbstractFFTVertexPtr   vertexFFGR() const {return FFGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to VV\f$ vertex.
    */
   tAbstractVVTVertexPtr   vertexVVGR() const {return VVGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to SS\f$ vertex.
    */
   tAbstractSSTVertexPtr   vertexSSGR() const {return SSGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex.
    */
   tAbstractFFVTVertexPtr  vertexFFGGR() const {return FFGGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}W^\pm/Z^0/\gamma\f$ vertex.
    */
   tAbstractFFVTVertexPtr  vertexFFWGR() const {return FFWGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to W^+W^-Z^0/\gamma\f$ vertex.
    */
   tAbstractVVVTVertexPtr  vertexWWWGR() const {return WWWGRVertex_;}
 
   /**
    * Pointer to the object handling the \f$G\to ggg\f$ vertex.
    */
   tAbstractVVVTVertexPtr  vertexGGGGR() const {return GGGGRVertex_;}
   //@}
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModel> initRSModel;
-  
-    /**
      * Private and non-existent assignment operator.
      */
   RSModel & operator=(const RSModel &);
 
 private:
   
   /**
    * Coupling of the graviton
    */
   Energy Lambda_pi_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}\f$ vertex.
    */
   AbstractFFTVertexPtr  FFGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to VV\f$ vertex.
    */
   AbstractVVTVertexPtr  VVGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to SS\f$ vertex.
    */
   AbstractSSTVertexPtr  SSGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}g\f$ vertex.
    */
   AbstractFFVTVertexPtr FFGGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to f\bar{f}W/Z^0\gamma\f$ vertex.
    */
   AbstractFFVTVertexPtr FFWGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to W^+W^-Z^0\gamma\f$ vertex.
    */
   AbstractVVVTVertexPtr WWWGRVertex_;
 
   /**
    * Pointer to the object handling the \f$G\to ggg\f$ vertex.
    */
   AbstractVVVTVertexPtr GGGGRVertex_;
   
 };
 }
 
 #endif /* HERWIG_RSModel_H */
diff --git a/Models/RSModel/RSModelFFGGRVertex.h b/Models/RSModel/RSModelFFGGRVertex.h
--- a/Models/RSModel/RSModelFFGGRVertex.h
+++ b/Models/RSModel/RSModelFFGGRVertex.h
@@ -1,133 +1,128 @@
 // -*- C++ -*-
 //
 // RSModelFFGGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelFFGGRVertex_H
 #define HERWIG_RSModelFFGGRVertex_H
 //
 // This is the declaration of the RSModelFFGGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the fermion-antifermion-vector-graviton
  *  vertex for the Randell-Sundrum model
  *
  *  @see FFVTVertex
  *  @see VertexBase
  */
 class RSModelFFGGRVertex: public FFVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelFFGGRVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3, tcPDPtr part4);
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelFFGGRVertex> initRSModelFFGGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelFFGGRVertex & operator=(const RSModelFFGGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
 
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
   //@}
 };
 }
 
 #endif /* HERWIG_RSModelFFGGRVertex_H */
diff --git a/Models/RSModel/RSModelFFGRVertex.h b/Models/RSModel/RSModelFFGRVertex.h
--- a/Models/RSModel/RSModelFFGRVertex.h
+++ b/Models/RSModel/RSModelFFGRVertex.h
@@ -1,118 +1,113 @@
 // -*- C++ -*-
 //
 // RSModelFFGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelFFGRVertex_H
 #define HERWIG_RSModelFFGRVertex_H
 //
 // This is the declaration of the RSModelFFGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the Randell-Sundrum model fermion-antifermion
  *  tensor vertex for helicity amplitude calculations 
  *
  *  @see FFTVertex
  *  @see VertexBase
  */
 class RSModelFFGRVertex: public FFTVertex {
   
 public:
   
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * Default constructor.
    */
   RSModelFFGRVertex();
   //@}
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelFFGRVertex> initRSModelFFGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelFFGRVertex & operator=(const RSModelFFGRVertex &);
 
   /**
    * The coupling.
    */
   InvEnergy kappa_;
 
 };
 }
 
 #endif /* HERWIG_RSModelFFGRVertex_H */
diff --git a/Models/RSModel/RSModelFFWGRVertex.h b/Models/RSModel/RSModelFFWGRVertex.h
--- a/Models/RSModel/RSModelFFWGRVertex.h
+++ b/Models/RSModel/RSModelFFWGRVertex.h
@@ -1,153 +1,148 @@
 // -*- C++ -*-
 //
 // RSModelFFWGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelFFWGRVertex_H
 #define HERWIG_RSModelFFWGRVertex_H
 //
 // This is the declaration of the RSModelFFWGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/FFVTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the fermion-antifermion-vector-graviton
  *  vertex for the Randell-Sundrum model
  *
  *  @see FFVTVertex
  *  @see VertexBase
  */
 class RSModelFFWGRVertex: public FFVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelFFWGRVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3, tcPDPtr part4);
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelFFWGRVertex> initRSModelFFWGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelFFWGRVertex & operator=(const RSModelFFWGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The charges of the Standard Model fermions.
    */
   vector<double> charge_;
 
   /**
    *  The left couplings of the Standard Model fermions.
    */
   vector<double> gl_;
 
   /**
    *  The right couplings of the Standard Model fermions.
    */
   vector<double> gr_;
 
   /**
    *  The elements of the CKM matrix.
    */
   vector<vector<Complex> > ckm_;
 
   /**
    *  The last value of the coupling/
    */
   Complex couplast_;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 q2last_;
 
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
   //@}
 };
 }
 
 #endif /* HERWIG_RSModelFFWGRVertex_H */
diff --git a/Models/RSModel/RSModelGGGGRVertex.h b/Models/RSModel/RSModelGGGGRVertex.h
--- a/Models/RSModel/RSModelGGGGRVertex.h
+++ b/Models/RSModel/RSModelGGGGRVertex.h
@@ -1,132 +1,127 @@
 // -*- C++ -*-
 //
 // RSModelGGGGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelGGGGRVertex_H
 #define HERWIG_RSModelGGGGRVertex_H
 //
 // This is the declaration of the RSModelGGGGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The RSModelGGGGRVertex class is the implementation of the 
  *  triple vector graviton couling in the RS model. 
  *  It inherits from VVVTVertex and implements the setCoupling member.
  *
  *  @see VVVTVertex
  *  @see VertexBase
  */
 class RSModelGGGGRVertex: public VVVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelGGGGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
 
 protected:
    
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelGGGGRVertex> initRSModelGGGGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelGGGGRVertex & operator=(const RSModelGGGGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  The last value of the coupling/
    */
   Complex _couplast;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 _q2last;
   //@}
 };
 }
 
 #endif /* HERWIG_RSModelGGGGRVertex_H */
diff --git a/Models/RSModel/RSModelSSGRVertex.h b/Models/RSModel/RSModelSSGRVertex.h
--- a/Models/RSModel/RSModelSSGRVertex.h
+++ b/Models/RSModel/RSModelSSGRVertex.h
@@ -1,114 +1,109 @@
 // -*- C++ -*-
 //
 // RSModelSSGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelSSGRVertex_H
 #define HERWIG_RSModelSSGRVertex_H
 //
 // This is the declaration of the RSModelSSGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/SSTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  * 
  *  The RSModelSSGRVertex class is thew implementation of the graviton
  *  coupling to the Higgs in the RSModel. It inherits from the SSTVertex 
  *  and implements the setCoupling member
  *
  *  @see SSTVertex
  *  @see VertexBase
  */
 class RSModelSSGRVertex: public SSTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelSSGRVertex();
     
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelSSGRVertex> initRSModelSSGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelSSGRVertex & operator=(const RSModelSSGRVertex &);
 
   /**
    * Coupling.
    */
   InvEnergy kappa_;
 };
 
 }
 
 #endif /* HERWIG_RSModelSSGRVertex_H */
diff --git a/Models/RSModel/RSModelVVGRVertex.h b/Models/RSModel/RSModelVVGRVertex.h
--- a/Models/RSModel/RSModelVVGRVertex.h
+++ b/Models/RSModel/RSModelVVGRVertex.h
@@ -1,113 +1,108 @@
 // -*- C++ -*-
 //
 // RSModelVVGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelVVGRVertex_H
 #define HERWIG_RSModelVVGRVertex_H
 //
 // This is the declaration of the RSModelVVGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  * 
  *  This is the implementation of the vector-vector-graviton vertex for
  *  the RS model
  * 
  *  @see VVTVertex
  *  @see VertexBase
  */
 class RSModelVVGRVertex: public VVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelVVGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelVVGRVertex> initRSModelVVGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelVVGRVertex & operator=(const RSModelVVGRVertex &);
 
   /**
    * The coupling.
    */
   InvEnergy kappa_;
   
 };
 }
 
 #endif /* HERWIG_RSModelVVGRVertex_H */
diff --git a/Models/RSModel/RSModelWWWGRVertex.h b/Models/RSModel/RSModelWWWGRVertex.h
--- a/Models/RSModel/RSModelWWWGRVertex.h
+++ b/Models/RSModel/RSModelWWWGRVertex.h
@@ -1,137 +1,132 @@
 // -*- C++ -*-
 //
 // RSModelWWWGRVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RSModelWWWGRVertex_H
 #define HERWIG_RSModelWWWGRVertex_H
 //
 // This is the declaration of the RSModelWWWGRVertex class.
 
 #include "ThePEG/Helicity/Vertex/Tensor/VVVTVertex.h"
 #include "RSModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The RSModelWWWGRVertex class is the implementation of the 
  *  triple vector graviton couling in the RS model. 
  *  It inherits from VVVTVertex and implements the setCoupling member.
  *
  *  @see VVVTVertex
  *  @see VertexBase
  */
 class RSModelWWWGRVertex: public VVVTVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   RSModelWWWGRVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the foruth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
 
 protected:
    
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RSModelWWWGRVertex> initRSModelWWWGRVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RSModelWWWGRVertex & operator=(const RSModelWWWGRVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    * The graviton coupling.
    */
   InvEnergy kappa_;
 
   /**
    *  The last value of the coupling/
    */
   Complex _couplast;
 
   /**
    *  The last value of the scale, \f$q^2\f$.
    */
   Energy2 _q2last;
 
   /**
    *  The prefactor for the \f$Z\f$ vertex.
    */
   double _zfact;
   //@}
 };
 }
 
 #endif /* HERWIG_RSModelWWWGRVertex_H */
diff --git a/Models/StandardModel/AlphaEM.h b/Models/StandardModel/AlphaEM.h
--- a/Models/StandardModel/AlphaEM.h
+++ b/Models/StandardModel/AlphaEM.h
@@ -1,156 +1,150 @@
 // -*- C++ -*-
 //
 // AlphaEM.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_AlphaEM_H
 #define HERWIG_AlphaEM_H
 //
 // This is the declaration of the AlphaEM class.
 //
 
 #include "ThePEG/StandardModel/AlphaEMBase.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 
 /**
  * The AlphaEM class is an exact reimplementation of the electromagentic
  * coupling in FORTRAN HERWIG and is mainly intended for testing.
  * It uses that same hadronic parameterisation as in the ThePEG::SimpleEM
  * but differs in the treatment of the top and leptonic contribution.
  *
  * @see \ref AlphaEMInterfaces "The interfaces"
  * defined for AlphaEM.
  */
 class AlphaEM: public AlphaEMBase {
 
 public:
 
   /**
    * The default constructor.
    */
   AlphaEM() : _me(),_mmu(),_mtau(), _mtop() {}
 
   /**
    * The \f$\alpha_{EM}\f$. Return the value of the coupling at a
    * given \a scale using the given standard model object, \a sm.
    */
   virtual double value(Energy2 scale, const StandardModelBase &) const;
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /**
    *  The real part of the photon self-energy
    * @param ratio The ratio of the mass squared of the fermion to the scale squared,
    * \f$m^2/Q^2\f$.
    */
   double realPi(double ratio) const;
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<AlphaEM> initAlphaEM;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   AlphaEM & operator=(const AlphaEM &);
 
 
 private:
 
   /**
    *  Masses of the Standard Model fermions we need for the
    *  self-energies
    */
   //@{
   /**
    *  Electron mass squared
    */
   Energy2 _me;
 
   /**
    *  Muon mass squared
    */
   Energy2 _mmu;
 
   /**
    *  Tau mass squared
    */
   Energy2 _mtau;
 
   /**
    *  Top mass squared
    */
   Energy2 _mtop;
   //@}
 };
 
 }
 
 #endif /* HERWIG_AlphaEM_H */
diff --git a/Models/StandardModel/GenericSVVVertex.h b/Models/StandardModel/GenericSVVVertex.h
--- a/Models/StandardModel/GenericSVVVertex.h
+++ b/Models/StandardModel/GenericSVVVertex.h
@@ -1,132 +1,126 @@
 // -*- C++ -*-
 //
 // GenericSVVVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_GenericSVVVertex_H
 #define HERWIG_GenericSVVVertex_H
 //
 // This is the declaration of the GenericSVVVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/GeneralVVSVertex.h"
 
 
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The <code>GenericSVVVertex</code> class implements the 
  * setCoupling member for the Standard Model effective 
  * vertex Higgs-gluon-gluon. 
  */
 class GenericSVVVertex: public Helicity::GeneralVVSVertex {
   
 public:
 
   /**
    * The default constructor.
    */
   GenericSVVVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param part1 ParticleData pointer to first particle
    *@param part2 ParticleData pointer to first particle
    *@param part3 ParticleData pointer to first particle
    */
   virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
   
   string dopids(string in);
 
 private:
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GenericSVVVertex> initGenericSVVVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GenericSVVVertex & operator=(const GenericSVVVertex &);
 
   /**
    * Storage of couplings
    */
   //@{
 
   
   /**
    * The particle ids 
    */
   vector <int> pids;
 
   /**
    * The particle ids 
    */
   int oas,oaew;
 
 
 };
 
 }
 
 // CLASSDOC OFF
 
 #endif /* HERWIG_GenericSVVVertex_H */
diff --git a/Models/StandardModel/GenericVVVVertex.h b/Models/StandardModel/GenericVVVVertex.h
--- a/Models/StandardModel/GenericVVVVertex.h
+++ b/Models/StandardModel/GenericVVVVertex.h
@@ -1,132 +1,126 @@
 // -*- C++ -*-
 //
 // GenericVVVVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_GenericVVVVertex_H
 #define HERWIG_GenericVVVVertex_H
 //
 // This is the declaration of the GenericSVVVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
 
 
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The <code>GenericVVVVertex</code> class implements the 
  * setCoupling member for the Standard Model effective 
  * vertex EWVector-gluon-gluon. 
  */
 class GenericVVVVertex: public Helicity::VVVVertex {
   
 public:
 
   /**
    * The default constructor.
    */
   GenericVVVVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param part1 ParticleData pointer to first particle
    *@param part2 ParticleData pointer to first particle
    *@param part3 ParticleData pointer to first particle
    */
   virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
   
   string dopids(string in);
 
 private:
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<GenericVVVVertex> initGenericVVVVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   GenericVVVVertex & operator=(const GenericVVVVertex &);
 
   /**
    * Storage of couplings
    */
   //@{
 
   
   /**
    * The particle ids 
    */
   vector <int> pids;
 
   /**
    * The particle ids 
    */
   int oas,oaew;
 
 
 };
 
 }
 
 // CLASSDOC OFF
 
 #endif /* HERWIG_GenericVVVVertex_H */
diff --git a/Models/StandardModel/O2AlphaS.h b/Models/StandardModel/O2AlphaS.h
--- a/Models/StandardModel/O2AlphaS.h
+++ b/Models/StandardModel/O2AlphaS.h
@@ -1,176 +1,170 @@
 // -*- C++ -*-
 //
 // O2AlphaS.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_O2AlphaS_H
 #define HERWIG_O2AlphaS_H
 //
 // This is the declaration of the O2AlphaS class.
 //
 
 #include "ThePEG/StandardModel/AlphaSBase.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The O2AlphaS class is the implementation of the two-loop
  * \f$\alpha_S\f$ in the same way as in FORTRAN HERWIG.
  *
  *  The input value of \f$\Lambda_{\rm QCD}\f$ is in the \f$\bar{MS}\f$
  *  scheme and can either be converted to a Monte Carlo scheme, as in the 
  *  FORTRAN program, or left in the \f$\bar{MS}\f$ scheme to evaluate
  *  the running coupling 
  *
  * @see \ref O2AlphaSInterfaces "The interfaces"
  * defined for O2AlphaS.
  */
 class O2AlphaS: public AlphaSBase {
 
 public:
 
   /**
    * The default constructor.
    */
   O2AlphaS() : _lambdaQCD(180.*MeV), _bcoeff(6,0.0), _ccoeff(6,0.0),
 	       _lambdas(7), _threshold(6), _match(6,0.0), _copt(0) {}
 
   /** @name Virtual functions to override those in the base class */
   //@{
   /**
    * The \f$\alpha_S\f$. Return the QCD coupling for a given \a scale
    * using the given standard model object \a sm.
    */
   virtual double value(Energy2 scale, const StandardModelBase & sm) const;
 
   /**
    * Return the flavour thresholds used. The returned vector contains
    * (in position <code>i</code>) the scales when the active number of
    * flavours changes from <code>i</code> to <code>i+1</code>.
    */
   virtual vector<Energy2> flavourThresholds() const;
 
   /**
    * Return the \f$\Lambda_{QCD}\f$ used for different numbers of
    * active flavours.
    */
   virtual vector<Energy> LambdaQCDs() const;
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<O2AlphaS> initO2AlphaS;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   O2AlphaS & operator=(const O2AlphaS &);
 
 private:
 
   /**
    *  The value of \f$\Lambda_{\rm QCD}\f$ 5-flavours
    *  in the \f$\bar{\rm MS}\f$ scheme
    */
   Energy _lambdaQCD;
 
   /**
    *  The values of the leading-order \f$\beta\f$-function coefficients
    */
   vector<double> _bcoeff;
 
   /**
    *  The values of the next-to-leading-order \f$\beta\f$-function coefficients
    */
   vector<double> _ccoeff;
 
   /**
    *  The values of \f$\Lambda_{\rm QCD}\f$ for the diffferent number of flavours
    */
   vector<Energy> _lambdas;
 
   /**
    *  The flavour thresholds
    */
   vector<Energy> _threshold;
   
   /**
    *  The constants for matching
    */
   vector<double> _match;
   /**
    *  Option for the coupling
    */
   unsigned int _copt;
 };
 
 }
 
 #endif /* HERWIG_O2AlphaS_H */
diff --git a/Models/StandardModel/RunningMass.h b/Models/StandardModel/RunningMass.h
--- a/Models/StandardModel/RunningMass.h
+++ b/Models/StandardModel/RunningMass.h
@@ -1,155 +1,150 @@
 // -*- C++ -*-
 //
 // RunningMass.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RunningMass_H
 #define HERWIG_RunningMass_H
 //
 // This is the declaration of the RunningMass class.
 
 #include "RunningMassBase.h"
 #include "StandardModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Models
  * 
  *  Implementation of the 1 or 2 loop QCD running mass.
  *
  *  @see RunningMassBase
  */
 class RunningMass: public RunningMassBase {
   
 public:
   
   /**
    * Default constructor.
    */
   RunningMass()  : _theQCDOrder(1), _theMaxFlav(6), _lightOption(1), _heavyOption(0) {}
 
 public:
   
   /**
    * Return the running mass for a given scale \f$q^2\f$ and particle type.
    * @param q2 The scale \f$q^2\f$.
    * @param part The ParticleData pointer
    */
   virtual Energy value(Energy2 q2,tcPDPtr part) const;
   
   /**
    * Return the masses used.
    */
   virtual vector<Energy> mass() const;
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
     
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<RunningMass> initRunningMass;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RunningMass & operator=(const RunningMass &);
   
 private:
 
   /**
    * Order in alphaS.
    */
   unsigned int _theQCDOrder;
 
   /**
    * The maximum number of flavours.
    */
   unsigned int _theMaxFlav;
 
   /**
    * The power for the running mass calculation.
    */
   vector<double> _thePower;
 
   /**
    * The coefficients for the running mass calculation.
    */
   vector<double> _theCoefficient;
 
   /**
    * Pointer to the StandardModel object.
    */
   tcSMPtr _theStandardModel;
 
   /**
    *  Option to use pole masses for u,d,s
    */
   unsigned int _lightOption;
 
   /**
    *  Option to use pole masses for c,b
    */
   unsigned int _heavyOption;
 
 };
 
 }
 
 
 #endif /* HERWIG_RunningMass_H */
diff --git a/Models/StandardModel/RunningMassBase.h b/Models/StandardModel/RunningMassBase.h
--- a/Models/StandardModel/RunningMassBase.h
+++ b/Models/StandardModel/RunningMassBase.h
@@ -1,104 +1,99 @@
 // -*- C++ -*-
 //
 // RunningMassBase.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_RunningMassBase_H
 #define HERWIG_RunningMassBase_H
 //
 // This is the declaration of the RunningMassBase class.
 
 #include "ThePEG/Interface/Interfaced.h"
 #include "ThePEG/StandardModel/StandardModelBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Models
  * 
  *  Base class for running mass calculations.
  */
 class RunningMassBase: public Interfaced {
   
 public:
   
   /**
    * Return the running mass for a given scale \f$q^2\f$ and particle type.
    * @param q2 The scale \f$q^2\f$.
    * @param part The ParticleData pointer
    */
   virtual Energy value(Energy2 q2,tcPDPtr part) const = 0;
  
   /**
    * Return the masses used.
    */
   virtual vector<Energy> mass() const = 0;
 
   /**
    * Return the \f$i\f$ th element of the mass array.
    * @param i The element to return
    */
   Energy massElement(unsigned int i) const {return _theMass[i];}
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
   
   /**
-   * Describe an abstract base class with persistent data.
-   */
-  static AbstractClassDescription<RunningMassBase> initRunningMassBase;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   RunningMassBase & operator=(const RunningMassBase &);
   
 private:
   
   /**
    * Flavour thresholds and the masses, set at initialization.
    */
   vector<Energy> _theMass;
 
 };
 
 }
 
 #endif /* HERWIG_RunningMassBase_H */
diff --git a/Models/StandardModel/SMFFGVertex.h b/Models/StandardModel/SMFFGVertex.h
--- a/Models/StandardModel/SMFFGVertex.h
+++ b/Models/StandardModel/SMFFGVertex.h
@@ -1,113 +1,108 @@
 // -*- C++ -*-
 //
 // SMFFGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMFFGVertex_H
 #define HERWIG_SMFFGVertex_H
 //
 // This is the declaration of the SMFFGVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "ThePEG/StandardModel/StandardModelBase.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  * 
  *  This is the implementation of the Standard Model quark-antiquark gluon vertex.
  * 
  * @see FFVVertex
  * @see VertexBase
  */
 class SMFFGVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   SMFFGVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<SMFFGVertex> initSMFFGVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMFFGVertex & operator=(const SMFFGVertex &);
   
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the strong coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
   //@}
 };   
 }
 
 
 #endif /* HERWIG_SMFFGVertex_H */
diff --git a/Models/StandardModel/SMFFHVertex.h b/Models/StandardModel/SMFFHVertex.h
--- a/Models/StandardModel/SMFFHVertex.h
+++ b/Models/StandardModel/SMFFHVertex.h
@@ -1,154 +1,149 @@
 // -*- C++ -*-
 //
 // SMFFHVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMFFHVertex_H
 #define HERWIG_SMFFHVertex_H
 //
 // This is the declaration of the SMFFHVertex class.
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFSVertex
  *  @see VertexBase
  */
 class SMFFHVertex: public FFSVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   SMFFHVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<SMFFHVertex> initSMFFHVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMFFHVertex & operator=(const SMFFHVertex &);
 
 private:
 
   /**
    * Pointer to the SM object.
    */
   tcHwSMPtr _theSM;
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  Last evaluation of the coupling
    */
   complex<InvEnergy> _couplast;
 
   /**
    *  The PDG code of the last fermion the coupling was evaluated for.
    */
   int _idlast;
 
   /**
    *  The last \f$q^2\f$ the coupling was evaluated at.
    */
   Energy2 _q2last;
 
   /**
    * The mass of the last fermion for which the coupling was evaluated.
    */
   Energy _masslast;
 
   /**
    *  The mass of the \f$W\f$ boson.
    */
   Energy _mw;
 
   /**
    * A definite fermion flavour to couple to. All other flavours are ignored,
    * if this is different from zero.
    */
   int _fermion;
   //@}
 };  
 
 }
 
 #endif /* HERWIG_SMFFHVertex_H */
diff --git a/Models/StandardModel/SMGGGGVertex.h b/Models/StandardModel/SMGGGGVertex.h
--- a/Models/StandardModel/SMGGGGVertex.h
+++ b/Models/StandardModel/SMGGGGVertex.h
@@ -1,113 +1,108 @@
 // -*- C++ -*-
 //
 // SMGGGGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMGGGGVertex_H
 #define HERWIG_SMGGGGVertex_H
 //
 // This is the declaration of the SMGGGGVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Vector/VVVVVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The SMGGGGVertex class is the implementation of the 
  *  Standard Model quartic gluon vertex. It inherits from 
  *  VVVVVertex and implements the setCoupling member.
  *
  *  @see VVVVVertex
  *  @see VertexBase
  */
 class SMGGGGVertex: public VVVVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   SMGGGGVertex();
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3,tcPDPtr part4);
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<SMGGGGVertex> initSMGGGGVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMGGGGVertex & operator=(const SMGGGGVertex &);
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the strong coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
   //@}
 };
 }
 
 #endif /* HERWIG_SMGGGGVertex_H */
diff --git a/Models/StandardModel/SMGGGVertex.h b/Models/StandardModel/SMGGGVertex.h
--- a/Models/StandardModel/SMGGGVertex.h
+++ b/Models/StandardModel/SMGGGVertex.h
@@ -1,109 +1,104 @@
 // -*- C++ -*-
 //
 // SMGGGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMGGGVertex_H
 #define HERWIG_SMGGGVertex_H
 //
 // This is the declaration of the SMGGGVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
 #include "ThePEG/StandardModel/StandardModelBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::Direction;
 
 /** \ingroup Helicity
  *
  *  Implementation of the SM triple gluon vertex.
  *
  *  @see VVVVertex
  *  @see VertexBase
  */
 class SMGGGVertex : public Helicity::VVVVertex {
 
 public:
 
   /**
    * Default constructor.
    */
   SMGGGVertex();
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<SMGGGVertex> initSMGGGVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMGGGVertex & operator=(const SMGGGVertex &);
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the strong coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
   //@}
 };
 }
 
 #endif /* HERWIG_SMGGGVertex_H */
diff --git a/Models/StandardModel/SMHGGVertex.h b/Models/StandardModel/SMHGGVertex.h
--- a/Models/StandardModel/SMHGGVertex.h
+++ b/Models/StandardModel/SMHGGVertex.h
@@ -1,169 +1,163 @@
 // -*- C++ -*-
 //
 // SMHGGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMHGGVertex_H
 #define HERWIG_SMHGGVertex_H
 //
 // This is the declaration of the SMHGGVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The <code>SMHGGVertex</code> class implements the 
  * setCoupling member for the Standard Model effective 
  * vertex Higgs-gluon-gluon. 
  */
 class SMHGGVertex: public VVSLoopVertex {
   
 public:
 
   /**
    * The default constructor.
    */
   SMHGGVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param part1 ParticleData pointer to first particle
    *@param part2 ParticleData pointer to first particle
    *@param part3 ParticleData pointer to first particle
    */
   virtual void setCoupling (Energy2 q2, tcPDPtr part1, tcPDPtr part2, tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SMHGGVertex> initSMHGGVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SMHGGVertex & operator=(const SMHGGVertex &);
 
   /**
    * Storage of couplings
    */
   //@{
   /**
    * Last value of the coupling calculated
    */
   Complex _couplast;
 
   /**
    * The scale \f$q^2\f$ at which coupling was last evaluated
    */
   Energy2 _q2last;
   //@}
 
   /**
    * Pointer to Standard Model object
    */
   tcHwSMPtr _theSM;
 
   /**
    * Mass of W-boson for higgs coupling
    */
   Energy _mw;
 
   /**
    * define quark mass scheme (fixed/running)
    */
   unsigned int massopt;
 
   /**
    * The minimum flavour number in quark loops
    */
   int _minloop;
   
   /**
    * The maximum flavour number in quark loops
    */
   int _maxloop;
 
   /**
    * Loop calculations: A1 for spin-1/2 particles (see details in ``Higgs Hunter's Guide'')
    */
   Complex Af(double labmda) const;
 
   /**
    * Loop calculations: W2 function (see details in NPB297,221)
    */
   Complex W2(double lambda) const;
 
   /**
    * Switch between two representations of coefficients (_a00,_a11,_a12,_a21,_a22,_aEp):
    * suitable for the simplified H-g-g and H-gamma-gamma vertices and 
    * suitable for the Passarino-Veltman tensor reduction scheme
    */
   unsigned int _CoefRepresentation;
 
 };
 
 }
 
 // CLASSDOC OFF
 
 #endif /* HERWIG_SMHGGVertex_H */
diff --git a/Models/StandardModel/SMHHHVertex.h b/Models/StandardModel/SMHHHVertex.h
--- a/Models/StandardModel/SMHHHVertex.h
+++ b/Models/StandardModel/SMHHHVertex.h
@@ -1,129 +1,123 @@
 // -*- C++ -*-
 #ifndef HERWIG_SMHHHVertex_H
 #define HERWIG_SMHHHVertex_H
 //
 // This is the declaration of the SMHHHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * Here is the documentation of the SMHHHVertex class.
  *
  * @see \ref SMHHHVertexInterfaces "The interfaces"
  * defined for SMHHHVertex.
  */
 class SMHHHVertex: public SSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SMHHHVertex();
 
   /**
    * Calculate the couplings.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SMHHHVertex> initSMHHHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SMHHHVertex & operator=(const SMHHHVertex &);
 
 private:
 
   /**
    *  ratio of masses
    */
   Energy ratio_;
 
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex couplast_;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 q2last_;
 
 };
 
 }
 
 #endif /* HERWIG_SMHHHVertex_H */
diff --git a/Models/StandardModel/SMHPPVertex.h b/Models/StandardModel/SMHPPVertex.h
--- a/Models/StandardModel/SMHPPVertex.h
+++ b/Models/StandardModel/SMHPPVertex.h
@@ -1,179 +1,173 @@
 // -*- C++ -*-
 //
 // SMHPPVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMHPPVertex_H
 #define HERWIG_SMHPPVertex_H
 //
 // This is the declaration of the SMHPPVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The <code>SMHGGVertex</code> class implements the 
  * setCoupling member for the Standard Model effective 
  * vertex Higgs-gamma-gamma. 
  */
 class SMHPPVertex: public VVSLoopVertex {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   SMHPPVertex();
   //@}
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param part1 ParticleData pointer to first particle
    *@param part2 ParticleData pointer to second particle
    *@param part3 ParticleData pointer to third particle
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SMHPPVertex> initSMHPPVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SMHPPVertex & operator=(const SMHPPVertex &);
 
 private:
   
   /**
    * Loop calculations: A1 for spin-1/2 particles (see details in ``Higgs Hunter's Guide'')
    */
   Complex Af(const double lambda) const;
 
   /**
    * Loop calculations: A1 for spin-1 particles (see details in ``Higgs Hunter's Guide'')
    */
   Complex Aw(const double lambda) const;
 
   /**
    * Loop calculations: W2 function (see details in NPB297,221)
    */
   Complex W2(double lambda) const;
 
 private:
 
   /**
    *Storage of couplings
    */
   //@{
   /**
    * Last value of the coupling calculated
    */
   Complex _couplast;
 
   /**
    * The scale \f$q^2\f$ at which coupling was last evaluated
    */
   Energy2 _q2last;
   //@}
 
   /**
    * Pointer to Standard Model object
    */
   tcHwSMPtr _theSM;
 
   /**
    * The mass of the \f$W\f$ boson.
    */
   Energy _mw;
 
   /**
    * define quark mass scheme (fixed/running)
    */
   unsigned int _massopt;
 
   /**
    * The minimum flavour number in quark loops
    */
   int _minloop;
 
   /**
    * The maximum flavour number in quark loops
    */
   int _maxloop;
 
   /**
    * Switch between two representations of coefficients (_a00,_a11,_a12,_a21,_a22,_aEp):
    * suitable for the simplified H-g-g and H-gamma-gamma vertices and 
    * suitable for the Passarino-Veltman tensor reduction scheme
    */
   unsigned int _CoefRepresentation;
 
 };
 }
 
 
 #endif /* HERWIG_SMHPPVertex_H */
diff --git a/Models/StandardModel/SMWWHHVertex.h b/Models/StandardModel/SMWWHHVertex.h
--- a/Models/StandardModel/SMWWHHVertex.h
+++ b/Models/StandardModel/SMWWHHVertex.h
@@ -1,128 +1,122 @@
 // -*- C++ -*-
 #ifndef HERWIG_SMWWHHVertex_H
 #define HERWIG_SMWWHHVertex_H
 //
 // This is the declaration of the SMWWHHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the SMWWHHVertex class.
  *
  * @see \ref SMWWHHVertexInterfaces "The interfaces"
  * defined for SMWWHHVertex.
  */
 class SMWWHHVertex: public Helicity::VVSSVertex {
 
 public:
   
   /**
    * The default constructor.
    */
   SMWWHHVertex();
   
   /**
    * Calculate the couplings.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the fourth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SMWWHHVertex> initSMWWHHVertex;
-  
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SMWWHHVertex & operator=(const SMWWHHVertex &);
   
 private:
   
   /**
    *  ratio of masses
    */
   double ratio_;
   
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex couplast_;
   
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 q2last_;
   
 };
 
 }
 
 #endif /* HERWIG_SMWWHHVertex_H */
diff --git a/Models/StandardModel/SMWWHVertex.h b/Models/StandardModel/SMWWHVertex.h
--- a/Models/StandardModel/SMWWHVertex.h
+++ b/Models/StandardModel/SMWWHVertex.h
@@ -1,140 +1,135 @@
 // -*- C++ -*-
 //
 // SMWWHVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMWWHVertex_H
 #define HERWIG_SMWWHVertex_H
 //
 // This is the declaration of the SMWWHVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
 #include "ThePEG/PDT/EnumParticles.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  The SMWWHVertex is the implementation of the
  *  coupling of two electroweak gauge bosons to the Higgs in the Standard
  *  Model. It inherits from VVSVertex and implements the setCoupling member.
  *
  *  @see VVSVertex
  *  @see VertexBase
  */
 class SMWWHVertex: public VVSVertex {
   
 public:
 
   /**
    * Default constructor.
    */
   SMWWHVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<SMWWHVertex> initSMWWHVertex;
-    /**
-   * Private and non-existent assignment operator.
    */
   SMWWHVertex & operator=(const SMWWHVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
 
   /**
    *  The mass of the \f$W\f$ boson.
    */
   Energy _mw;
 
   /**
    *  The factor for the \f$Z\f$ vertex.
    */
   double _zfact;
   //@}
 };
 }
 
 #endif /* HERWIG_SMWWHVertex_H */
diff --git a/Models/StandardModel/SMWWWVertex.h b/Models/StandardModel/SMWWWVertex.h
--- a/Models/StandardModel/SMWWWVertex.h
+++ b/Models/StandardModel/SMWWWVertex.h
@@ -1,138 +1,133 @@
 // -*- C++ -*-
 //
 // SMWWWVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMWWWVertex_H
 #define HERWIG_SMWWWVertex_H
 //
 // This is the declaration of the SMWWWVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
 #include "ThePEG/StandardModel/StandardModelBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::Direction;
 
 /** \ingroup Helicity
  *
  * This is the implementation fo the vertex for the coupling of three
  * standard Model electroweak bosons.
  *
  * @see VVVVertex
  * @see VertexBase
  */
 class SMWWWVertex: public Helicity::VVVVertex {
   
 public:
   
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * Default constructor.
    */
   SMWWWVertex();
   //@}  
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<SMWWWVertex> initSMWWWVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMWWWVertex & operator=(const SMWWWVertex &);
   
 private:
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The factor for the \f$Z\f$ vertex.
    */
   double _zfact;
 
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
   //@}
 
 }; 
 }
 
 #endif /* HERWIG_SMWWWVertex_H */
diff --git a/Models/StandardModel/SMWWWWVertex.h b/Models/StandardModel/SMWWWWVertex.h
--- a/Models/StandardModel/SMWWWWVertex.h
+++ b/Models/StandardModel/SMWWWWVertex.h
@@ -1,170 +1,165 @@
 // -*- C++ -*-
 //
 // SMWWWWVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SMWWWWVertex_H
 #define HERWIG_SMWWWWVertex_H
 //
 // This is the declaration of the SMWWWWVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Vector/VVVVVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
     
 /** \ingroup Helicity
  *
  *  The SMWWWWVertex class is the implementation of the
  *  coupling of four electroweak gauge bosons in the SM. 
  *  It inherits from VVVVVertex nad implements the setCoupling member.
  *
  *  @see VVVVVVertex
  *  @see VertexBase
  */
 class SMWWWWVertex: public VVVVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   SMWWWWVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the fourth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3,
 			   tcPDPtr part4);
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<SMWWWWVertex> initSMWWWWVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   SMWWWWVertex & operator=(const SMWWWWVertex &);
 
   /**
    *  Intermediate particles
    */
   //@{
   /**
    * The ParticleData pointer for the photon
    */
   tcPDPtr _gamma;
 
   /**
    * The ParticleData pointer for the \f$Z^0\f$ boson.
    */
   tcPDPtr _Z0;
 
   /**
    * The ParticleData pointer for the \f$W^+\f$ boson.
    */
   tcPDPtr _wplus;
 
   /**
    * The ParticleData pointer for the \f$W^-\f$ boson.
    */
   tcPDPtr _wminus;
   //@}
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
 
   /**
    *  The factors for the different bosons.
    */
   vector<double> _vfact;
 
   /**
    *  \f$\sin^2\theta_W\f$.
    */
   double _sw2;
 
   /**
    *  \f$\cos^2\theta_W\f$.
    */
   double _cw2;
   //@}
 };
  
 }
 
 #endif /* HERWIG_SMWWWWVertex_H */
diff --git a/Models/StandardModel/StandardCKM.h b/Models/StandardModel/StandardCKM.h
--- a/Models/StandardModel/StandardCKM.h
+++ b/Models/StandardModel/StandardCKM.h
@@ -1,132 +1,127 @@
 // -*- C++ -*-
 //
 // StandardCKM.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_StandardCKM_H
 #define HERWIG_StandardCKM_H
 //
 // This is the declaration of the StandardCKM class.
 //
 #include <ThePEG/Config/Complex.h>
 #include <ThePEG/StandardModel/CKMBase.h>
 // #include "StandardCKM.fh"
 // #include "StandardCKM.xh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /** \ingroup Models
  * 
  *  StandardCKM inherits from CKMBase and implements the standard 
  *  parameterization of the CKM matrix in terms of three angles and 
  *  a phase. It provides access to the unsquared matrix from helicity 
  *  amplitude calculations.
  *
  * @see CKMBase
  */
 class StandardCKM: public CKMBase {
 
 public:
 
   /**
    * Default constructor.
    */
   StandardCKM() : theta12(0.2262), theta13(0.0037), theta23(0.0413), delta(1.05)
   {}
 
   /**
    * Return the matrix of squared CKM matrix elements. The returned
    * matrix should be for \a nf families.
    */
   virtual vector< vector<double> >  getMatrix(unsigned int nf) const;
 
   /**
    * Return the matrix of CKM matrix elements. The returned
    * matrix should be for \a nf families.
    */
   virtual vector< vector<Complex> > getUnsquaredMatrix(unsigned int nf) const;
   
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
   
 private:
   
   /**
    * The \f$\theta_{12}\f$ angle.
    */
   double theta12;
 
   /**
    * The \f$\theta_{13}\f$ angle.
    */
   double theta13;
 
   /**
    * The \f$\theta_{23}\f$ angle.
    */
   double theta23;
 
   /**
    * The \f$\delta\f$ angle describing the phase.
    */
   double delta;
   
 private:
 
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<StandardCKM> initStandardCKM;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   StandardCKM & operator=(const StandardCKM &);
   
 };
 
 }
 
 #endif /* HERWIG_StandardCKM_H */
diff --git a/Models/StandardModel/StandardModel.h b/Models/StandardModel/StandardModel.h
--- a/Models/StandardModel/StandardModel.h
+++ b/Models/StandardModel/StandardModel.h
@@ -1,463 +1,458 @@
 // -*- C++ -*-
 //
 // StandardModel.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_StandardModel_H
 #define HERWIG_StandardModel_H
 //
 // This is the declaration of the StandardModel class.
 
 #include "ThePEG/StandardModel/StandardModelBase.h"
 #include "Herwig/Models/StandardModel/RunningMassBase.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h"
 #include "Herwig/Models/General/ModelGenerator.fh"
 #include "StandardModel.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup Models
  *  
  *  This is the Herwig StandardModel class which inherits from ThePEG 
  *  Standard Model class and implements additional Standard Model couplings, 
  *  access to vertices for helicity amplitude calculations etc.
  *
  *  @see StandardModelBase
  */
 class StandardModel: public StandardModelBase {
   
   /**
    * Some typedefs for the pointers.
    */
   //@{
 
   /**
    * Pointer to the RunningMassBase object 
    */
   typedef Ptr<Herwig::RunningMassBase>::pointer runPtr;
 
   /**
    * Transient pointer to the RunningMassBase object 
    */
   typedef Ptr<Herwig::RunningMassBase>::transient_pointer trunPtr;
   //@}
   
 public:
   
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * Default constructor
    */
   StandardModel();
   
   /**
    * Copy-constructor.
    */
   StandardModel(const StandardModel &);
   
   /**
    * Destructor
    */
   virtual ~StandardModel();
   //@}
   
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   /**
    * Should the default vertices be considered for generic diagrams
    */
   virtual bool registerDefaultVertices() const { return true; }
 
 public:
   
   /**
    * The left and right couplings of the Z^0 including sin and cos theta_W.  
    */
   //@{
   /**
    *  The left-handed coupling of a neutrino
    */
   double lnu() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()+anu());
   }
 
   /**
    *  The left-handed coupling of a charged lepton.
    */
   double le() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()+ae());
   }
 
   /**
    *  The left-handed coupling of an up type quark.
    */
   double lu() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()+au());
   }
 
   /**
    *  The left-handed coupling of a down type quark.
    */
   double ld() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()+ad());
   }
 
   /**
    *  The right-handed coupling of a neutrino
    */
   double rnu() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vnu()-anu());
   }
 
   /**
    *  The right-handed coupling of a charged lepton.
    */
   double re() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(ve()-ae());
   }
 
   /**
    *  The right-handed coupling of an up type quark.
    */
   double ru() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vu()-au());
   }
 
   /**
    *  The right-handed coupling of a down type quark.
    */
   double rd() const {
     return 0.25/sqrt(sin2ThetaW()*(1.-sin2ThetaW()))*(vd()-ad());
   }
   //@}
 
   /**
    * Pointers to the objects handling the vertices.
    */
   //@{
   /**
    * Pointer to the fermion-fermion-Z vertex
    */
   virtual tAbstractFFVVertexPtr  vertexFFZ() const {
     return FFZVertex_;
   }
 
   /**
    * Pointer to the fermion-fermion-photon vertex
    */
   virtual tAbstractFFVVertexPtr  vertexFFP() const {
     return FFPVertex_;
   }
 
   /**
    * Pointer to the fermion-fermion-gluon vertex
    */
   virtual tAbstractFFVVertexPtr  vertexFFG() const {
     return FFGVertex_;
   }
   
   /**
    * Pointer to the fermion-fermion-W vertex
    */
   virtual tAbstractFFVVertexPtr  vertexFFW() const {
     return FFWVertex_;
   }
 
   /**
    * Pointer to the fermion-fermion-Higgs vertex
    */
   virtual tAbstractFFSVertexPtr  vertexFFH() const {
     return FFHVertex_;
   }
 
   /**
    * Pointer to the triple gluon vertex
    */
   virtual tAbstractVVVVertexPtr  vertexGGG() const {
     return GGGVertex_;
   }
   
   /**
    * Pointer to the triple electroweak gauge boson vertex.
    */
   virtual tAbstractVVVVertexPtr  vertexWWW() const {
     return WWWVertex_;
   }
 
   /**
    * Pointer to the two electroweak gauge boson Higgs vertex.
    */
   virtual tAbstractVVSVertexPtr  vertexWWH() const {
     return WWHVertex_;
   }
 
   /**
    * Pointer to the quartic electroweak gauge boson vertex.
    */
   virtual tAbstractVVVVVertexPtr vertexWWWW() const {
     return WWWWVertex_;
   }
 
   /**
    * Pointer to the quartic gluon vertex
    */
   virtual tAbstractVVVVVertexPtr vertexGGGG() const {
     return GGGGVertex_;
   }
   
   /**
    * Pointer to the quartic gluon vertex
    */
   virtual tAbstractVVSVertexPtr vertexHGG() const {
     return HGGVertex_;
   }
 
   /**
    * Pointer to the quartic gluon vertex
    */
   virtual tAbstractVVSVertexPtr vertexHPP() const {
     return HPPVertex_;
   }
 
   /**
    * Pointer to the triple Higgs vertex
    */
   virtual tAbstractSSSVertexPtr vertexHHH() const {
     return HHHVertex_;
   }
 
   /**
    * Pointer to the WWHH vertex
    */
   virtual tAbstractVVSSVertexPtr vertexWWHH() const {
     return WWHHVertex_;
   }
 
   /**
    *  Total number of vertices
    */
   unsigned int numberOfVertices() const {
     return vertexList_.size() + extraVertices_.size();
   }
 
   /**
    * Access to a vertex from the list
    */
   tVertexBasePtr vertex(size_t ix) const {
     const size_t S = vertexList_.size();
     if ( ix < S )
       return vertexList_[ix];
     else
       return extraVertices_[ix - S];
   }
   //@}  
 
   /**
    * Return the running mass for a given scale \f$q^2\f$ and particle type.
    * @param scale The scale \f$q^2\f$.
    * @param part The ParticleData object for the particle
    */
   Energy mass(Energy2 scale,tcPDPtr part) const {
     return runningMass_->value(scale,part);
   }
   
   /**
    * Return a pointer to the object handling the running mass.
    */
   trunPtr massPtr() const {
     return runningMass_;
   }
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
   
 protected:
 
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /**
    *  Add a vertex to the list
    */
   void addVertex(VertexBasePtr in) {
     if ( in )
       vertexList_.push_back(in);
   }
 
   /**
    *  Helper function to reset the mass of a ParticleData object
    *  in BSM models.
    */
   void resetMass(long id, Energy mass,tPDPtr particle=tPDPtr());
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<StandardModel> initStandardModel;
-  
-  /** 
    * Private and non-existent assignment operator.
    */
   StandardModel & operator=(const StandardModel &);
   
 private:
 
   /**
    * Pointers to the vertices for Standard Model helicity amplitude
    * calculations.
    */
   //@{
   /**
    * Pointer to the fermion-fermion-Z vertex
    */
   AbstractFFVVertexPtr FFZVertex_;
 
   /**
    * Pointer to the fermion-fermion-photon vertex
    */
   AbstractFFVVertexPtr FFPVertex_;
 
   /**
    * Pointer to the fermion-fermion-gluon vertex
    */
   AbstractFFVVertexPtr FFGVertex_;
 
   /**
    * Pointer to the fermion-fermion-W vertex
    */
   AbstractFFVVertexPtr FFWVertex_;
 
   /**
    * Pointer to the fermion-fermion-Higgs vertex
    */
   AbstractFFSVertexPtr FFHVertex_;
 
   /**
    * Pointer to the two electroweak gauge boson Higgs vertex.
    */
   AbstractVVSVertexPtr WWHVertex_;
 
   /**
    * Pointer to the triple gluon vertex
    */
   AbstractVVVVertexPtr GGGVertex_;
 
   /**
    * Pointer to the triple electroweak gauge boson vertex.
    */
   AbstractVVVVertexPtr WWWVertex_;
 
   /**
    * Pointer to the quartic gluon vertex
    */
   AbstractVVVVVertexPtr GGGGVertex_;
 
   /**
    * Pointer to the quartic electroweak gauge boson vertex.
    */
   AbstractVVVVVertexPtr WWWWVertex_;
 
   /**
    * Pointer to higgs-gluon-gluon vertex
    */
   AbstractVVSVertexPtr HGGVertex_;
 
   /**
    * Pointer to higgs-gamma-gamma vertex
    */
   AbstractVVSVertexPtr HPPVertex_; 
 
   /**
    * Pointer to triple Higgs vertex
    */
   AbstractSSSVertexPtr HHHVertex_; 
 
   /**
    * Pointer to  WWHH vertex
    */
   AbstractVVSSVertexPtr WWHHVertex_; 
   
   /**
    *  Full list of vertices as a vector to allow searching
    */
   vector<VertexBasePtr> vertexList_;
 
   /**
    * Additional vertices to be considered in automatic ME construction
    */
   vector<VertexBasePtr> extraVertices_;
   //@}
 
   /**
    * The running mass.
    */
   runPtr runningMass_;
 
   /**
    * Pointer to ModelGenerator Class
    */
   ModelGeneratorPtr modelGenerator_;
 
 };
 
 }
 
 #endif /* HERWIG_StandardModel_H */
diff --git a/Models/Susy/NMSSM/NMSSM.h b/Models/Susy/NMSSM/NMSSM.h
--- a/Models/Susy/NMSSM/NMSSM.h
+++ b/Models/Susy/NMSSM/NMSSM.h
@@ -1,202 +1,196 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSM_H
 #define HERWIG_NMSSM_H
 //
 // This is the declaration of the NMSSM class.
 //
 
 #include "Herwig/Models/Susy/MSSM.h"
 #include "NMSSM.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the NMSSM class.
  *
  * @see \ref NMSSMInterfaces "The interfaces"
  * defined for NMSSM.
  */
 class NMSSM: public MSSM {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSM() : _lambda(0.), _kappa(0.), _theAlambda(0.*MeV), 
 	    _theAkappa(0.*MeV), _lambdaVEV(0.*MeV),
 		_MQ3(0.*MeV), _MU2(0.*MeV) 
   {}
 
 public:
 
   /**
    *  The NMSSM couplings
    */
   //@{
   /**
    *  Superpotential \f$\lambda\f$ term
    */
   double lambda() const {
     return _lambda;
   }
 
   /**
    *  Superpotential \f$\kappa\f$ coupling
    */
   double kappa() const {
     return _kappa;
   }
 
   /**
    *  The V.E.V of the extra singlet field scaled
    * by \f$ lambda\f$, 
    */
   Energy lambdaVEV() const {
     return _lambdaVEV;
   }
   
   /**
    * Soft trilinear \f$SH_2 H_1\f$ coupling
    */
   Energy trilinearLambda() const {
     return _theAlambda;
   }
 
   /**
    * Soft cubic \f$S\f$ coupling
    */
   Energy trilinearKappa() const {
     return _theAkappa;
   }
       /**
    *  left 3rd generation scalar quark mass
    */
   Energy MQ3() const {
     return _MQ3;
   }
 
   /**
    * right scalar top mass
    */
   Energy MU2() const {
     return _MU2;
   }
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
 protected:
 
   /**
    *  Extract the parameters from the input blocks
    */
   virtual void extractParameters(bool checkModel=true);
 
   /**
    *  Create the mixing matrices for the model
    */
   virtual void createMixingMatrices();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSM> initNMSSM;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSM & operator=(const NMSSM &);
 
 private:
 
   /**
    *  The NMSSM couplings
    */
   //@{
   /**
    *  Superpotential \f$\lambda\f$ term
    */
   double _lambda;
 
   /**
    *  Superpotential \f$\kappa\f$ coupling
    */
   double _kappa;
 
   /**
    * Soft trilinear \f$SH_2 H_1\f$ coupling
    */
   Energy _theAlambda;
 
   /**
    * Soft cubic \f$S\f$ coupling
    */
   Energy _theAkappa;
 
   /**
    *  The V.E.V of the extra singlet field scaled
    * by \f$ lambda\f$
    */
   Energy _lambdaVEV;
       /**
    * left 3rd generation scalar quark mass
    */
   Energy _MQ3;
 
   /**
    *  right scalar top mass
    */
   Energy _MU2;
   //@}
 };
 
 }
 
 #endif /* HERWIG_NMSSM_H */
diff --git a/Models/Susy/NMSSM/NMSSMFFHVertex.h b/Models/Susy/NMSSM/NMSSMFFHVertex.h
--- a/Models/Susy/NMSSM/NMSSMFFHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMFFHVertex.h
@@ -1,173 +1,167 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMFFHVertex_H
 #define HERWIG_NMSSMFFHVertex_H
 //
 // This is the declaration of the NMSSMFFHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  * The NMSSMFFHVertex class implements the interactions of the NMSSM Higgs bosons
  * with the  Standard Model fermions.
  *
  * @see \ref NMSSMFFHVertexInterfaces "The interfaces"
  * defined for NMSSMFFHVertex.
  */
 class NMSSMFFHVertex: public FFSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMFFHVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMFFHVertex> initNMSSMFFHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMFFHVertex & operator=(const NMSSMFFHVertex &);
 
 private:
 
   /**
    *  Mixing matrix for the CP-even Higgs bosons
    */
   MixingMatrixPtr _mixS;
 
   /**
    *  Mixing matrix for the CP-odd  Higgs bosons
    */
   MixingMatrixPtr _mixP;
 
   /**
    * Pointer to the SM object.
    */
   tcHwSMPtr _theSM;
 
   /**
    *  Mass of the \f$W\f$ boson
    */
   Energy _mw;
 
   /**
    *  \f$\sin\beta\f$
    */
   double _sinb;
 
   /**
    *  \f$\cos\beta\f$
    */
   double _cosb;
 
   /**
    *  \f$\tan\beta\f$
    */
   double _tanb;
 
   /**
    *  \f$\sin\theta_W\f$
    */
   double _sw;
 
   /**
    *  The PDG code of the last fermion the coupling was evaluated for.
    */
   pair<int,int> _idlast;
 
   /**
    *  The last \f$q^2\f$ the coupling was evaluated at.
    */
   Energy2 _q2last;
 
   /**
    * The mass of the last fermion for which the coupling was evaluated.
    */
   pair<Energy,Energy> _masslast;
 
   /**
    *  The last value of the coupling
    */
   double _couplast;
 
 };
 }
 
 
 #endif /* HERWIG_NMSSMFFHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMGGHVertex.h b/Models/Susy/NMSSM/NMSSMGGHVertex.h
--- a/Models/Susy/NMSSM/NMSSMGGHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMGGHVertex.h
@@ -1,254 +1,248 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMGGHVertex_H
 #define HERWIG_NMSSMGGHVertex_H
 //
 // This is the declaration of the NMSSMGGHVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.fh"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the effective vertex for a higgs coupling
  * to a pair of gluons in the NMSSM.
  *
  * @see \ref NMSSMGGHVertexInterfaces "The interfaces"
  * defined for NMSSMGGHVertex.
  */
 class NMSSMGGHVertex: public VVSLoopVertex {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   NMSSMGGHVertex();
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param p1 ParticleData pointer to first particle
    *@param p2 ParticleData pointer to second particle
    *@param p3 ParticleData pointer to third particle
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr p1, tcPDPtr p2,
 			   tcPDPtr p3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMGGHVertex> initNMSSMGGHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMGGHVertex & operator=(const NMSSMGGHVertex &);
 
 private:
 
   /** @name Stored parameters. */
   //@{
   /**
    * The SM pointer 
    */
   tcHwSMPtr _theSM;
   
   /**
    * \f$ \sin\theta_W\f$ 
    */
   double _sw;
 
   /**
    * \f$ \cos\theta_W\f$ 
    */
   double _cw;
 
   /**
    * \f$ M_W\f$
    */
   Energy _mw;
 
   /**
    * \f$ M_Z \f$
    */
   Energy _mz;
   
    /**
    * The product \f$\lambda \langle S\rangle \f$.
    */
   
   Energy _lambdaVEV;
   
   /**
    *  The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential
    */
   
   double _lambda;
   
   /**
    * The value of the VEV of the higgs that couples to the up-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */
   
   Energy _v1;
 
   /**
    * The value of the VEV of the higgs that couples to the down-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */ 
   Energy _v2;
   
   /**
    * The top quark trilinear coupling
    */
   complex<Energy> _triTp;
 
   /**
    * The bottom quark trilinear coupling
    */
   complex<Energy> _triBt;
   
   /**
    * A pointer to the top quark
    */
   tcPDPtr _top;
 
   /**
    * A pointer to the bottom quark
    */
   tcPDPtr _bt;
   
   /**
    * CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr _mixS;
   
   /**
    * CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr _mixP;
   
   /**
    * \f$\tilde{t}\f$ mixing matrix  
    */
   MixingMatrixPtr _mixQt;
   
   /**
    * \f$\tilde{b}\f$ mixing matrix  
    */
   MixingMatrixPtr _mixQb;
 
   /**
    * \f$ \sin\beta\f$ 
    */
   double _sb;
 
   /**
    * \f$ \cos\beta\f$ 
    */
   double _cb;
   
   /**
    * The top and bottom quark masses calculated at the last value
    * of \f$q^2\f$ 
    */
   pair<Energy, Energy> _masslast;
 
   /**
    * The scale at which the coupling was last evaluated 
    */
   Energy2 _q2last;
 
   /**
    * The value of the overall normalisation when the coupling was last 
    * evaluated.
    */
   double _couplast;
 
   /**
    * The value of the weak coupling was last 
    * evaluated.
    */
   double _coup;
   
   /**
    * The PDG code of the Higgs particle when the vertex was last evaluated 
    */
   long _hlast;
 
   /**
    * Whether the tensor coefficient need recalculating or not 
    */
   bool _recalc;
   //@}
 };
   
 }
 
 #endif /* HERWIG_NMSSMGGHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMGOGOHVertex.h b/Models/Susy/NMSSM/NMSSMGOGOHVertex.h
--- a/Models/Susy/NMSSM/NMSSMGOGOHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMGOGOHVertex.h
@@ -1,184 +1,178 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMGOGOHVertex_H
 #define HERWIG_NMSSMGOGOHVertex_H
 //
 // This is the declaration of the NMSSMGOGOHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * Here is the documentation of the NMSSMGOGOHVertex class.
  *
  * @see \ref NMSSMGOGOHVertexInterfaces "The interfaces"
  * defined for NMSSMGOGOHVertex.
  */
 class NMSSMGOGOHVertex: public FFSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   inline NMSSMGOGOHVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMGOGOHVertex> initNMSSMGOGOHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMGOGOHVertex & operator=(const NMSSMGOGOHVertex &);
 
 private:
 
   /**
    *  The various mixing matrices and couplings
    */
   //@{
   /**
    *  The V chargino mixing matrix
    */
   MixingMatrixPtr _mixV;
 
   /**
    *  The U chargino mixing matrix
    */
   MixingMatrixPtr _mixU;
 
   /**
    *  The neutralino mixing matrix 
    */
   MixingMatrixPtr _mixN;
 
   /**
    *  The CP-even neutral Higgs mixing matrix
    */
   MixingMatrixPtr _mixS;
 
   /**
    *  The CP-odd neutral Higgs mixing matrix
    */
   MixingMatrixPtr _mixP;
 
   /**
    *  The tri-linear \f$\lambda\f$ coupling
    */
   double _lambda;
 
   /**
    *  The tri-linear \f$\kappa\f$ coupling
    */
   double _kappa;
 
   /**
    *  \f$\sin\beta\f$
    */
   double _sinb;
 
   /**
    *  \f$\cos\beta\f$
    */
   double _cosb;
 
   /**
    *  \f$\sin\theta_W\f$
    */
   double _sw;
 
   /**
    *  \f$\cos\theta_W\f$
    */
   double _cw;
 
   /**
    *  The last \f$q^2\f$ the coupling was evaluated at.
    */
   Energy2 _q2last;
 
   /**
    *  The last value of the coupling
    */
   double _couplast;
   //@}
 
 };
 }
 
 
 #endif /* HERWIG_NMSSMGOGOHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMHHHVertex.h b/Models/Susy/NMSSM/NMSSMHHHVertex.h
--- a/Models/Susy/NMSSM/NMSSMHHHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMHHHVertex.h
@@ -1,282 +1,276 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMHHHVertex_H
 #define HERWIG_NMSSMHHHVertex_H
 //
 // This is the declaration of the NMSSMHHHVertex class.
 //
 #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup Helicity
  * The NMSSMHHHVertex defines the triple
  * Higgs coupling in the NMSSM.
  *
  * @see \ref NMSSMHHHVertexInterfaces "The interfaces"
  * defined for NMSSMHHHVertex.
  */
 class NMSSMHHHVertex: public SSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMHHHVertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMHHHVertex> initNMSSMHHHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMHHHVertex & operator=(const NMSSMHHHVertex &);
 
 private:
 
   /**
    * The mixing matrix combination \f$U^S_{ai}U^S_{bj}U^S_{ck}\f$
    * @param a The row element of the first CP-even mixing matrix   
    * @param b The column element of the first CP-even mixing matrix
    * @param c The row element of the second CP-even mixing matrix   
    * @param i The column element of the second CP-even mixing matrix
    * @param j The row element of the third CP-even mixing matrix   
    * @param k The column element of the third CP-even mixing matrix
    */
   Complex usMix(unsigned int a, unsigned int b, unsigned int c,
 		unsigned int i, unsigned int j, unsigned int k) const {
     return (*_mixS)(a,i)*(*_mixS)(b,j)*(*_mixS)(c,k) +
            (*_mixS)(a,i)*(*_mixS)(c,j)*(*_mixS)(b,k) +
    	   (*_mixS)(b,i)*(*_mixS)(a,j)*(*_mixS)(c,k) +
    	   (*_mixS)(b,i)*(*_mixS)(c,j)*(*_mixS)(a,k) +
            (*_mixS)(c,i)*(*_mixS)(a,j)*(*_mixS)(b,k) +
            (*_mixS)(c,i)*(*_mixS)(b,j)*(*_mixS)(a,k);
   }
   
   /**
    * The mixing matrix combination \f$U^S_{ai}U^P_{bj}U^P_{ck}\f$
    * @param a The row element of the first CP-even mixing matrix   
    * @param b The column element of the first CP-even mixing matrix
    * @param c The row element of the second CP-even mixing matrix   
    * @param i The column element of the second CP-even mixing matrix
    * @param j The row element of the third CP-even mixing matrix   
    * @param k The column element of the third CP-even mixing matrix
    */
   Complex upMix(unsigned int a, unsigned int b, unsigned int c,
 		unsigned int i, unsigned int j, unsigned int k) const {
     return (*_mixS)(a,i)*((*_mixP)(b,j)*(*_mixP)(c,k) + 
 			  (*_mixP)(c,j)*(*_mixP)(b,k));
   }
 
 private:
 
   /**
    * A pointer to the object containing the SM parameters 
    */
   tcHwSMPtr _theSM;
 
   /**
    * The \f$W\f$ mass 
    */
   Energy _mw;
   
   /**
    * The \f$Z\f$ mass 
    */
   Energy _mz;
      /**
    * The \f$b\f$ mass 
    */
   Energy _mb;
   
   /**
    * The \f$t\f$ mass 
    */
   Energy _mt;
   
   /**
    * \f$\sin^2\theta_W\f$
    */
   double _sw2;
 
   /**
    * \f$\cos\theta_W\f$
    */
   double _cw;
 
   /**
    * The CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr _mixS;
 
   /**
    * The CP-odd Higgs mixing matrix 
    */
   MixingMatrixPtr _mixP;
 
   /**
    *  The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential
    */
   double _lambda;
 
   /**
    *  The coefficient of the cubic singlet term in the superpotential
    */
   double _kappa;
   
   /**
    * The product \f$\lambda \langle S\rangle \f$.
    */
   Energy _lambdaVEV;
   
   /**
    * The soft trilinear \f$SH_2 H_1\f$ coupling
    */
   Energy _theAl;
   
   /**
    * The soft cubic \f$S\f$ coupling
    */
   Energy _theAk;
 
   /**
    * \f$\sin\beta\f$
    */
   double _sb;
 
   /**
    * \f$\cos\beta\f$
    */
   double _cb;
 
   /**
    * \f$\sin2\beta\f$
    */
   double _s2b;
 
   /**
    * \f$\cos2\beta\f$
    */
   double _c2b;
 
   /**
    * The value of the VEV of the higgs that couples to the down-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */
   Energy _vu;
 
   /**
    * The value of the VEV of the higgs that couples to the up-type sector
    * i.e. \f$ g*sqrt(2)M_W\sin\beta \f$
    */
   Energy _vd;
   
     /**
    * The value of the VEV of the singlet higgs
    */
   Energy _s;
 
   /**
    * The scale at which this vertex was last evaluated 
    */
   Energy2 _q2last;
 
   /**
    * The value of the EW coupling when it was last evaluated
    */
   double _glast;
         /**
    * left 3rd generation scalar quark mass
    */
   Energy _MQ3;
 
   /**
    *  right scalar top mass
    */
   Energy _MU2;
 
   /**
    *  Whether or onto to include the radiative terms
    */
   bool _includeRadiative;
 
 };
 
 }
 
 #endif /* HERWIG_NMSSMHHHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMHSFSFVertex.h b/Models/Susy/NMSSM/NMSSMHSFSFVertex.h
--- a/Models/Susy/NMSSM/NMSSMHSFSFVertex.h
+++ b/Models/Susy/NMSSM/NMSSMHSFSFVertex.h
@@ -1,252 +1,246 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMHSFSFVertex_H
 #define HERWIG_NMSSMHSFSFVertex_H
 //
 // This is the declaration of the NMSSMHSFSFVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /** \ingroup Helicity
  * This class defines the coupling of Higgs bosons to the sfermions
  * in the NMSSM.
  *
  * @see \ref NMSSMHSFSFVertexInterfaces "The interfaces"
  * defined for NMSSMHSFSFVertex.
  */
 class NMSSMHSFSFVertex: public Helicity::SSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMHSFSFVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMHSFSFVertex> initNMSSMHSFSFVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMHSFSFVertex & operator=(const NMSSMHSFSFVertex &);
 
 private:
 
   /**
    * Return the coupling of the charged higgs to the sfermions
    */
   Complex chargedHiggs(Energy2 q2, long id1, long id2);
 
 private:
   
   /** @name Stored parameters for fast access.*/
   //@{
   /**
    * A pointer to the Standard Model object 
    */
   tcHwSMPtr _theSM;
 
   /**
    * The CP-even higgs mixing matrix
    */
   MixingMatrixPtr _mixS;
 
   /**
    * The CP-odd higgs mixing matrix
    */
   MixingMatrixPtr _mixP;
 
   /**
    * The \f$ \tilde{t}\f$ mixing matrix 
    */
   MixingMatrixPtr _mixTp;
 
   /**
    * The \f$ \tilde{b}\f$ mixing matrix 
    */
   MixingMatrixPtr _mixBt;
 
   /**
    * The \f$ \tilde{\tau}\f$ mixing matrix 
    */
   MixingMatrixPtr _mixTa;
 
   /**
    * The top quark trilinear coupling
    */
   complex<Energy> _triTp;
 
   /**
    * The bottom quark trilinear coupling
    */
   complex<Energy> _triBt;
 
   /**
    * The tau lepton trilinear coupling
    */
   complex<Energy> _triTa;
 
   /**
    * The value of \f$\lambda\f$.
    */
   double _lambda;
   
   /**
    * The value of \f$ \lambda <S> \f$, the 
    * V.E.V of the extra gauge singlet scaled
    * by \f$\lambda\f$
    */
   Energy _lambdaVEV;
 
   /**
    * The value of the V.E.V \f$ v_1 \f$ 
    */
   Energy _v1;
 
   /**
    * The value of the V.E.V \f$ v_2 \f$ 
    */
   Energy _v2;
   
   /**
    * The value of \f$ \sin\theta_W \f$
    */
   double _sw;
 
   /**
    * The value of \f$ \cos\theta_W \f$
    */
   double _cw;
   
   /**
    * The value of \f$ M_W \f$
    */
   Energy _mw;
 
   /**
    * The value of \f$ M_Z \f$
    */
   Energy _mz;
 
   /**
    * The value of \f$ \sin\beta \f$
    */
   double _sb;
 
   /**
    * The value of \f$ \cos\beta \f$
    */
   double _cb;
 
   /**
    * The value of \f$ \tan\beta \f$
    */
   double _tb;
 
   //@}
   
   /** @name Store previously calculated values for speed. */
   //@{
   /**
    * The scale at which the last calculation took place. 
    */
   Energy2 _q2last;
   
   /**
    * The value of the dimensionless coupling \f$g_W\f$ when
    * last calculated.
    */
   double _couplast;
 
   /**
    * The value of mass of the counterpart SM fermion when
    * last calculated.
    */
   pair<Energy, Energy> _masslast;
 
   /**
    * The PDG codes of the particles in the vertex when it was last evaluated
    */
   pair<long, long> _idlast;
   //@}
 };
 }
 
 
 #endif /* HERWIG_NMSSMHSFSFVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMPPHVertex.h b/Models/Susy/NMSSM/NMSSMPPHVertex.h
--- a/Models/Susy/NMSSM/NMSSMPPHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMPPHVertex.h
@@ -1,306 +1,300 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMPPHVertex_H
 #define HERWIG_NMSSMPPHVertex_H
 //
 // This is the declaration of the NMSSMPPHVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "Herwig/Models/StandardModel/StandardModel.fh"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the effective vertex for a higgs coupling
  * to a pair of photons in the NMSSM.
  *
  * @see \ref NMSSMPPHVertexInterfaces "The interfaces"
  * defined for NMSSMPPHVertex.
  */
 class NMSSMPPHVertex: public VVSLoopVertex {
 
 public:
 
   /** @name Standard constructors and destructors. */
   //@{
   /**
    * The default constructor.
    */
   NMSSMPPHVertex();
   //@}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param p1 ParticleData pointer to first particle
    *@param p2 ParticleData pointer to second particle
    *@param p3 ParticleData pointer to third particle
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr p1, tcPDPtr p2,
 			   tcPDPtr p3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMPPHVertex> initNMSSMPPHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMPPHVertex & operator=(const NMSSMPPHVertex &);
 
 private:
 
   /** @name Stored parameters. */
   //@{
   /**
    * The SM pointer 
    */
   tcHwSMPtr _theSM;
   
   /**
    * \f$ \sin\theta_W\f$ 
    */
   double _sw;
 
   /**
    * \f$ \cos\theta_W\f$ 
    */
   double _cw;
 
   /**
    * \f$ M_W\f$
    */
   Energy _mw;
 
   /**
    * \f$ M_Z \f$
    */
   Energy _mz;
   
    /**
    * The product \f$\lambda \langle S\rangle \f$.
    */
   
   Energy _lambdaVEV;
   
   /**
    *  The coefficient of the trilinear \f$SH_2 H_1\f$ term in the superpotential
    */
   
   double _lambda;
   
   /**
    * The value of the VEV of the higgs that couples to the up-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */
   
   Energy _v1;
 
   /**
    * The value of the VEV of the higgs that couples to the down-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */ 
   Energy _v2;
   
   /**
    * The top quark trilinear coupling
    */
   complex<Energy> _triTp;
 
   /**
    * The bottom quark trilinear coupling
    */
   complex<Energy> _triBt;
 
   /**
    * The tau quark trilinear coupling
    */
   complex<Energy> _triTa;
   
   /**
    * A pointer to the top quark
    */
   tcPDPtr _top;
 
   /**
    * A pointer to the bottom quark
    */
   tcPDPtr _bt;
 
   /**
    * A pointer to the tau lepton
    */
   tcPDPtr _tau;
   
   /**
    * CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr _mixS;
   
   /**
    * CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr _mixP;
   
   /**
    * \f$\tilde{t}\f$ mixing matrix  
    */
   MixingMatrixPtr _mixQt;
   
   /**
    * \f$\tilde{b}\f$ mixing matrix  
    */
   MixingMatrixPtr _mixQb;
   
   /**
    * \f$\tilde{\tau}\f$ mixing matrix  
    */
   MixingMatrixPtr _mixLt;
 
   /**
    * \f$ \sin\beta\f$ 
    */
   double _sb;
 
   /**
    * \f$ \cos\beta\f$ 
    */
   double _cb;
 
   /**
    *  The coefficient of the cubic singlet term in the superpotential
    */
   double _kappa;
 
   /**
    * The value of the VEV of the higgs that couples to the down-type sector
    *  \f$ g*sqrt(2)M_W\cos\beta \f$
    */
   Energy _vu;
 
   /**
    * The value of the VEV of the higgs that couples to the up-type sector
    * i.e. \f$ g*sqrt(2)M_W\sin\beta \f$
    */
   Energy _vd;
   
     /**
    * The value of the VEV of the singlet higgs
    */
   Energy _s;
   
   /**
    * The soft trilinear \f$SH_2 H_1\f$ coupling
    */
   Energy _theAl;
 
   /**
    * The U mixing matrix
    */
   tMixingMatrixPtr _mixU;
 
   /**
    * The V mixing matrix
    */
   tMixingMatrixPtr _mixV;
   
   /**
    * The top and bottom quark masses calculated at the last value
    * of \f$q^2\f$ 
    */
   pair<Energy, Energy> _masslast;
 
   /**
    * The scale at which the coupling was last evaluated 
    */
   Energy2 _q2last;
 
   /**
    * The value of the overall normalisation when the coupling was last 
    * evaluated.
    */
   double _couplast;
 
   /**
    * The value of the weak coupling was last 
    * evaluated.
    */
   double _coup;
   
   /**
    * The PDG code of the Higgs particle when the vertex was last evaluated 
    */
   long _hlast;
 
   /**
    * Whether the tensor coefficient need recalculating or not 
    */
   bool _recalc;
   //@}
 };
   
 }
 
 #endif /* HERWIG_NMSSMPPHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMWHHVertex.h b/Models/Susy/NMSSM/NMSSMWHHVertex.h
--- a/Models/Susy/NMSSM/NMSSMWHHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMWHHVertex.h
@@ -1,154 +1,148 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMWHHVertex_H
 #define HERWIG_NMSSMWHHVertex_H
 //
 // This is the declaration of the NMSSMWHHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * The NMSSMWHHVertex class implements the coupling of an electroweak"
  * gauge boson with two Higgs bosons in the NMSSM.
  *
  * @see \ref NMSSMWHHVertexInterfaces "The interfaces"
  * defined for NMSSMWHHVertex.
  */
 class NMSSMWHHVertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMWHHVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMWHHVertex> initNMSSMWHHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMWHHVertex & operator=(const NMSSMWHHVertex &);
 
 private:
 
   /**
    * \f$\sin\beta\f$
    */
   double _sinb;
 
   /**
    * \f$\cos\beta\f$
    */
   double _cosb;
 
   /**
    * \f$\sin\theta_W\f$
    */
   double _sw;
 
   /**
    * \f$\cos\theta_W\f$
    */
   double _cw;
 
   /**
    *  The last \f$q^2\f$ the coupling was evaluated at.
    */
   Energy2 _q2last;
 
   /**
    *  The last value of the coupling
    */
   double _couplast;
 
   /**
    *  Mixing matrix for the CP-even Higgs bosons
    */
   MixingMatrixPtr _mixS;
 
   /**
    *  Mixing matrix for the CP-odd  Higgs bosons
    */
   MixingMatrixPtr _mixP;
 
 };
 }
 
 
 #endif /* HERWIG_NMSSMWHHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMWWHHVertex.h b/Models/Susy/NMSSM/NMSSMWWHHVertex.h
--- a/Models/Susy/NMSSM/NMSSMWWHHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMWWHHVertex.h
@@ -1,160 +1,154 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMWWHHVertex_H
 #define HERWIG_NMSSMWWHHVertex_H
 //
 // This is the declaration of the NMSSMWWHHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the NMSSMWWHHVertex class.
  *
  * @see \ref NMSSMWWHHVertexInterfaces "The interfaces"
  * defined for NMSSMWWHHVertex.
  */
 class NMSSMWWHHVertex: public Helicity::VVSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMWWHHVertex();
   
   /**
    * Calculate the couplings.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the fourth particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,
 			   tcPDPtr part3, tcPDPtr part4);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMWWHHVertex> initNMSSMWWHHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMWWHHVertex & operator=(const NMSSMWWHHVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex couplast_;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 q2last_;
   //@}
 
   /**
    * \f$\sin\theta_W\f$
    */
   double sw_;
 
   /**
    * \f$\cos\theta_W\f$
    */
   double cw_;
 
   /**
    * \f$\sin\beta\f$
    */
   double sb_;
 
   /**
    * \f$\cos\beta\f$
    */
   double cb_;
 
   /**
    * The CP-even Higgs mixing matrix 
    */
   MixingMatrixPtr mixS_;
 
   /**
    * The CP-odd Higgs mixing matrix 
    */
   MixingMatrixPtr mixP_;
 };
 
 }
 
 #endif /* HERWIG_NMSSMWWHHVertex_H */
diff --git a/Models/Susy/NMSSM/NMSSMWWHVertex.h b/Models/Susy/NMSSM/NMSSMWWHVertex.h
--- a/Models/Susy/NMSSM/NMSSMWWHVertex.h
+++ b/Models/Susy/NMSSM/NMSSMWWHVertex.h
@@ -1,158 +1,152 @@
 // -*- C++ -*-
 #ifndef HERWIG_NMSSMWWHVertex_H
 #define HERWIG_NMSSMWWHVertex_H
 //
 // This is the declaration of the NMSSMWWHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
 #include "Herwig/Models/Susy/MixingMatrix.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /** \ingroup Helicity
  * 
  * The NMSSMWWHVertex class is the implementation of the coupling of two electroweak
  * gauge bosons to the Higgs bosons of the NMSSM. It inherits from VVSVertex and
  * implements the setCoupling member.
  *
  * @see \ref NMSSMWWHVertexInterfaces "The interfaces"
  * @see VVSVertex
  * @see SMWWHVertex
  * defined for NMSSMWWHVertex.
  */
 class NMSSMWWHVertex: public VVSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   NMSSMWWHVertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<NMSSMWWHVertex> initNMSSMWWHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   NMSSMWWHVertex & operator=(const NMSSMWWHVertex &);
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
   /**
    *  The last value of the electroweak coupling calculated.
    */
   Complex _couplast;
 
   /**
    *  The scale \f$q^2\f$ at which the coupling was last evaluated.
    */
   Energy2 _q2last;
 
   /**
    *  The mass of the \f$W\f$ boson.
    */
   Energy _mw;
 
   /**
    *  The factor for the \f$Z\f$ vertex.
    */
   double _zfact;
 
   /**
    *  \f$\sin\beta\f$
    */
   double _sinb;
 
   /**
    *  \f$\cos\beta\f$
    */
   double _cosb;
 
   /**
    *  Mixing matrix for the CP-even Higgs bosons
    */
   MixingMatrixPtr _mixS;
   //@}
 
 };
 }
 
 
 #endif /* HERWIG_NMSSMWWHVertex_H */
diff --git a/Models/Susy/SSGVNHVertex.h b/Models/Susy/SSGVNHVertex.h
--- a/Models/Susy/SSGVNHVertex.h
+++ b/Models/Susy/SSGVNHVertex.h
@@ -1,145 +1,139 @@
 // -*- C++ -*-
 #ifndef HERWIG_SSGVNHVertex_H
 #define HERWIG_SSGVNHVertex_H
 //
 // This is the declaration of the SSGVNHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/RFSVertex.h"
 #include "MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The SSGVNHVertex class implements the coupling of the gravitino to
  * a neutralino and Higgs boson.
  *
  * @see \ref SSGVNHVertexInterfaces "The interfaces"
  * defined for SSGVNHVertex.
  */
 class SSGVNHVertex: public Helicity::RFSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SSGVNHVertex();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
 			   tcPDPtr part2,tcPDPtr part3);
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSGVNHVertex> initSSGVNHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSGVNHVertex & operator=(const SSGVNHVertex &);
 
 private:
 
   /**
    * The value of \f$\sin\alpha\f$ 
    */
   double sa_;
 
   /**
    * The value of \f$\sin\beta\f$ 
    */
   double sb_;
 
   /**
    * The value of \f$\cos\alpha\f$ 
    */
   double ca_;
 
   /**
    * The value of \f$\cos\beta\f$ 
    */
   double cb_;  
   
   /**
    * Pointer to the neutralino mixing matrix
    */
   tMixingMatrixPtr nmix_;
 
   /**
    *  The Planck mass
    */
   Energy MPlanck_;
 
 };
 
 }
 
 #endif /* HERWIG_SSGVNHVertex_H */
diff --git a/Models/Susy/SSGVNVVertex.h b/Models/Susy/SSGVNVVertex.h
--- a/Models/Susy/SSGVNVVertex.h
+++ b/Models/Susy/SSGVNVVertex.h
@@ -1,152 +1,146 @@
 // -*- C++ -*-
 #ifndef HERWIG_SSGVNVVertex_H
 #define HERWIG_SSGVNVVertex_H
 //
 // This is the declaration of the SSGVNVVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/RFVVertex.h"
 #include "MixingMatrix.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * The SSGVNVVertex class implements the coupling of the gravitino
  * to a gaugino and the assoicated gauge boson.
  *
  * @see \ref SSGVNVVertexInterfaces "The interfaces"
  * defined for SSGVNVVertex.
  */
 class SSGVNVVertex: public Helicity::RFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SSGVNVVertex();
 
   /**
    * Calculate the couplings. This method is virtual and must be implemented in 
    * classes inheriting from this.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
 			   tcPDPtr part2,tcPDPtr part3);
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSGVNVVertex> initSSGVNVVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSGVNVVertex & operator=(const SSGVNVVertex &);
 
 private:
 
   /**
    *  \f$\sin\theta_W\f$
    */
   double sw_;
 
   /**
    *  \f$\sin\theta_W\f$
    */
   double cw_;
 
   /**
    * The value of \f$\sin\beta\f$ 
    */
   double sb_;
 
   /**
    * The value of \f$\cos\beta\f$ 
    */
   double cb_;
 
   /**
    *  The Z mass
    */  
   Energy mz_;
   
   /**
    * Pointer to the neutralino mixing matrix
    */
   tMixingMatrixPtr nmix_;
 
   /**
    *  The Planck mass
    */
   Energy MPlanck_;
 
 };
 
 }
 
 #endif /* HERWIG_SSGVNVVertex_H */
diff --git a/Models/Susy/SSHGGVertex.h b/Models/Susy/SSHGGVertex.h
--- a/Models/Susy/SSHGGVertex.h
+++ b/Models/Susy/SSHGGVertex.h
@@ -1,292 +1,286 @@
 // -*- C++ -*-
 //
 // SSHGGVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSHGGVertex_H
 #define HERWIG_SSHGGVertex_H
 //
 // This is the declaration of the SSHGGVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 
   /**
    * This class implements the effective vertex coupling a higgs
    * to a pair of gluons in the MSSM. The loop include the stop and sbottom
    * squarks and the top quark.
    *  
    *
    * @see \ref SSHGGVertexInterfaces "The interfaces"
    * defined for SSHGGVertex.
 
    */
 class SSHGGVertex: public VVSLoopVertex {
   
 public:
   
   /**
    * The default constructor.
    */
   SSHGGVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
   
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param particle1 ParticleData pointer to first particle
    *@param particle2 ParticleData pointer to second particle
    *@param particle3 ParticleData pointer to third particle
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
 			   tcPDPtr particle3);
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
   
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
   
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
 private:
   
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSHGGVertex> initSSHGGVertex;
-  
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSHGGVertex & operator=(const SSHGGVertex &);
   
 private:
 
   /**
    * Switch to turn off squark trilinear couplings via A terms for testing
    */
   bool theIncludeTriLinear;
 
   /**
    *  Treat the pseudoscalar as scalar for comparison with ISAJET
    */
   bool thePseudoScalarTreatment;
 
   /**
    * A pointer to the MSSM object
    */
   tMSSMPtr theMSSM;
 
   /**
    * Value of \f$\sin\theta_W\f$
    */
   double theSw;
   
   /**
    * The mass of the \f$W\f$ boson.
    */
   Energy theMw;
 
   /**
    * The factor \f$\frac{M_Z}{\cos\theta_W}\f$ 
    */
   Energy theZfact;  
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{11}Q^{2i}_{11}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1L;
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1R;
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1LR;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{21}Q^{2i}_{21}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2L;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2R;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2LR;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{11}Q^{2i-1}_{11}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1L;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1R;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1LR;
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{21}Q^{2i-1}_{21}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2L;
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2R;
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2LR;
   
   /**
    * A pointer to the top quark ParticleData object 
    */
   tPDPtr thetop;
 
   /**
    * A pointer to the bottom quark ParticleData object 
    */
   tPDPtr thebot;
 
   /**
    * The squark masses 
    */
   vector<Energy> theSqmass;
   
   
   /**
    * The value of \f$ \tan\beta \f$ 
    */
   double theTanB;
 
   /**
    * The value of \f$ \sin\alpha \f$ 
    */
   double theSinA;
 
   /**
    * The value of \f$ \cos\alpha \f$ 
    */
   double theCosA;
 
   /**
    * The value of \f$ \sin\beta \f$ 
    */
   double theSinB;
 
   /**
    * The value of \f$ \cos\beta \f$ 
    */
   double theCosB;
 
   /**
    * The value of \f$ \sin(\alpha + \beta) \f$ 
    */
   double theSinApB;
 
   /**
    * The value of \f$ \cos(\alpha + \beta) \f$ 
    */
   double theCosApB;
 
   /**
    * Last value of the coupling calculated
    */
   Complex theCouplast;
   
   /**
    * The scale \f$q^2\f$ at which coupling was last evaluated
    */
   Energy2 theq2last;
   
   /**
    * Whether we have calculated the tensor coefficents yet 
    */
   bool theHaveCoeff;
 
   /**
    *  ID of the higgs
    */
   long theLastID;
 };
 
 }
 
 
 #endif /* HERWIG_SSHGGVertex_H */
diff --git a/Models/Susy/SSHPPVertex.h b/Models/Susy/SSHPPVertex.h
--- a/Models/Susy/SSHPPVertex.h
+++ b/Models/Susy/SSHPPVertex.h
@@ -1,351 +1,345 @@
 // -*- C++ -*-
 //
 // SSHPPVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSHPPVertex_H
 #define HERWIG_SSHPPVertex_H
 //
 // This is the declaration of the SSHPPVertex class.
 //
 
 #include "Herwig/Models/General/VVSLoopVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 
   /**
    * This class implements the effective vertex coupling a higgs
    * to a pair of photons in the MSSM. The loops include third generation
    * sfermions and fermions, \f$W^\pm\f$ and \f$H^\pm\f$
    *
    * @see \ref SSHPPVertexInterfaces "The interfaces"
    * defined for SSHPPVertex.
 
    */
 class SSHPPVertex: public VVSLoopVertex {
   
 public:
   
   /**
    * The default constructor.
    */
   SSHPPVertex();
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
   
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /** 
    * Calculate couplings
    *@param q2 Scale at which to evaluate coupling
    *@param particle1 ParticleData pointer to first particle
    *@param particle2 ParticleData pointer to second particle
    *@param particle3 ParticleData pointer to third particle
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
 			   tcPDPtr particle3);
   
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
   
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
   
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   
 private:
   
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSHPPVertex> initSSHPPVertex;
-  
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSHPPVertex & operator=(const SSHPPVertex &);
   
 private:
 
   /**
    * Switch to turn off squark trilinear couplings via A terms for testing
    */
   bool theIncludeTriLinear;
 
   /**
    *  Treat the pseudoscalar as scalar for comparison with ISAJET
    */
   bool thePseudoScalarTreatment;
 
   /**
    * A pointer to the MSSM object
    */
   tMSSMPtr theMSSM;
 
   /**
    * Value of \f$\sin\theta_W\f$
    */
   double theSw;
   
   /**
    * The mass of the \f$W\f$ boson.
    */
   Energy theMw;
 
   /**
    * The factor \f$\frac{M_Z}{\cos\theta_W}\f$ 
    */
   Energy theZfact;  
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{11}Q^{2i}_{11}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1L;
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1R;
   
   /**
    * The mixing matrix factor \f$Q^{2i}_{12}Q^{2i}_{12}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt1LR;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{21}Q^{2i}_{21}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2L;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2R;
 
   /**
    * The mixing matrix factor \f$Q^{2i}_{22}Q^{2i}_{22}\f$ 
    * for the \f$\tilde{t}\f$
    */
   Complex theQt2LR;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{11}Q^{2i-1}_{11}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1L;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1R;
 
  /**
    * The mixing matrix factor \f$Q^{2i-1}_{12}Q^{2i-1}_{12}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb1LR;
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{21}Q^{2i-1}_{21}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2L;
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2R; 
 
   /**
    * The mixing matrix factor \f$Q^{2i-1}_{22}Q^{2i-1}_{22}\f$ 
    * for the \f$\tilde{b}\f$
    */
   Complex theQb2LR; 
   
   /**
    * The mixing matrix factor \f$L^{2i}_{11}L^{2i}_{11}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt1L;
   
   /**
    * The mixing matrix factor \f$L^{2i}_{12}L^{2i}_{12}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt1R;
   
   /**
    * The mixing matrix factor \f$L^{2i}_{12}L^{2i}_{12}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt1LR;
 
   /**
    * The mixing matrix factor \f$L^{2i}_{21}L^{2i}_{21}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt2L;
 
   /**
    * The mixing matrix factor \f$L^{2i}_{22}L^{2i}_{22}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt2R;
 
   /**
    * The mixing matrix factor \f$L^{2i}_{22}L^{2i}_{22}\f$ 
    * for the \f$\tilde{\tau}\f$
    */
   Complex theLt2LR;
   
   /**
    * A pointer to the top quark ParticleData object 
    */
   tPDPtr thetop;
 
   /**
    * A pointer to the bottom quark ParticleData object 
    */
   tPDPtr thebot;
 
   /**
    * A pointer to the tau lepton ParticleData object 
    */
   tPDPtr thetau;
 
   /**
    * The sfermion masses 
    */
   vector<Energy> theSfmass;
   
   /**
    * The value of \f$ \tan\beta \f$ 
    */
   double theTanB;
 
   /**
    * The value of \f$ \sin\alpha \f$ 
    */
   double theSinA;
 
   /**
    * The value of \f$ \cos\alpha \f$ 
    */
   double theCosA;
 
   /**
    * The value of \f$ \sin\beta \f$ 
    */
   double theSinB;
 
   /**
    * The value of \f$ \cos\beta \f$ 
    */
   double theCosB;
 
   /**
    * The value of \f$ \sin(\alpha + \beta) \f$ 
    */
   double theSinApB;
 
   /**
    * The value of \f$ \cos(\alpha + \beta) \f$ 
    */
   double theCosApB;
 
   /**
    * The value of \f$ \sin(\beta-\alpha) \f$ 
    */
   double theSinBmA;
 
   /**
    * The value of \f$ \cos(\beta-\alpha) \f$ 
    */
   double theCosBmA;
 
   /**
    * The U mixing matrix
    */
   tMixingMatrixPtr theU;
 
   /**
    * The V mixing matrix
    */
   tMixingMatrixPtr theV;  
 
   /**
    * Last value of the coupling calculated
    */
   Complex theCouplast;
   
   /**
    * The scale \f$q^2\f$ at which coupling was last evaluated
    */
   Energy2 theq2last;
   
   /**
    * Whether we have calculated the tensor coefficents yet 
    */
   bool theHaveCoeff;
 
   /**
    *  ID of the higgs
    */
   long theLastID;
 };
 
 }
 
 
 #endif /* HERWIG_SSHPPVertex_H */
diff --git a/Models/Susy/SSHSFSFVertex.h b/Models/Susy/SSHSFSFVertex.h
--- a/Models/Susy/SSHSFSFVertex.h
+++ b/Models/Susy/SSHSFSFVertex.h
@@ -1,273 +1,267 @@
 // -*- C++ -*-
 //
 // SSHSFSFVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSHSFSFVertex_H
 #define HERWIG_SSHSFSFVertex_H
 //
 // This is the declaration of the SSHSFSFVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/SSSVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the coupling for a Higgs in the MSSM
  * to a pair of sfermions.
  *
  * @see \ref SSHSFSFVertexInterfaces "The interfaces"
  * defined for SSHSFSFVertex.
  */
 class SSHSFSFVertex: public SSSVertex {
 
   /** A vector of MixingMatrix pointers. */
   typedef vector<MixingMatrixPtr> MMPVector;
 
 public:
 
   /**
    * The default constructor.
    */
   SSHSFSFVertex();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   
   /**
    * Calculate the coupling at the given scale.
    * @param q2 The scale at which to evaluate the coupling
    * @param particle1 The first particle at the vertex
    * @param particle2 The second particle at the vertex
    * @param particle3 The third particle at the vertex
    */
   void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2, 
 		   tcPDPtr particle3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
   
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSHSFSFVertex> initSSHSFSFVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSHSFSFVertex & operator=(const SSHSFSFVertex &);
 
 private:
 
   /** @name Functions to calculate the coupling based on the sfermion type. */
   //@{
   /**
    * Calculate the coupling for the first higgs 
    * @param q2 scale
    * @param higgs The ID of the higgs
    * @param smID The ID of the SM particle to which it is a partner.
    * @param alpha The mass eigenstate of an sfermion
    * @param beta  The mass eigenstate of the other sfermion
    */
   void downSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta);
   
   /**
    * Calculate the coupling for the second higgs 
    * @param q2 scale
    * @param higgs The ID of the higgs
    * @param smID The ID of the SM particle to which it is a partner.
    * @param alpha The mass eigenstate of an sfermion
    * @param beta  The mass eigenstate of the other sfermion
    */
   void upSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta);
   
   /**
    * Calculate the coupling for the third higgs 
    * @param q2 scale
    * @param higgs The ID of the higgs
    * @param smID The ID of the SM particle to which it is a partner.
    * @param alpha The mass eigenstate of an sfermion
    * @param beta  The mass eigenstate of the other sfermion
    */
   void leptonSF(Energy2 q2, long higgs, long smID, unsigned int alpha, unsigned int beta);
   
   /**
    *  Calculate the coupling for the charged higgs 
    * @param q2 scale
    * @param id1 The ID of the first sfermion
    * @param id2 The ID of the second sfermion
    */
   void chargedHiggs(Energy2 q2, long id1, long id2);
   
   //@}
 
 private:
   
   /**
    * A vector containing pointers to the mixing matrices, 0 = stop, 
    * 1 = sbottom, 2 = stau 
    */
   MMPVector theMix;
 
   /**
    * A vector containing the trilinear couplings, quarks then leptons
    */
   vector<complex<Energy> > theTriC;
     
   /**
    * The value of \f$\sin\alpha\f$.
    */
   double theSinA;
 
   /**
    * The value of \f$\cos\alpha\f$.
    */
   double theCosA;
 
   /**
    * The value of \f$\sin\beta\f$.
    */
   double theSinB;
 
   /**
    * The value of \f$\cos\beta\f$.
    */
   double theCosB;
 
   /**
    * The value of \f$\tan\beta\f$. 
    */
   double theTanB;
 
   /**
    * The value of \f$\sin(\alpha + \beta)\f$.
    */
   double theSinAB;
 
   /**
    * The value of \f$\cos(\alpha + \beta)\f$.
    */
   double theCosAB;
 
   /**
    * The mass of the \f$W\f$. 
    */
   Energy theMw;
 
   /**
    * The mass of the \f$Z\f$. 
    */
   Energy theMz;
   
   /**
    * The \f$\mu\f$ parameter. 
    */
   Energy theMu;
 
   /**
    * The value of \f$\sin\theta_W\f$
    */
   double theSw;
 
   /**
    * The value of \f$\cos\theta_W\f$
    */
   double theCw;
 
   /**
    * The value of the coupling when it was last evaluated
    */
   complex<Energy> theCoupLast;
   
   /**
    * The scale at which the coupling was last evaluated
    */
   Energy2 theq2Last;
   
   /**
    * The value of g coupling when it was last evaluated
    */
   double thegLast;
   
   /**
    * The ID of the higgs when the vertex was last evaluated 
    */
   long theHLast;
   
   /**
    * The ID of the first sfermion when the vertex was last evaluated 
    */
   long theSF1Last;
   
   /**
    * The ID of the second sfermion when the vertex was last evaluated 
    */
   long theSF2Last;
 
   /**
    *  The Model
    */
   tMSSMPtr theMSSM;
 };
 }
 
 
 #endif /* HERWIG_SSHSFSFVertex_H */
diff --git a/Models/Susy/SSNCTVertex.h b/Models/Susy/SSNCTVertex.h
--- a/Models/Susy/SSNCTVertex.h
+++ b/Models/Susy/SSNCTVertex.h
@@ -1,180 +1,174 @@
 // -*- C++ -*-
 #ifndef HERWIG_SSNCTVertex_H
 #define HERWIG_SSNCTVertex_H
 //
 // This is the declaration of the SSNCTVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 
 using namespace ThePEG;
 
 /**
  * Here is the documentation of the SSNCTVertex class.
  *
  * @see \ref SSNCTVertexInterfaces "The interfaces"
  * defined for SSNCTVertex.
  */
 class SSNCTVertex: public Helicity::FFSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SSNCTVertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the couplings.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1,
                            tcPDPtr part2, tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSNCTVertex> initSSNCTVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSNCTVertex & operator=(const SSNCTVertex &);
 
 private:
 
   /**
    *  High scale for the loops
    */
   Energy MX_;
   
   /**
    * Pointer to the neutralino mixing matrix
    */
   tMixingMatrixPtr nmix_;
 
   /**
    * \f$\sin(\theta_w)\f$
    */
   double sw_;
 
   /**
    * \f$\cos(\theta_w)\f$
    */
   double cw_;
   
   /**
    * Mass of the W
    */
   Energy mw_;
 
   /**
    * \f$\sin(\beta)\f$
    */
   double sb_;
   
   /**
    * \f$\cos(\beta)\f$
    */
   double cb_;
 
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 q2last_;
 
   /**
    * The value of the normalisation when it was evaluated at _q2last 
    */
   Complex couplast_;
   
   /**
    * Store the value of the left coupling when it was last evaluated
    */
   Complex leftlast_;
 
   /**
    * Store the value of the right coupling when it was last evaluated
    */
   Complex rightlast_;
 
   /**
    * Store the id of the last neutralino to be evaluate
    */
   long idlast_;
 
   /**
    *  Mixing parameter
    */
   Complex epsilon_;
 
 };
 
 }
 
 #endif /* HERWIG_SSNCTVertex_H */
diff --git a/Models/Susy/SSWGSSVertex.h b/Models/Susy/SSWGSSVertex.h
--- a/Models/Susy/SSWGSSVertex.h
+++ b/Models/Susy/SSWGSSVertex.h
@@ -1,178 +1,172 @@
 // -*- C++ -*-
 //
 // SSWGSSVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSWGSSVertex_H
 #define HERWIG_SSWGSSVertex_H
 //
 // This is the declaration of the SSWGSSVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSSVertex.h"
 //#include "SusyBase.h"
 #include "MSSM.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the 4 point gluon-gluon-squark-squark 
  * vertex. It inherits from VVSSVertex and implements the setCouopling 
  * method.
  *
  * @see VVSSVertex
  */
 class SSWGSSVertex: public VVSSVertex {
 
 public:
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The default constructor.
    */
   SSWGSSVertex();
 
   /**
    * Calculate the couplings.
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
    * @param part4 The ParticleData pointer for the fourth particle. 
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
  			   tcPDPtr part2,tcPDPtr part3,tcPDPtr part4);
 
 public:
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
   
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSWGSSVertex> initSSWGSSVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSWGSSVertex & operator=(const SSWGSSVertex &);
 
 private:
 
   /**
    * Value of \f$sin(\theta_w)\f$
    */
   double _sw;
 
   /**
    * Value of \f$cos(\theta_w)\f$
    */
   double _cw;
   
   /**
    * Scale at which the coupling was last evaluated
    */
   Energy2 _q2last;
 
   /**
    * Value of em coupling when last evaluated
    */
   Complex _emcouplast;
 
   /**
    * Value of strong coupling when last evaluated
    */
   Complex _scouplast;
   
   /**
    * Stop mixing matrix
    */
   tMixingMatrixPtr _stop;
 
   /**
    * Sbottom mixing matrix
    */
   tMixingMatrixPtr _sbottom;
   
   /**
    * The up type squark present when the vertex was evaluated. 
    */
   long _ulast;
 
   /**
    * The down type squark present when the vertex was evaluated. 
    */
   long _dlast;
 
   /**
    * The gauge boson present when the vertex was last evaluated. 
    */
   long _gblast;
   
   /**
    * The value of the mixing matrix dependent part when the vertex was
    * last evaluated
    */
   Complex _factlast;
 
 };
 }
 
 #endif /* HERWIG_SSWGSSVertex_H */
diff --git a/Models/Susy/SSWSSVertex.h b/Models/Susy/SSWSSVertex.h
--- a/Models/Susy/SSWSSVertex.h
+++ b/Models/Susy/SSWSSVertex.h
@@ -1,175 +1,169 @@
 // -*- C++ -*-
 //
 // SSWSSVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSWSSVertex_H
 #define HERWIG_SSWSSVertex_H
 //
 // This is the declaration of the SSWSSVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the coupling of an SM gauge boson to
  * a pair of sfermions.
  * It inherits from VSSVertex and implements the setCoupling() method.
  *
  * @see VSSVertex
  */
 class SSWSSVertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SSWSSVertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
  /**
   * Calculate the couplings.
   * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
   * @param part1 The ParticleData pointer for the first  particle.
   * @param part2 The ParticleData pointer for the second particle.
   * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
                            tcPDPtr part2,tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
    /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSWSSVertex> initSSWSSVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSWSSVertex & operator=(const SSWSSVertex &);
 
   /**
    * Value of \f$sin(\theta_w)\f$
    */
   double _sw;
 
   /**
    * Value of \f$cos(\theta_w)\f$
    */
   double _cw;
   
   /**
    * Scale at which the coupling was last evaluated
    */
   Energy2 _q2last;
 
   /**
    * Value of coupling when last evaluated
    */
   Complex _couplast;
 
   /**
    * Stau mixing matrix
    */
   tMixingMatrixPtr _stau;
   
   /**
    * Stop mixing matrix
    */
   tMixingMatrixPtr _stop;
 
   /**
    * Sbottom mixing matrix
    */
   tMixingMatrixPtr _sbottom;
   
   /**
    * The up type sfermion present when the vertex was evaluated. 
    */
   long _ulast;
 
   /**
    * The down type sfermion present when the vertex was evaluated. 
    */
   long _dlast;
 
   /**
    * The gauge boson present when the vertex was last evaluated. 
    */
   long _gblast;
   
   /**
    * The value of the mixing matrix dependent part when the vertex was
    * last evaluated
    */
   Complex _factlast;
   
 };
 }
 
 #endif /* HERWIG_SSWSSVertex_H */
diff --git a/Models/Susy/SSWWHVertex.h b/Models/Susy/SSWWHVertex.h
--- a/Models/Susy/SSWWHVertex.h
+++ b/Models/Susy/SSWWHVertex.h
@@ -1,170 +1,164 @@
 // -*- C++ -*-
 //
 // SSWWHVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_SSWWHVertex_H
 #define HERWIG_SSWWHVertex_H
 //
 // This is the declaration of the SSWWHVertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VVSVertex.h"
 #include "MSSM.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the coupling of a higgs in the MSSM
  * to a pair of SM gauge bosons.
  *
  * @see \ref SSWWHVertexInterfaces "The interfaces"
  * defined for SSWWHVertex.
  */
 class SSWWHVertex: public VVSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   SSWWHVertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /**
    * Calculate the coupling for the vertex
    * @param q2 The scale to at which evaluate the coupling.
    * @param particle1 The first particle in the vertex.
    * @param particle2 The second particle in the vertex.
    * @param particle3 The third particle in the vertex.
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr particle1, tcPDPtr particle2,
 			   tcPDPtr particle3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<SSWWHVertex> initSSWWHVertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   SSWWHVertex & operator=(const SSWWHVertex &);
 
 private:
 
   
   /**
    * The value of the factor \f$\frac{m_W \sin(\beta-\alpha)}{\sin\theta_W}\f$
    */
   Energy theh0Wfact;
 
   /**
    * The value of the factor \f$\frac{m_W \cos(\beta-\alpha)}{\sin\theta_W}\f$
    */
   Energy theH0Wfact;
 
   /**
    * The value of the factor 
    * \f$\frac{m_Z\sin(\beta-\alpha)}{\sin\theta_W\cos\theta_W}\f$
    */
   Energy theh0Zfact;
 
   /**
    * The value of the factor 
    * \f$\frac{m_Z\cos(\beta-\alpha)}{\sin\theta_W\cos\theta_W}\f$
    */
   Energy theH0Zfact;
     
   /**
    * The value of the coupling when it was last evaluated
    */
   complex<Energy> theCoupLast;
 
   /**
    * The value of \f$\sqrt{4\pi \alpha(q2)}\f$ when it was last evaluated.
    */
   Complex theElast;
 
 
   /**
    * The scale at which the coupling was last evaluated
    */
   Energy2 theq2last;
 
   /**
    * The ID of the last higgs for which the vertex was evaluated
    */
   long theHlast;
 
   /**
    * The ID of the last gauge boson for which the vertex was evaluated
    */
   long theGBlast;
 };
 }
 
 
 #endif /* HERWIG_SSWWHVertex_H */
diff --git a/Models/TTbAsymm/TTbAModel.h b/Models/TTbAsymm/TTbAModel.h
--- a/Models/TTbAsymm/TTbAModel.h
+++ b/Models/TTbAsymm/TTbAModel.h
@@ -1,319 +1,313 @@
 // -*- C++ -*-
 #ifndef HERWIG_TTbAModel_H
 #define HERWIG_TTbAModel_H
 //
 // This is the declaration of the TTbAModel class.
 //
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "TTbAModel.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * Here is the documentation of the TTbAModel class.
  *
  * @see \ref TTbAModelInterfaces "The interfaces"
  * defined for TTbAModel.
  */
 class TTbAModel: public BSMModel {
 
 public:
 
   /**
    * The default constructor.
    */
   TTbAModel();
  
   /** @name Vertices */
   //@{
  /**
    * Pointer to the object handling W prime vertex.
    */
   tAbstractFFVVertexPtr vertexWPTD() const {return _theWPTDVertex;}
 
   /**
    * Pointer to the object handling Z prime vertex.
    */
   tAbstractFFVVertexPtr vertexZPQQ() const {return _theZPQQVertex;}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   
   /**
    * Return the W prime top-down left-handed coupling
    */
   double _cWPTD_left() const {return _gWPTD_L;}
 
   /**
    * Return the W prime top-down right-handed coupling
    */
   double _cWPTD_right() const {return _gWPTD_R;}
 
   /**
    * Return the Z prime top-up left-handed coupling
    */
   double _cZPTU_left() const {return _gZPTU_L;}
 
   /**
    * Return the Z prime top-up right-handed coupling
    */
   double _cZPTU_right() const {return _gZPTU_R;}
 
   /**
    * Return the Z prime up-upbar left-handed coupling
    */
   double _cZPUU_left() const {return _gZPUU_L;}
 
   /**
    * Return the Z prime up-upbar right-handed coupling
    */
   double _cZPUU_right() const {return _gZPUU_R;}
 
     /**
    * Return the Z prime charm-charmbar left-handed coupling
    */
   double _cZPCC_left() const {return _gZPCC_L;}
 
   /**
    * Return the Z prime charm-charmbar right-handed coupling
    */
   double _cZPCC_right() const {return _gZPCC_R;}
 
   /**
    * Return the axigluon q-qbar left-handed coupling
    */
   double _cAGQQ_left() const {return _gAGQQ_L;}
 
   /**
    * Return the axigluon q-qbar right-handed coupling
    */
   double _cAGQQ_right() const {return _gAGQQ_R;}
 
 
   /**
    * Return the axigluon t-tbar left-handed coupling
    */
   double _cAGTT_left() const {return _gAGTT_L;}
 
   /**
    * Return the axigluon t-tbar right-handed coupling
    */
   double _cAGTT_right() const {return _gAGTT_R;}
 
   /**
    * Return the alphaX value of the SU(2)_X model
    */
   double _alphaX_value() const {return _alphaXparam;}
 
   /**
    * Return the costheta misalignment value of the SU(2)_X model
    */
   double _costhetaX_value() const {return _costhetaXparam;}
 
   /**
    * Return the selected model id
    */
   int _model() const {return _modelselect;}
 
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
 
   
     
   
   //@}
 
 
 // If needed, insert declarations of virtual function defined in the
 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
 
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<TTbAModel> initTTbAModel;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   TTbAModel & operator=(const TTbAModel &);
 
   
   /**
    * Pointer to the object handling the Wp to Top Down vertex.
    */
   AbstractFFVVertexPtr  _theWPTDVertex;
 
   
   /**
    * Pointer to the object handling the Zp to Quark-antiQuark vertex.
    */
   AbstractFFVVertexPtr  _theZPQQVertex;
 
   /**
    * Pointer to the object handling the Ag to Quark-antiQuark vertex.
    */
   AbstractFFVVertexPtr  _theAGQQVertex;
 
   /**
    * Pointer to the object handling the SU(2)_X vertex.
    */
   AbstractFFVVertexPtr  _theSU2XVertex;
 
 
 
 
  /**
    *  W prime coupling to top-down (left-handed)
    */
   double _gWPTD_L;
   
 
   /**
    *  W prime coupling to top-down (right-handed)
    */
   double _gWPTD_R;
 
 
    /**
    *  Z prime coupling to top-up (left-handed)
    */
   double _gZPTU_L;
   
 
   /**
    *  Z prime coupling to top-up (right-handed)
    */
   double _gZPTU_R;
 
 
    /**
    *  Z prime coupling to up-upbar (left-handed)
    */
   double _gZPUU_L;
   
 
   /**
    *  Z prime coupling to up-upbar (right-handed)
    */
   double _gZPUU_R;
 
 
    /**
    *  Z prime coupling to charm-charmbar (left-handed)
    */
   double _gZPCC_L;
   
 
   /**
    *  Z prime coupling to charm-charmbar (right-handed)
    */
   double _gZPCC_R;
 
 
 
    /**
    *  Axigluon coupling to q-qbar (left-handed)
    */
   double _gAGQQ_L;
   
 
   /**
    *  Axigluon coupling to q-qbar (right-handed)
    */
   double _gAGQQ_R;
 
 
   /**
    *  Axigluon coupling to t-tbar (left-handed)
    */
   double _gAGTT_L;
   
 
   /**
    *  Axigluon coupling to t-tbar (right-handed)
    */
   double _gAGTT_R;
 
  /**
    *  SU(2)_X alpha_X parameter
    */
   double _alphaXparam;
   
  /**
    *  SU(2)_X costheta misalignment angle
    */
   double _costhetaXparam;
   
  
   /** 
    * Model selector
    */
   int _modelselect;
 
 
 };
 
 }
 
 #endif /* HERWIG_TTbAModel_H */
diff --git a/Models/TTbAsymm/TTbAModelAGQQVertex.h b/Models/TTbAsymm/TTbAModelAGQQVertex.h
--- a/Models/TTbAsymm/TTbAModelAGQQVertex.h
+++ b/Models/TTbAsymm/TTbAModelAGQQVertex.h
@@ -1,153 +1,148 @@
 // -*- C++ -*-
 //
 // TTbAModelAGQQVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TTbAModelAGQQVertex_H
 #define HERWIG_TTbAModelAGQQVertex_H
 //
 // This is the declaration of the TTbAModelAGQQVertex class.
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "Herwig/Models/TTbAsymm/TTbAModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFVVertex
  *  @see VertexBase
  */
 class TTbAModelAGQQVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   TTbAModelAGQQVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<TTbAModelAGQQVertex> initTTbAModelAGQQVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   TTbAModelAGQQVertex & operator=(const TTbAModelAGQQVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    * Axigluon coupling to q-qbar (left-handed)
    */
   double _cAGQQ_L;
   
 
   /**
    *  Axigluon coupling to q-qbar (right-handed)
    */
   double _cAGQQ_R;
 
   /**
    * Axigluon coupling to t-tbar (left-handed)
    */
   double _cAGTT_L;
   
 
   /**
    *  Axigluon coupling to t-tbar (right-handed)
    */
   double _cAGTT_R;
 
   /**
    * Model selector
    */
   int _models;
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_TTbAModelAGQQVertex_H */
diff --git a/Models/TTbAsymm/TTbAModelSU2XVertex.h b/Models/TTbAsymm/TTbAModelSU2XVertex.h
--- a/Models/TTbAsymm/TTbAModelSU2XVertex.h
+++ b/Models/TTbAsymm/TTbAModelSU2XVertex.h
@@ -1,149 +1,144 @@
 // -*- C++ -*-
 //
 // TTbAModelSU2XVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TTbAModelSU2XVertex_H
 #define HERWIG_TTbAModelSU2XVertex_H
 //
 // This is the declaration of the TTbAModelSU2XVertex class.
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "Herwig/Models/TTbAsymm/TTbAModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFVVertex
  *  @see VertexBase
  */
 class TTbAModelSU2XVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   TTbAModelSU2XVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<TTbAModelSU2XVertex> initTTbAModelSU2XVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   TTbAModelSU2XVertex & operator=(const TTbAModelSU2XVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    *  alpha_X coupling for the SU(2)_X gauge
    */
   double _alphaX;
   
 
   /**
    *  Misalignment angle cosine 
    */
   double _costhetaX;
 
  /**
    *  coupling strength for the SU(2)_X gauge
    */
   double _gX;
 
 
   /**
    * Model selector
    */
   int _models;
 
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_TTbAModelSU2XVertex_H */
diff --git a/Models/TTbAsymm/TTbAModelWPTDVertex.h b/Models/TTbAsymm/TTbAModelWPTDVertex.h
--- a/Models/TTbAsymm/TTbAModelWPTDVertex.h
+++ b/Models/TTbAsymm/TTbAModelWPTDVertex.h
@@ -1,143 +1,138 @@
 // -*- C++ -*-
 //
 // TTbAModelWPTDVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TTbAModelWPTDVertex_H
 #define HERWIG_TTbAModelWPTDVertex_H
 //
 // This is the declaration of the TTbAModelWPTDVertex class.
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "Herwig/Models/TTbAsymm/TTbAModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFVVertex
  *  @see VertexBase
  */
 class TTbAModelWPTDVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   TTbAModelWPTDVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<TTbAModelWPTDVertex> initTTbAModelWPTDVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   TTbAModelWPTDVertex & operator=(const TTbAModelWPTDVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    *  W prime coupling to top-down (left-handed)
    */
   double _cWPTD_L;
   
 
   /**
    *  W prime coupling to top-down (right-handed)
    */
   double _cWPTD_R;
 
   /**
    * Model selector
    */
   int _models;
 
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_TTbAModelWPTDVertex_H */
diff --git a/Models/TTbAsymm/TTbAModelZPQQVertex.h b/Models/TTbAsymm/TTbAModelZPQQVertex.h
--- a/Models/TTbAsymm/TTbAModelZPQQVertex.h
+++ b/Models/TTbAsymm/TTbAModelZPQQVertex.h
@@ -1,166 +1,161 @@
 // -*- C++ -*-
 //
 // TTbAModelZPQQVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_TTbAModelZPQQVertex_H
 #define HERWIG_TTbAModelZPQQVertex_H
 //
 // This is the declaration of the TTbAModelZPQQVertex class.
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "Herwig/Models/TTbAsymm/TTbAModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFVVertex
  *  @see VertexBase
  */
 class TTbAModelZPQQVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   TTbAModelZPQQVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<TTbAModelZPQQVertex> initTTbAModelZPQQVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   TTbAModelZPQQVertex & operator=(const TTbAModelZPQQVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    *  Z prime coupling to top-up (left-handed)
    */
   double _cZPTU_L;
   
 
   /**
    *  Z prime coupling to top-up (right-handed)
    */
   double _cZPTU_R;
 
   /**
    *  Z prime coupling to up-upbar (left-handed)
    */
   double _cZPUU_L;
   
 
   /**
    *  Z prime coupling to up-upbar (right-handed)
    */
   double _cZPUU_R;
 
   /**
    *  Z prime coupling to charm-charmbar (left-handed)
    */
   double _cZPCC_L;
   
 
   /**
    *  Z prime coupling to charm-charmbar (right-handed)
    */
   double _cZPCC_R;
 
 
   /**
    * Model selector
    */
   int _models;
 
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_TTbAModelZPQQVertex_H */
diff --git a/Models/UED/UEDBase.h b/Models/UED/UEDBase.h
--- a/Models/UED/UEDBase.h
+++ b/Models/UED/UEDBase.h
@@ -1,347 +1,341 @@
 // -*- C++ -*-
 //
 // UEDBase.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDBase_H
 #define HERWIG_UEDBase_H
 //
 // This is the declaration of the UEDBase class.
 //
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h"
 #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h"
 
 #include "UEDBase.fh"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class serves as a base class for all UED models. It stores the
  * values of the inverse radius and the product \f$\Lambda R \f$  and has functions
  * to calculate the radiative corrections to the nth level KK excitations.
  *
  * To use this class for n > 1 simply inherit off it, calculate the necessary masses
  * using the provided functions for the new excitations and add the
  * appropriate vertices.
  *
  * @see \ref UEDBaseInterfaces "The interfaces"
  * defined for UEDBase.
  */
 class UEDBase: public BSMModel {
 
 public:
 
   /** Typedef for ID-Mass pair. */
   typedef pair<long, Energy> IDMassPair;
 
   /** Typedef for unsigned int/double map to store Weinburg angles.*/
   typedef map<unsigned int, double> WAMap;
 
 public:
 
   /**
    * The default constructor.
    */
   UEDBase();
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 public:
 
   /** @name Public Access Functions.*/
   //@{
   /**
    * Return the compactification radius
    */
   InvEnergy compactRadius() const {
     return 1./theInvRadius;
   }
 
   /**
    * Return the Weinburg mixing angle for any level.
    */
   double sinThetaN(const unsigned int n) const;
 
   /**
    * Return the Weinburg mixing angle for \f$n = 1\f$
    */
   double sinThetaOne() const {
     return theSinThetaOne;
   }
   //@}
 
 protected:
 
   /**
    * Add a new ID,mass pair to the mass storage
    * @param elem The element to add in to storage
    */
   void addMassElement(IDMassPair elem) {
     theMasses.push_back(elem);
   }
 
   /**
    * Add a new mixing angle to the storage
    * @param n The level
    * @param val The value
    */
   void addMixingAngle(const unsigned int n, 
 		      const double val) {
     theMixingAngles.insert(make_pair(n, val));
   }
   
 private:
 
   /** @name Utility Functions for calculating masses. */
   //@{
   /**
    * Calculate the radiative corrections to the masses of the KK excitations
    * @param n The KK-level for which to calculate the masses. 
    */
   void calculateKKMasses(const unsigned int n);
 
   /**
    * Calculate the radiative corrections to the spin-0 and spin-1 
    * masses of the KK excitations
    * @param n The KK-level for which to calculate the masses. 
    */
   void bosonMasses(const unsigned int n);
   
   /**
    * Calculate the radiative corrections to the spin-1/2
    * masses of the KK excitations.
    * @param n The KK-level for which to calculate the masses.
    */
   void fermionMasses(const unsigned int n);
 
   /**
    * Reset the mass of the ParticleData object
    *@param id The id of the particles mass to reset
    *@param value The new mass
    */  
   void resetMass(long id, Energy value);
 
   /**
    * Calculate the Weinburg Mixing angle for the appropriate level.
    * @param n The KK-level for which to calculate the mixing angle.
    */
   double calculateMixingAngle(const unsigned int n);
   //@}
   
   /**
    * Write out a spectrum file ordered in mass (name can be set by an interface).
    */
   void writeSpectrum();
 
   /**
    * A predicate for sorting the list of masses.
    */
   static bool lowerMass(const pair<long, Energy> & p1, 
 			const pair<long, Energy> & p2) {
     return p1.second < p2.second;
   }
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDBase> initUEDBase;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDBase & operator=(const UEDBase &);
 
 private:
   
   /**
    * Whether to calculate the radiative corrections to the KK masses
    */
   bool theRadCorr;
   
   /**
    * Store the radius of the compactified dimension.
    */
   Energy theInvRadius;
   
   /**
    * The value of \f$\Lambda R \f$.
    */
   double theLambdaR;
 
   /**
    * The boundary mass term for the Higgs.
    */
   Energy theMbarH;
 
   /**
    * The values of \f$\sin\theta_N\f$
    */
   WAMap theMixingAngles;
 
   /**
    * Store \f$\sin\theta_1\f$ for faster access
    */
   double theSinThetaOne;
   
   /**
    * Store the masses of the new particles
    */
   vector<IDMassPair> theMasses;
   
   /**
    * The value of the vacuum expectation value of the higgs field.
    */
   Energy theVeV;
 
   /**
    *  Include SM masses in calculation of KK masses
    */
   bool includeSMMass_;
 
   /**
    *  Use fixed couplings for the mass calculation
    */
   bool fixedCouplings_;
 
   /**
    *  Include gauge boson mixing
    */
   bool includeGaugeMixing_;
   
   /** @name The level 1 UED vertices. */
   //@{
   /**
    * The \f$\bar{f}^{(1)}f^{(1)}Z^{(0)}\f$
    */
   AbstractFFVVertexPtr theF1F1Z0Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(1)}g^{(0)}\f$
    */
   AbstractFFVVertexPtr theF1F1G0Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(0)}g^{(1)}\f$
    */
   AbstractFFVVertexPtr theF1F0G1Vertex;
 
   /**
    * The \f$g^{(1)}g^{(1)}g\f$ vertex
    */
   AbstractVVVVertexPtr theG1G1G0Vertex;
 
   /**
    * The \f$g\,g\,g^{(1)},g^{(1)}\f$ vertex
    */
   AbstractVVVVVertexPtr theG0G0G1G1Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(1)}\gamma\f$
    */
   AbstractFFVVertexPtr theF1F1P0Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(1)}W\f$
    */
   AbstractFFVVertexPtr theF1F1W0Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(0)}W^{(1)}\f$
    */
   AbstractFFVVertexPtr theF1F0W1Vertex;
 
   /**
    * The \f$\bar{f}^{(1)}f^{(0)}H^{(1)}\f$
    */
   AbstractFFSVertexPtr theF1F0H1Vertex;
 
   /**
    * The \f$ A^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$
    */
   AbstractVSSVertexPtr theP0H1H1Vertex;
 
   /**
    * The \f$ Z^\mu_{(0)}H^+_{(1)}H-_{(1)}\f$
    */
   AbstractVSSVertexPtr theZ0H1H1Vertex;
 
   /**
    * The \f$ W^\pm_{\mu(0)}A_{(1)}H^\mp_{(1)}\f$
    */
   AbstractVSSVertexPtr theW0A1H1Vertex;
 
   /**
    * The \f$ Z^\mu_{\mu(0)}A_{(1)}h_{(1)}\f$
    */
   AbstractVSSVertexPtr theZ0A1h1Vertex;
   
   /**
    * The \f$W^{(1)}Z^{(1)}W_{(0)}\f$ vertex
    */
   AbstractVVVVertexPtr theW0W1W1Vertex;
   //@}
 };
 
 
 }
 
 #endif /* HERWIG_UEDBase_H */
diff --git a/Models/UED/UEDF1F0G1Vertex.h b/Models/UED/UEDF1F0G1Vertex.h
--- a/Models/UED/UEDF1F0G1Vertex.h
+++ b/Models/UED/UEDF1F0G1Vertex.h
@@ -1,111 +1,105 @@
 // -*- C++ -*-
 //
 // UEDF1F0G1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F0G1Vertex_H
 #define HERWIG_UEDF1F0G1Vertex_H
 //
 // This is the declaration of the UEDF1F0G1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the \f$\bar{f}^{1}f^{0}g^{(1)}\f$ vertex
  *
  * @see \ref UEDF1F0G1VertexInterfaces "The interfaces"
  * defined for UEDF1F0G1Vertex.
  */
 class UEDF1F0G1Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F0G1Vertex();
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<UEDF1F0G1Vertex> initUEDF1F0G1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F0G1Vertex & operator=(const UEDF1F0G1Vertex &);
 
 private:
 
   /**
    * The energy at which the coupling was last evaluated 
    */
   Energy2 theq2Last;
 
   /**
    * The value of the coupling when it was last evaluated 
    */
   Complex theCoupLast;
 };
 }
 
 #endif /* HERWIG_UEDF1F0G1Vertex_H */
diff --git a/Models/UED/UEDF1F0H1Vertex.h b/Models/UED/UEDF1F0H1Vertex.h
--- a/Models/UED/UEDF1F0H1Vertex.h
+++ b/Models/UED/UEDF1F0H1Vertex.h
@@ -1,181 +1,175 @@
 // -*- C++ -*-
 //
 // UEDF1F0H1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F0H1Vertex_H
 #define HERWIG_UEDF1F0H1Vertex_H
 //
 // This is the declaration of the UEDF1F0H1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/FFSVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The implementation of the \f$ f_{(1)}f_{(0)}H_{(1)}^\pm\f$ vertex. It inherits 
  * from FFSVertex and implements the setCoupling member function. 
  *
  * @see \ref UEDF1F0H1VertexInterfaces "The interfaces"
  * defined for UEDF1F0H1Vertex.
  */
 class UEDF1F0H1Vertex: public FFSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F0H1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDF1F0H1Vertex> initUEDF1F0H1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F0H1Vertex & operator=(const UEDF1F0H1Vertex &);
 
 private:
 
   /**
    * The compactification radius.
    */
   InvEnergy theRadius;
 
   /**
    * The mass of the \f$W\f$-boson.
    */
   Energy theMw;
 
   /**
    * The mass of the \f$Z\f$-boson.
    */
   Energy theMz;
 
   /**
    * The value of \f$\sin\Theta_W\f$.
    */
   double theSinThetaW;
 
   /**
    * The value of \f$\cos\Theta_W\f$.
    */
   double theCosThetaW;
 
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 theq2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;
 
    /**
    * The value of the left coupling when it was last evaluated.
    */
   Complex theLeftLast;
 
   /**
    * The value of the right coupling when it was last evaluated.
    */
   Complex theRightLast;
 
   /**
    * The PDG code of the 1st particle at the vertex when it was last evaluated
    */
   long theAntiLast;
 
   /**
    * The PDG code of the 2nd particle at the vertex when it was last evaluated
    */
   long theFermLast;
 
   /**
    * The PDG code of the Higgs  particle at the vertex when it was last 
    * evaluated
    */
   long theHLast;
 };
 }
 
 
 #endif /* HERWIG_UEDF1F0H1Vertex_H */
diff --git a/Models/UED/UEDF1F0W1Vertex.h b/Models/UED/UEDF1F0W1Vertex.h
--- a/Models/UED/UEDF1F0W1Vertex.h
+++ b/Models/UED/UEDF1F0W1Vertex.h
@@ -1,191 +1,185 @@
 // -*- C++ -*-
 //
 // UEDF1F0W1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F0W1Vertex_H
 #define HERWIG_UEDF1F0W1Vertex_H
 //
 // This is the declaration of the UEDF1F0W1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the \f$ \bar{f}^{(1)} f^{(0)} W^{(1)}\f$ coupling, where  
  * \f$W^{(1)}\f$ is any level 1 EW gauge boson. The class
  * inherits from FFVVertex and implements the setCoupling virtual member.
  *
  * @see \ref UEDF1F0W1VertexInterfaces "The interfaces"
  * defined for UEDF1F0W1Vertex.
  */
 class UEDF1F0W1Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F0W1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDF1F0W1Vertex> initUEDF1F0W1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F0W1Vertex & operator=(const UEDF1F0W1Vertex &);
 
 private:
 
   /**
    * The value of \f$\sin\theta_W\f$
    */
   double theSinW;  
 
   /**
    * The value of \f$\cos\theta_W\f$
    */
   double theCosW;  
 
   /**
    * The value of \f$\sin\theta_1\f$
    */
   double theSinOne;  
 
   /**
    * The value of \f$\cos\theta_1\f$
    */
   double theCosOne;  
 
   /**
    * The value of \f$\sin(\theta_W - \theta_1)\f$
    */
   double theSinWmO;  
 
   /**
    * The value of \f$\cos(\theta_W - \theta_1)\f$
    */
   double theCosWmO;
   
   /**
    * Store the CKM matrix for the \f$W\f$ interactions 
    */
   vector< vector<Complex> > theCKM;
 
   /**
    * The scale at which the coupling was last evaluated.
    */
   Energy2 theq2last;
 
   /**
    * The value of \f$\sqrt{4\pi\alpha}\f$ when it was last evaluated.
    */
   Complex theCouplast;
   
   /**
    * The value of the left coupling when it was last evaluated.
    */
   Complex theLlast;
 
   /**
    * The value of the right coupling when it was last evaluated.
    */
   Complex theRlast;
 
   /**
    * The last gauge boson in the vertex 
    */
   long theGBlast;
 
   /**
    * The last KK-fermion in the vertex 
    */
   long theKKlast;
 
   /**
    * The last SM fermion in the vertex 
    */
   long theSMlast;
 };
 }
 
 
 #endif /* HERWIG_UEDF1F0W1Vertex_H */
diff --git a/Models/UED/UEDF1F1G0Vertex.h b/Models/UED/UEDF1F1G0Vertex.h
--- a/Models/UED/UEDF1F1G0Vertex.h
+++ b/Models/UED/UEDF1F1G0Vertex.h
@@ -1,111 +1,105 @@
 // -*- C++ -*-
 //
 // UEDF1F1G0Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F1G0Vertex_H
 #define HERWIG_UEDF1F1G0Vertex_H
 //
 // This is the declaration of the UEDF1F1G0Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the \f$\bar{f}^{1}f^{(1)}g\f$ vertex
  *
  * @see \ref UEDF1F1G0VertexInterfaces "The interfaces"
  * defined for UEDF1F1G0Vertex.
  */
 class UEDF1F1G0Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F1G0Vertex();
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<UEDF1F1G0Vertex> initUEDF1F1G0Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F1G0Vertex & operator=(const UEDF1F1G0Vertex &);
 
 private:
 
   /**
    * The energy at which the coupling was last evaluated 
    */
   Energy2 theq2Last;
 
   /**
    * The value of the coupling when it was last evaluated 
    */
   Complex theCoupLast;
 };
 }
 
 #endif /* HERWIG_UEDF1F1G0Vertex_H */
diff --git a/Models/UED/UEDF1F1P0Vertex.h b/Models/UED/UEDF1F1P0Vertex.h
--- a/Models/UED/UEDF1F1P0Vertex.h
+++ b/Models/UED/UEDF1F1P0Vertex.h
@@ -1,127 +1,121 @@
 // -*- C++ -*-
 //
 // UEDF1F1P0Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F1P0Vertex_H
 #define HERWIG_UEDF1F1P0Vertex_H
 //
 // This is the declaration of the UEDF1F1P0Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the coupling of a pair of level-1 KK
  * fermions to a standard Model photon.
  *
  * @see \ref UEDF1F1P0VertexInterfaces "The interfaces"
  * defined for UEDF1F1P0Vertex.
  */
 class UEDF1F1P0Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F1P0Vertex();
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<UEDF1F1P0Vertex> initUEDF1F1P0Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F1P0Vertex & operator=(const UEDF1F1P0Vertex &);
 
 private:
   
   /**
    * The value of the coupling when it was last evaluated .
    */
   Complex theCoupLast;
 
   /**
    * The scale at which the coupling was last evaluated.
    */
   Energy2 theq2Last;
 
   /**
    * The id of the last fermion that the vertex was evaluated for 
    */
   long thefermLast;
 
   /**
    * The value of the left/right coupling when it was last evaluated.
    */
   Complex theLRLast;
 
   /**
    * The charges of the fermions 
    */
   vector<double> theCharges;  
 };
 }
 
 #endif /* HERWIG_UEDF1F1P0Vertex_H */
diff --git a/Models/UED/UEDF1F1W0Vertex.h b/Models/UED/UEDF1F1W0Vertex.h
--- a/Models/UED/UEDF1F1W0Vertex.h
+++ b/Models/UED/UEDF1F1W0Vertex.h
@@ -1,154 +1,148 @@
 // -*- C++ -*-
 //
 // UEDF1F1W0Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F1W0Vertex_H
 #define HERWIG_UEDF1F1W0Vertex_H
 //
 // This is the declaration of the UEDF1F1W0Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the coupling of a pair of level-1
  * fermions to the SM $W$ boson.
  *
  * @see \ref UEDF1F1W0VertexInterfaces "The interfaces"
  * defined for UEDF1F1W0Vertex.
  */
 class UEDF1F1W0Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F1W0Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDF1F1W0Vertex> initUEDF1F1W0Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F1W0Vertex & operator=(const UEDF1F1W0Vertex &);
 
 private:
 
   /**
    *  Whether or not to include mixing
    */
   bool includeMixing_;
 
   /**
    * The value of the inverse radius
    */
   InvEnergy theRadius;
 
   /**
    * The scale at which the coupling was last evaluated.
    */
   Energy2 theQ2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;
   
   /**
    * The value of the left coupling when it was last evaluated.
    */
   Complex theLeftLast;
   
   /**
    * The PDG code of the first fermion for which the vertex was last evaluated.
    */
   long thefermALast;  
 
   /**
    * The PDG code of the second fermion for which the vertex was last evaluated.
    */
   long thefermBLast;  
 };
 }
 
 #endif /* HERWIG_UEDF1F1W0Vertex_H */
diff --git a/Models/UED/UEDF1F1Z0Vertex.h b/Models/UED/UEDF1F1Z0Vertex.h
--- a/Models/UED/UEDF1F1Z0Vertex.h
+++ b/Models/UED/UEDF1F1Z0Vertex.h
@@ -1,170 +1,164 @@
 // -*- C++ -*-
 //
 // UEDF1F1Z0Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDF1F1Z0Vertex_H
 #define HERWIG_UEDF1F1Z0Vertex_H
 //
 // This is the declaration of the UEDF1F1Z0Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the implementation of the level-1 fermion-fermion Z-boson.
  * It inherits from FFVVertex and implements the setCoupling member.
  *
  * @see \ref UEDF1F1Z0VertexInterfaces "The interfaces"
  * defined for UEDF1F1Z0Vertex.
  */
 class UEDF1F1Z0Vertex: public FFVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDF1F1Z0Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
 public:
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDF1F1Z0Vertex> initUEDF1F1Z0Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDF1F1Z0Vertex & operator=(const UEDF1F1Z0Vertex &);
   
 private:
 
   /**
    * The value if \f$\sin^2\theta_W\f$
    */
   double theSin2ThW;
 
   /**
    * The value if \f$\cos\theta_W\f$
    */
   double theCosThW;
 
   /**
    * The value of the inverse radius
    */
   InvEnergy theRadius;
 
   /**
    * The PDG code of the 1st fermion when the vertex was last evaluated
    */
   long theID1Last;
 
   /**
    * The PDG code of the 2nd fermion when the vertex was last evaluated
    */
   long theID2Last;
 
   /**
    * The energy where the coupling was last evaluated
    */
   Energy2 theq2Last;
 
   /**
    *
    * The value of the coupling when it was last evaluated
    */
   Complex theCoupLast;
 
   /**
    *
    * The value of the coupling when it was last evaluated
    */
   Complex theLeftLast;
 
   /**
    *
    * The value of the coupling when it was last evaluated
    */
   Complex theRightLast;  
 };
 }
 
 #endif /* HERWIG_UEDF1F1Z0Vertex_H */
diff --git a/Models/UED/UEDP0H1H1Vertex.h b/Models/UED/UEDP0H1H1Vertex.h
--- a/Models/UED/UEDP0H1H1Vertex.h
+++ b/Models/UED/UEDP0H1H1Vertex.h
@@ -1,114 +1,108 @@
 // -*- C++ -*-
 //
 // UEDP0H1H1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDP0H1H1Vertex_H
 #define HERWIG_UEDP0H1H1Vertex_H
 //
 // This is the declaration of the UEDP0H1H1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The implementation of the \f$A^\mu_{(0)}H_{(1)}^+H_{(1)}^-\f$ vertex. This
  * class inherits from VSSVertex and implements the setCoupling member function.
  *
  * @see \ref UEDP0H1H1VertexInterfaces "The interfaces"
  * defined for UEDP0H1H1Vertex.
  */
 class UEDP0H1H1Vertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDP0H1H1Vertex();
 
 public:
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static NoPIOClassDescription<UEDP0H1H1Vertex> initUEDP0H1H1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDP0H1H1Vertex & operator=(const UEDP0H1H1Vertex &);
 
 private:
 
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 theq2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;  
 };
 }
 
 
 #endif /* HERWIG_UEDP0H1H1Vertex_H */
diff --git a/Models/UED/UEDW0A1H1Vertex.h b/Models/UED/UEDW0A1H1Vertex.h
--- a/Models/UED/UEDW0A1H1Vertex.h
+++ b/Models/UED/UEDW0A1H1Vertex.h
@@ -1,147 +1,141 @@
 // -*- C++ -*-
 //
 // UEDW0A1H1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDW0A1H1Vertex_H
 #define HERWIG_UEDW0A1H1Vertex_H
 //
 // This is the declaration of the UEDW0A1H1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This is the coupling for the vertex \f$ W_{\mu(0)}^\pm A_{(1)}^0 H^\mp_{(1)}\f$.
  * It takes the form:
  * \f[\pm\frac{g(m_W^2 R^2 + 1/2)}{\sqrt{(1 + m_W^2)(1 + m_Z^2)}}
  * \left(p(H_1^\mp) - p(A_1)\right)_\mu \f]
  *
  * @see \ref UEDW0A1H1VertexInterfaces "The interfaces"
  * defined for UEDW0A1H1Vertex.
  */
 class UEDW0A1H1Vertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDW0A1H1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDW0A1H1Vertex> initUEDW0A1H1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDW0A1H1Vertex & operator=(const UEDW0A1H1Vertex &);
 
 private:
 
   /**
    * The mass-squared of the \f$W\f$ boson. 
    */
   Energy2 theMw2;
 
   /**
    * The mass-squared of the \f$Z\f$ boson. 
    */
   Energy2 theMz2;
 
   /**
    * The square of the compactification radius.
    */
   InvEnergy2 theR2;
   
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 theq2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;  
 };
 }
 
 
 #endif /* HERWIG_UEDW0A1H1Vertex_H */
diff --git a/Models/UED/UEDW0W1W1Vertex.h b/Models/UED/UEDW0W1W1Vertex.h
--- a/Models/UED/UEDW0W1W1Vertex.h
+++ b/Models/UED/UEDW0W1W1Vertex.h
@@ -1,167 +1,161 @@
 // -*- C++ -*-
 //
 // UEDW0W1W1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDW0W1W1Vertex_H
 #define HERWIG_UEDW0W1W1Vertex_H
 //
 // This is the declaration of the UEDW0W1W1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Vector/VVVVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 using ThePEG::Helicity::Direction;
 
 /**
  * The coupling for the \f$ W\,W^{(1)}Z^{(1)}\f$ and  \f$ W\,W^{(1)}\gamma^{(1)}\f$ 
  * vertex . The class inherits from VVVVertex and implements 
  * the setCoupling member.
  *
  * @see \ref UEDW0W1W1VertexInterfaces "The interfaces"
  * defined for UEDW0W1W1Vertex.
  */
 class UEDW0W1W1Vertex: public VVVVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDW0W1W1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,
 			   tcPDPtr part2,tcPDPtr part3);
   
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDW0W1W1Vertex> initUEDW0W1W1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDW0W1W1Vertex & operator=(const UEDW0W1W1Vertex &);
 
 private:
 
   /**
    * The value of \f$\sin\theta_W\f$.
    */
   double theSinW;
 
   /**
    * The value of \f$\cos\theta_W\f$.
    */
   double theCosW;
 
   /**
    * The value of \f$\sin\theta_1\f$.
    */
   double theSinThetaOne;
 
   /**
    * The value of \f$\cos\theta_1\f$.
    */
   double theCosThetaOne;
 
   /**
    * The scale at which the coupling was last evaluated.
    */
   Energy2 theq2last;
 
   /**
    * The value of \f$ \sqrt{4\pi\alpha}\f$ when it was last evaluated.
    */
   Complex theElast;
 
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCouplast;
 
   /**
    * The PDG code of the last SM particle in the vertex 
    */
   long theSMlast;
 
   /**
    * The PDG code of the last KK-particle in the vertex 
    */
   long theKKlast;
 };
 }
 
 #endif /* HERWIG_UEDW0W1W1Vertex_H */
diff --git a/Models/UED/UEDZ0A1h1Vertex.h b/Models/UED/UEDZ0A1h1Vertex.h
--- a/Models/UED/UEDZ0A1h1Vertex.h
+++ b/Models/UED/UEDZ0A1h1Vertex.h
@@ -1,140 +1,134 @@
 // -*- C++ -*-
 //
 // UEDZ0A1h1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDZ0A1h1Vertex_H
 #define HERWIG_UEDZ0A1h1Vertex_H
 //
 // This is the declaration of the UEDZ0A1h1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * This class implements the coupling for the \f$A_{(1)}h_{(1)}Z^\mu_{{0}}\f$
  * vertex. It inherits from VSSVertex and implements the setCoupling member.
  *
  * @see \ref UEDZ0A1h1VertexInterfaces "The interfaces"
  * defined for UEDZ0A1h1Vertex.
  */
 class UEDZ0A1h1Vertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDZ0A1h1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
   
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDZ0A1h1Vertex> initUEDZ0A1h1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDZ0A1h1Vertex & operator=(const UEDZ0A1h1Vertex &);
 
 private:
   
   /**
    * The value of \f$ \sin 2\theta_W \f$. 
    */
   double theSin2ThetaW;
 
   /**
    * The value of \f$m_kk/\sqrt{m_kk^2 + m_z^2}\f$
    */
   double theKappa;
     
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 theq2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;  
 };
 }
 
 
 #endif /* HERWIG_UEDZ0A1h1Vertex_H */
diff --git a/Models/UED/UEDZ0H1H1Vertex.h b/Models/UED/UEDZ0H1H1Vertex.h
--- a/Models/UED/UEDZ0H1H1Vertex.h
+++ b/Models/UED/UEDZ0H1H1Vertex.h
@@ -1,154 +1,148 @@
 // -*- C++ -*-
 //
 // UEDZ0H1H1Vertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_UEDZ0H1H1Vertex_H
 #define HERWIG_UEDZ0H1H1Vertex_H
 //
 // This is the declaration of the UEDZ0H1H1Vertex class.
 //
 
 #include "ThePEG/Helicity/Vertex/Scalar/VSSVertex.h"
 #include "UEDBase.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /**
  * The implementation of the \f$Z^\mu_{(0)}H_{(1)}^+H_{(1)}^-\f$ vertex. This
  * class inherits from VSSVertex and implements the setCoupling member function.
  * 
  * The vertex is taken to have the form:
  * \f[\frac{g}{1 + m_W^2R^2}\left(\frac{\cos 2\theta_W}{2\cos\theta_W} -
  * m_W^2 R^2\cos^2\theta_W \right)\left(p(H_{(1)}^-) - p(H_{(1)}^+)\right) \f]
  *
  * @see \ref UEDZ0H1H1VertexInterfaces "The interfaces"
  * defined for UEDZ0H1H1Vertex.
  */
 class UEDZ0H1H1Vertex: public VSSVertex {
 
 public:
 
   /**
    * The default constructor.
    */
   UEDZ0H1H1Vertex();
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
   
   /** Calculate the coupling
    *@param q2 The scale at which to evaluate the coupling
    *@param part1 The first interacting particle 
    *@param part2 The second interacting particle 
    *@param part3 The third interacting particle 
    */
   virtual void setCoupling(Energy2 q2, tcPDPtr part1, tcPDPtr part2,
 			   tcPDPtr part3);
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const {return new_ptr(*this);}
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const {return new_ptr(*this);}
   //@}
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<UEDZ0H1H1Vertex> initUEDZ0H1H1Vertex;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   UEDZ0H1H1Vertex & operator=(const UEDZ0H1H1Vertex &);
 
 private:
 
   /**
    * The value of \f$\cos\theta_W\f$.
    */
   double theCosThetaW;
     
   /**
    * The value of \f$\cos 2\theta_W\f$.
    */
   double theCosTheta2W;
 
   /**
    * The mass-squared of the \f$W\f$ boson.
    */
   Energy2 theMw2;
 
   /**
    * The square of the compactification radius.  
    */
   InvEnergy2 theR2;  
 
   /**
    * The scale at which the coupling was last evaluated. 
    */
   Energy2 theq2Last;
   
   /**
    * The value of the coupling when it was last evaluated.
    */
   Complex theCoupLast;  
 };
 }
 
 
 #endif /* HERWIG_UEDZ0H1H1Vertex_H */
diff --git a/Models/Zprime/ZprimeModel.h b/Models/Zprime/ZprimeModel.h
--- a/Models/Zprime/ZprimeModel.h
+++ b/Models/Zprime/ZprimeModel.h
@@ -1,430 +1,424 @@
 // -*- C++ -*-
 #ifndef HERWIG_ZprimeModel_H
 #define HERWIG_ZprimeModel_H
 //
 // This is the declaration of the ZprimeModel class.
 //
 
 #include "Herwig/Models/General/BSMModel.h"
 #include "ThePEG/Helicity/Vertex/AbstractFFVVertex.h"
 #include "ZprimeModel.fh"
 
 namespace Herwig {
 
 using namespace ThePEG;
 using namespace ThePEG::Helicity;
 
 /**
  * Here is the documentation of the ZprimeModel class.
  *
  * @see \ref ZprimeModelInterfaces "The interfaces"
  * defined for ZprimeModel.
  */
 class ZprimeModel: public BSMModel {
 
 public:
 
   /**
    * The default constructor.
    */
   ZprimeModel();
  
   /** @name Vertices */
   //@{
  
   /**
    * Pointer to the object handling Z prime quark-anti-quark vertex.
    */
   tAbstractFFVVertexPtr vertexZPQQ() const {return _theZPQQVertex;}
 
 public:
 
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
 
   /**
    * The standard Init function used to initialize the interfaces.
    * Called exactly once for each class by the class description system
    * before the main function starts or
    * when this class is dynamically loaded.
    */
   static void Init();
 
   
   /**
    * Return the Z prime top-up left-handed coupling
    */
   double _cZPTU_left() const {return _gZPTU_L;}
 
   /**
    * Return the Z prime top-up right-handed coupling
    */
   double _cZPTU_right() const {return _gZPTU_R;}
 
   /**
    * Return the Z prime d-dbar left-handed coupling
    */
   double _cZPDD_left() const {return _gZPDD_L;}
 
   /**
    * Return the Z prime d-dbar right-handed coupling
    */
   double _cZPDD_right() const {return _gZPDD_R;}
 
   /**
    * Return the Z prime top-anti-top left-handed coupling
    */
   double _cZPTT_left() const {return _gZPTT_L;}
 
   /**
    * Return the Z prime top-anti-top right-handed coupling
    */
   double _cZPTT_right() const {return _gZPTT_R;}
 
   /**
    * Return the Z prime u-ubar left-handed coupling
    */
   double _cZPUU_left() const {return _gZPUU_L;}
 
   /**
    * Return the Z prime u-ubar right-handed coupling
    */
   double _cZPUU_right() const {return _gZPUU_R;}
 
     /**
    * Return the Z prime c-cbar left-handed coupling
    */
   double _cZPCC_left() const {return _gZPCC_L;}
 
   /**
    * Return the Z prime c-cbar right-handed coupling
    */
   double _cZPCC_right() const {return _gZPCC_R;}
 
   /**
    * Return the Z prime b-bbar left-handed coupling
    */
   double _cZPBB_left() const {return _gZPBB_L;}
 
   /**
    * Return the Z prime b-bbar right-handed coupling
    */
   double _cZPBB_right() const {return _gZPBB_R;}
   
     /**
    * Return the Z prime s-sbar left-handed coupling
    */
   double _cZPSS_left() const {return _gZPSS_L;}
 
   /**
    * Return the Z prime c-cbar right-handed coupling
    */
   double _cZPSS_right() const {return _gZPSS_R;}
 
 
   /**
    * Return the Z prime e+e- left-handed coupling
    */
   double _cZPee_left() const {return _gZPee_L;}
 
   /**
    * Return the Z prime e+e- right-handed coupling
    */
   double _cZPee_right() const {return _gZPee_R;}
 
   /**
    * Return the Z prime mu+mu- left-handed coupling
    */
   double _cZPmm_left() const {return _gZPmm_L;}
 
   /**
    * Return the Z prime mu+mu- right-handed coupling
    */
   double _cZPmm_right() const {return _gZPmm_R;}
   
     /**
    * Return the Z prime tau+tau- left-handed coupling
    */
   double _cZPtt_left() const {return _gZPtt_L;}
 
   /**
    * Return the Z prime tau+tau- right-handed coupling
    */
   double _cZPtt_right() const {return _gZPtt_R;}
 
   /**
    * Return the Z prime nu_e nu_ebar left-handed coupling
    */
   double _cZPnuenue_left() const {return _gZPnuenue_L;}
 
   /**
    * Return the Z prime nu_e nu_ebar right-handed coupling
    */
   double _cZPnuenue_right() const {return _gZPnuenue_R;}
 
   /**
    * Return the Z prime nu_mu nu_mubar left-handed coupling
    */
   double _cZPnumnum_left() const {return _gZPnumnum_L;}
 
   /**
    * Return the Z prime nu_mu nu_mubar right-handed coupling
    */
   double _cZPnumnum_right() const {return _gZPnumnum_R;}
   
     /**
    * Return the Z prime nu_tau nu_taubar left-handed coupling
    */
   double _cZPnutnut_left() const {return _gZPnutnut_L;}
 
   /**
    * Return the Z prime nu_tau nu_taubar right-handed coupling
    */
   double _cZPnutnut_right() const {return _gZPnutnut_R;}
 
 
 
   /**
    * Return the overall coupling of the Z prime to quark-anti-quark
    */
   double _cZPoverallCoup() const {return _ZPoverall;}
 
 
 
 protected:
 
   /** @name Standard Interfaced functions. */
   //@{
   /**
    * Initialize this object after the setup phase before saving an
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
   //@}
 
 protected:
 
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
 
   
     
   
   //@}
 
 
 // If needed, insert declarations of virtual function defined in the
 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
 
 
 private:
 
   /**
-   * The static object used to initialize the description of this class.
-   * Indicates that this is a concrete class with persistent data.
-   */
-  static ClassDescription<ZprimeModel> initZprimeModel;
-
-  /**
    * The assignment operator is private and must never be called.
    * In fact, it should not even be implemented.
    */
   ZprimeModel & operator=(const ZprimeModel &);
 
   
   /**
    * Pointer to the object handling the Zp to Quark-antiQuark vertex.
    */
   AbstractFFVVertexPtr  _theZPQQVertex;
 
     /**
    *  Z prime coupling to u-ubar (left-handed)
    */
   double _gZPUU_L;
   
 
   /**
    *  Z prime coupling to u-ubar (right-handed)
    */
   double _gZPUU_R;
  /**
    *  Z prime coupling to d-dbar (left-handed)
    */
   double _gZPDD_L;
   
 
   /**
    *  Z prime coupling to d-dbar (right-handed)
    */
   double _gZPDD_R;
 
  /**
    *  Z prime coupling to c-cbar (left-handed)
    */
   double _gZPCC_L;
   
 
   /**
    *  Z prime coupling to c-cbar (right-handed)
    */
   double _gZPCC_R;
 
  
  /**
    *  Z prime coupling to s-sbar (left-handed)
    */
   double _gZPSS_L;
   
 
   /**
    *  Z prime coupling to s-sbar (right-handed)
    */
   double _gZPSS_R;
 
 
 
   
  
 /**
    *  Z prime coupling to b-bbar (left-handed)
    */
   double _gZPBB_L;
   
 
   /**
    *  Z prime coupling to b-bbar (right-handed)
    */
   double _gZPBB_R;
 
  /**
    *  Z prime coupling to top-up (left-handed)
    */
   double _gZPTU_L;
   
 
   /**
    *  Z prime coupling to top-up (right-handed)
    */
   double _gZPTU_R;
 
  /**
    *  Z prime coupling to top-anti-top (left-handed)
    */
   double _gZPTT_L;
   
 
   /**
    *  Z prime coupling to top-anti-top (right-handed)
    */
   double _gZPTT_R;
 
 
 
    /**
    *  Z prime coupling to e+e- (left-handed)
    */
   double _gZPee_L;
   
 
   /**
    *  Z prime coupling to e+e- (right-handed)
    */
   double _gZPee_R;
 
  
 /**
    *  Z prime coupling to mu+mu- (left-handed)
    */
   double _gZPmm_L;
   
 
   /**
    *  Z prime coupling to mu+mu- (right-handed)
    */
   double _gZPmm_R;
 
  /**
    *  Z prime coupling to tau+tau- (left-handed)
    */
   double _gZPtt_L;
   
 
   /**
    *  Z prime coupling to tau+tau- (right-handed)
    */
   double _gZPtt_R;
 
 
    /**
    *  Z prime coupling to nu_e nu_ebar (left-handed)
    */
   double _gZPnuenue_L;
   
 
   /**
    *  Z prime coupling to nu_e nu_ebar (right-handed)
    */
   double _gZPnuenue_R;
 
  
 /**
    *  Z prime coupling to nu_mu nu_mubar (left-handed)
    */
   double _gZPnumnum_L;
   
 
   /**
    *  Z prime coupling to nu_mu nu_mubar (right-handed)
    */
   double _gZPnumnum_R;
 
  /**
    *  Z prime coupling to nu_tau nu_taubar (left-handed)
    */
   double _gZPnutnut_L;
   
 
   /**
    *  Z prime coupling to nu_tau nu_taubar (right-handed)
    */
   double _gZPnutnut_R;
 
 
  /**
    *  Z prime overall coupling
    */
   double _ZPoverall;
   
 
 
 
 };
 
 }
 
 #endif /* HERWIG_ZprimeModel_H */
diff --git a/Models/Zprime/ZprimeModelZPQQVertex.h b/Models/Zprime/ZprimeModelZPQQVertex.h
--- a/Models/Zprime/ZprimeModelZPQQVertex.h
+++ b/Models/Zprime/ZprimeModelZPQQVertex.h
@@ -1,268 +1,263 @@
 // -*- C++ -*-
 //
 // ZprimeModelZPQQVertex.h is a part of Herwig - A multi-purpose Monte Carlo event generator
 // Copyright (C) 2002-2017 The Herwig Collaboration
 //
 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
 //
 #ifndef HERWIG_ZprimeModelZPQQVertex_H
 #define HERWIG_ZprimeModelZPQQVertex_H
 //
 // This is the declaration of the ZprimeModelZPQQVertex class.
 
 #include "ThePEG/Helicity/Vertex/Vector/FFVVertex.h"
 #include "Herwig/Models/Zprime/ZprimeModel.h"
 #include "ThePEG/PDT/EnumParticles.h"
 
 namespace Herwig {
 using namespace ThePEG;
 
 /** \ingroup Helicity
  *
  *  This is the implementation of the vertex coupling the Standard Model Higgs
  *  to the Standard Model fermions for helicity amplitude calculations
  *
  *  @see FFVVertex
  *  @see VertexBase
  */
 class ZprimeModelZPQQVertex: public FFVVertex {
   
 public:
   
   /**
    * Default constructor.
    */
   ZprimeModelZPQQVertex();
   
   /**
    * Calculate the couplings. 
    * @param q2 The scale \f$q^2\f$ for the coupling at the vertex.
    * @param part1 The ParticleData pointer for the first  particle.
    * @param part2 The ParticleData pointer for the second particle.
    * @param part3 The ParticleData pointer for the third  particle.
   */
   virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3);
 
 public:
   
   /** @name Functions used by the persistent I/O system. */
   //@{
   /**
    * Function used to write out object persistently.
    * @param os the persistent output stream written to.
    */
   void persistentOutput(PersistentOStream & os) const;
 
   /**
    * Function used to read in object persistently.
    * @param is the persistent input stream read from.
    * @param version the version number of the object when written.
    */
   void persistentInput(PersistentIStream & is, int version);
   //@}
   
   /**
    * Standard Init function used to initialize the interfaces.
    */
   static void Init();
 
 protected:
   
   /** @name Clone Methods. */
   //@{
   /**
    * Make a simple clone of this object.
    * @return a pointer to the new object.
    */
   virtual IBPtr clone() const;
 
   /** Make a clone of this object, possibly modifying the cloned object
    * to make it sane.
    * @return a pointer to the new object.
    */
   virtual IBPtr fullclone() const;
   //@}
 
 protected:
   
   /**
    * Initialize this object after the setup phase before saving and
    * EventGenerator to disk.
    * @throws InitException if object could not be initialized properly.
    */
   virtual void doinit();
 
 private:
   
   /**
-   * Describe a concrete class with persistent data.
-   */
-  static ClassDescription<ZprimeModelZPQQVertex> initZprimeModelZPQQVertex;
-  
-  /**
    * Private and non-existent assignment operator.
    */
   ZprimeModelZPQQVertex & operator=(const ZprimeModelZPQQVertex &);
 
    /**
    * Pointer to the model object.
    */
   tcSMPtr _theModel;
 
 
 private:
 
   /**
    * Storage of the couplings.
    */
   //@{
 
   /**
    *  Z prime coupling to top-up (left-handed)
    */
   double _cZPTU_L;
   
 
   /**
    *  Z prime coupling to top-up (right-handed)
    */
   double _cZPTU_R;
 
   /**
    *  Z prime coupling to top-anti-top (left-handed)
    */
   double _cZPTT_L;
   
 
   /**
    *  Z prime coupling to top-anti-top (right-handed)
    */
   double _cZPTT_R;
 
   /**
    *  Z prime coupling to u-ubar (left-handed)
    */
   double _cZPUU_L;
   
 
   /**
    *  Z prime coupling to u-ubar (right-handed)
    */
   double _cZPUU_R;
 
   /**
    *  Z prime coupling to c-cbar (left-handed)
    */
   double _cZPCC_L;
   
 
   /**
    *  Z prime coupling to c-cbar (right-handed)
    */
   double _cZPCC_R;
 
     /**
    *  Z prime coupling to s-sbar (left-handed)
    */
   double _cZPSS_L;
   
 
   /**
    *  Z prime coupling to s-sbar (right-handed)
    */
   double _cZPSS_R;
   
  /**
    *  Z prime coupling to d-dbar (left-handed)
    */
   double _cZPDD_L;
 
   /**
    *  Z prime coupling to d-dbar (right-handed)
    */
   double _cZPDD_R;
 
   /**
    *  Z prime coupling to d-dbar (left-handed)
    */
   double _cZPBB_L;
   
   /**
    *  Z prime coupling to d-dbar (right-handed)
    */
   double _cZPBB_R;
 
     /**
    *  Z prime coupling to e+e- (left-handed)
    */
   double _cZPee_L;
   
   /**
    *  Z prime coupling to e+e- (right-handed)
    */
   double _cZPee_R;
   
  /**
    *  Z prime coupling to mu+mu- (left-handed)
    */
   double _cZPmm_L;
 
   /**
    *  Z prime coupling to mu+mu- (right-handed)
    */
   double _cZPmm_R;
 
   /**
    *  Z prime coupling to tau+tau- (left-handed)
    */
   double _cZPtt_L;
   
   /**
    *  Z prime coupling to tau+tau- (right-handed)
    */
   double _cZPtt_R;
 
 
     /**
    *  Z prime coupling to nu_e nu_ebar (left-handed)
    */
   double _cZPnuenue_L;
   
   /**
    *  Z prime coupling to nu_e nu_ebar (right-handed)
    */
   double _cZPnuenue_R;
   
  /**
    *  Z prime coupling to nu_mu nu_mubar (left-handed)
    */
   double _cZPnumnum_L;
 
   /**
    *  Z prime coupling to nu_mu nu_mubar (right-handed)
    */
   double _cZPnumnum_R;
 
   /**
    *  Z prime coupling to nu_tau nu_taubar (left-handed)
    */
   double _cZPnutnut_L;
   
   /**
    *  Z prime coupling to nu_tau nu_taubar (right-handed)
    */
   double _cZPnutnut_R;
    
   /**
    *  Z prime overall coupling
    */
   double _cZP_o;
 
 
   //@}
 };  
 
 }
 
 #endif /* HERWIG_ZprimeModelZPQQVertex_H */