Index: trunk/source/processes/hadronic/models/management/History
===================================================================
--- trunk/source/processes/hadronic/models/management/History	(revision 962)
+++ trunk/source/processes/hadronic/models/management/History	(revision 1007)
@@ -15,25 +15,8 @@
      ---------------------------------------------------------------
 
-25 February 2009 - V.Ivanchenko (hadr-modman-V09-02-03)
-------------------------------------------------------
--  G4HadronicInteractionRegistry - added protection to the Clean method
-
-14 February 2009 - V.Ivanchenko (hadr-modman-V09-02-02)
-------------------------------------------------------
--  G4HadronicInteractionRegistry - added Clean method
-
-06 February 2009 - V.Ivanchenko (hadr-modman-V09-02-01)
-------------------------------------------------------
-
-23 January 2009 - V.Ivanchenko (hadr-modman-V09-02-00)
-------------------------------------------------------
--  G4HadronicInteractionRegistry - make it as real singleton
--  G4HadronicInteraction, G4InelasticInteraction - move constructor, 
-       destructor and some header files from header to source
-
 19 June 2008 - G.Cosmo  (hadr-modman-V09-01-03)
 -----------------------------------------------
 -  included change introduced in hadr-modman-V09-01-01 and
-   discarded by mistake in the last tag ...
+   discarded by imstake in the last tag ...
 
 19 June 2008 - V.Ivanchenko (hadr-modman-V09-01-02)
Index: trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4HadronicInteraction.hh	(revision 1007)
@@ -25,25 +25,23 @@
 //
 //
-// $Id: G4HadronicInteraction.hh,v 1.9 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
-//
-// Hadronic Interaction  abstract base class
-// This class is the base class for the model classes.
-// It sorts out the energy-range for the models and provides
-// class utilities.
-// original by H.P. Wellisch
-// Modified by J.L.Chuma, TRIUMF, 21-Mar-1997
-// Last modified: 3-Apr-1997
-// Added units to energy initialization: J.L. Chuma  04-Apr-97
-// Modified by J.L.Chuma, 05-May-97  to Initialize theBlockedCounter
-// Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes
-// Adding a registry for memory management of hadronic models, HPW 22-Mar-99
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
-//                          and reorder methods in the header 
+// $Id: G4HadronicInteraction.hh,v 1.8 2007/01/11 05:30:01 dennis Exp $
+// GEANT4 tag $Name: geant4-09-02 $
+//
+ // Hadronic Interaction  abstract base class
+ // This class is the base class for the model classes.
+ // It sorts out the energy-range for the models and provides
+ // class utilities.
+ // original by H.P. Wellisch
+ // Modified by J.L.Chuma, TRIUMF, 21-Mar-1997
+ // Last modified: 3-Apr-1997
+ // Added units to energy initialization: J.L. Chuma  04-Apr-97
+ // Modified by J.L.Chuma, 05-May-97  to Initialize theBlockedCounter
+ // Modified by J.L.Chuma, 08-Jul-97 to implement the Nucleus changes
+ // Adding a registry for memory management of hadronic models, HPW 22-Mar-99
 
 // Class Description
 // This is the base class for all hadronic interaction models in geant4.
-// If you want to implement a new way of producing a final state, please,
-//  inherit from here.
+// If you want to implement a new way of producing a final state, please inherit
+// from here.
 // Class Description - End
  
@@ -52,4 +50,5 @@
  
 #include "G4HadFinalState.hh"
+#include "G4DynamicParticle.hh"
 #include "G4ReactionDynamics.hh"
 #include "G4Material.hh"
@@ -57,133 +56,153 @@
 #include "G4Track.hh"
 #include "G4HadProjectile.hh"
-
-class G4HadronicInteraction
-{
+#include "G4HadronicInteractionRegistry.hh"
+#include "G4HadronicException.hh"
+
+ class G4HadronicInteraction
+ {
+ public:
+    
+    G4HadronicInteraction(const G4String& modelName = "HadronicModel") :
+      verboseLevel(0), theMinEnergy(0.0*GeV), theMaxEnergy(25.0*GeV), 
+      isBlocked(false), theModelName(modelName)
+    { 
+      G4HadronicInteractionRegistry::RegisterMe(this);
+    }
+    
+    virtual ~G4HadronicInteraction()
+    {
+      G4HadronicInteractionRegistry::RemoveMe(this);
+    }
+    
+ private:
+    
+    inline G4HadronicInteraction(
+     const G4HadronicInteraction &right )
+    { *this = right; }
+    
+    inline const G4HadronicInteraction & operator=(
+     const G4HadronicInteraction &right )
+    { 
+     G4String text = "unintended use of G4HadronicInteraction::operator=";
+     throw G4HadronicException(__FILE__, __LINE__, text); 
+     return right;
+    }
+    
+ public:
+    
+    inline G4bool operator==(
+     const G4HadronicInteraction &right ) const
+    { return ( this == (G4HadronicInteraction *) &right ); }
+    
+    inline G4bool operator!=(
+     const G4HadronicInteraction &right ) const
+    { return ( this != (G4HadronicInteraction *) &right ); }
+    
+    inline G4double GetMinEnergy() const
+    { return theMinEnergy; }
+    
+    virtual G4double GetMinEnergy( const G4Material *aMaterial,
+                                  const G4Element *anElement ) const;
+    
+    inline void SetMinEnergy( const G4double anEnergy )
+    { theMinEnergy = anEnergy; }
+    
+    virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement );
+    
+    virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial );
+    
+    inline G4double GetMaxEnergy() const
+    { return theMaxEnergy; }
+    
+    virtual G4double GetMaxEnergy( const G4Material *aMaterial,
+                                  const G4Element *anElement ) const;
+    
+    inline void SetMaxEnergy( const G4double anEnergy )
+    { theMaxEnergy = anEnergy; }
+    
+    virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement );
+    
+    virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial );
+  
+    inline const G4HadronicInteraction *GetMyPointer() const
+    { return this; }
+
+    inline G4int GetVerboseLevel() const
+    { return verboseLevel; }
+
+    inline void SetVerboseLevel( G4int value )
+    { verboseLevel = value; }
+
+    inline const G4String& GetModelName() const
+    { return theModelName; }
+
 public: // With description
-
-    
-  G4HadronicInteraction(const G4String& modelName = "HadronicModel");
-    
-  virtual ~G4HadronicInteraction();
-    
-  virtual G4HadFinalState *ApplyYourself(const G4HadProjectile &aTrack, 
-					 G4Nucleus & targetNucleus ) = 0;
-  // This is the interface to implement for final state production code.
-   
-  virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 
-			      G4Nucleus & /*targetNucleus*/)
-  {  return true;}
- 
-  inline G4double GetMinEnergy() const
-  { return theMinEnergy; }
-    
-  virtual G4double GetMinEnergy( const G4Material *aMaterial,
-				 const G4Element *anElement ) const;
-   
-  inline void SetMinEnergy( const G4double anEnergy )
-  { theMinEnergy = anEnergy; }
-    
-  virtual void SetMinEnergy( G4double anEnergy, G4Element *anElement );
-    
-  virtual void SetMinEnergy( G4double anEnergy, G4Material *aMaterial );
-    
-  inline G4double GetMaxEnergy() const
-  { return theMaxEnergy; }
-    
-  virtual G4double GetMaxEnergy( const G4Material *aMaterial,
-				 const G4Element *anElement ) const;
-    
-  inline void SetMaxEnergy( const G4double anEnergy )
-  { theMaxEnergy = anEnergy; }
-    
-  virtual void SetMaxEnergy( G4double anEnergy, G4Element *anElement );
-    
-  virtual void SetMaxEnergy( G4double anEnergy, G4Material *aMaterial );
-  
-  inline const G4HadronicInteraction *GetMyPointer() const
-  { return this; }
-
-  inline G4int GetVerboseLevel() const
-  { return verboseLevel; }
-
-  inline void SetVerboseLevel( G4int value )
-  { verboseLevel = value; }
-
-  inline const G4String& GetModelName() const
-  { return theModelName; }
+    // This is the interface to implement for final state production code.
+    
+    virtual G4HadFinalState *ApplyYourself(
+            const G4HadProjectile &aTrack, G4Nucleus & targetNucleus ) = 0;
     
 public: // Without description
 
-  virtual void DeActivateFor( G4Material *aMaterial );
-    
-  virtual void ActivateFor( G4Material *aMaterial ) 
-  { 
-    Block(); 
-    SetMaxEnergy(GetMaxEnergy(), aMaterial);
-    SetMinEnergy(GetMinEnergy(), aMaterial);
-  }
-
-  virtual void DeActivateFor( G4Element *anElement ); 
-  virtual void ActivateFor( G4Element *anElement )
-  { 
-    Block(); 
-    SetMaxEnergy(GetMaxEnergy(), anElement);
-    SetMinEnergy(GetMinEnergy(), anElement);
-  }
-
-  virtual G4bool IsBlocked( const G4Material *aMaterial ) const;
-
-  virtual G4bool IsBlocked( const G4Element *anElement) const;
-
-  inline G4bool operator==(const G4HadronicInteraction &right ) const
-  { return ( this == (G4HadronicInteraction *) &right ); }
-    
-  inline G4bool operator!=(const G4HadronicInteraction &right ) const
-  { return ( this != (G4HadronicInteraction *) &right ); }
-    
-private:
-    
-  G4HadronicInteraction(const G4HadronicInteraction &right );
-    
-  const G4HadronicInteraction& operator=(const G4HadronicInteraction &right);
-
-protected:
-
-  inline G4bool IsBlocked() const { return isBlocked;}
-  inline void Block() { isBlocked = true; }
-    
-  G4HadFinalState theParticleChange;
-  // the G4HadFinalState object which is modified and returned
-  // by address by the ApplyYourself method,
-  // (instead of aParticleChange as found in G4VProcess)
-    
-  G4int verboseLevel;
-  // control flag for output messages
-  // 0: silent
-  // 1: warning messages
-  // 2: more
-  // (instead of verboseLevel as found in G4VProcess)
-    
-  G4ReactionDynamics theReactionDynamics;
-    
-  // these two have global validity
-  // units are assumed to be MeV
-    
-  G4double theMinEnergy;
-  G4double theMaxEnergy;
-    
-  G4bool isBlocked;
-
-  G4String theModelName;
-    
-private:
+    virtual void DeActivateFor( G4Material *aMaterial );
+    
+    virtual void ActivateFor( G4Material *aMaterial ) 
+    { 
+      Block(); 
+      SetMaxEnergy(GetMaxEnergy(), aMaterial);
+      SetMinEnergy(GetMinEnergy(), aMaterial);
+    }
+
+    virtual void DeActivateFor( G4Element *anElement ); 
+    virtual void ActivateFor( G4Element *anElement )
+    { 
+      Block(); 
+      SetMaxEnergy(GetMaxEnergy(), anElement);
+      SetMinEnergy(GetMinEnergy(), anElement);
+    }
+
+    virtual G4bool IsBlocked( const G4Material *aMaterial ) const;
+
+    virtual G4bool IsBlocked( const G4Element *anElement) const;
+    
+    virtual G4bool IsApplicable(const G4HadProjectile &/*aTrack*/, 
+                               G4Nucleus & /*targetNucleus*/){  return true;}
+ protected:
+    
+    G4HadFinalState theParticleChange;
+    // the G4HadFinalState object which is modified and returned
+    // by address by the ApplyYourself method,
+    // (instead of aParticleChange as found in G4VProcess)
+    
+    G4int verboseLevel;
+    // control flag for output messages
+    // 0: silent
+    // 1: warning messages
+    // 2: more
+    // (instead of verboseLevel as found in G4VProcess)
+    
+    G4ReactionDynamics theReactionDynamics;
+    
+    // these two have global validity
+    // units are assumed to be MeV
+    
+    G4double theMinEnergy;
+    G4double theMaxEnergy;
+    
+    G4bool IsBlocked() const { return isBlocked;}
+    void Block() { isBlocked = true; }
+    G4bool isBlocked;
+
+    G4String theModelName;
+    
+ private:
         
-   std::vector<std::pair<G4double, G4Material *> > theMinEnergyList;
-   std::vector<std::pair<G4double, G4Material *> > theMaxEnergyList;
-   std::vector<std::pair<G4double, G4Element *> > theMinEnergyListElements;
-   std::vector<std::pair<G4double, G4Element *> > theMaxEnergyListElements;
-   std::vector<G4Material *> theBlockedList;
-   std::vector<G4Element *> theBlockedListElements;
-};
+    std::vector<std::pair<G4double, G4Material *> > theMinEnergyList;
+    std::vector<std::pair<G4double, G4Material *> > theMaxEnergyList;
+    std::vector<std::pair<G4double, G4Element *> > theMinEnergyListElements;
+    std::vector<std::pair<G4double, G4Element *> > theMaxEnergyListElements;
+    std::vector<G4Material *> theBlockedList;
+    std::vector<G4Element *> theBlockedListElements;
+ };
  
 #endif
Index: trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4HadronicInteractionRegistry.hh	(revision 1007)
@@ -24,13 +24,4 @@
 // ********************************************************************
 //
-// $Id: G4HadronicInteractionRegistry.hh,v 1.4 2009/02/14 19:24:52 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
-//
-// 23-Jan-2009 V.Ivanchenko make the class to be a singleton
-
-// Class Description
-// This is the a singleton class to store all hadronic interactions
-// Class Description - End
-
 #ifndef G4HadronicInteractionRegistry_h
 #define G4HadronicInteractionRegistry_h 1
@@ -38,30 +29,32 @@
 #include <vector>
 #include "globals.hh"
-
 class G4HadronicInteraction;
 
 class G4HadronicInteractionRegistry
 {
-public:
-
-  static G4HadronicInteractionRegistry* Instance();
-  // access 
+  public:
   
   ~G4HadronicInteractionRegistry();
+  
+  static void RegisterMe(G4HadronicInteraction * aModel);
+  static void RemoveMe(G4HadronicInteraction * aModel);
+    
+  protected:
 
-  void Clean();
-  //delete models
-  
-  void RegisterMe(G4HadronicInteraction * aModel);
-  //register new model
+  G4HadronicInteractionRegistry(G4String );
+  static G4HadronicInteractionRegistry & theRegistry();
 
-  void RemoveMe(G4HadronicInteraction * aModel);
-  //deregister model
-    
-private:
+  private:
 
-  G4HadronicInteractionRegistry();
+  //  !!!  can not use "copy constructor" nor "default constructor" !!!!
+       G4HadronicInteractionRegistry(const G4HadronicInteractionRegistry &right) 
+       { nModels = right.nModels; }
+       G4HadronicInteractionRegistry() {nModels = 0;}
 
-  static G4HadronicInteractionRegistry* theInstance;
+  //  !!!  Assignment operation is forbidden !!!
+      const G4HadronicInteractionRegistry & operator=(const G4HadronicInteractionRegistry &) 
+      { return *this;}
+
+  void AddModel(G4HadronicInteraction * aModel);
   
   G4int nModels;
Index: trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4InelasticInteraction.hh	(revision 1007)
@@ -25,21 +25,20 @@
 //
 //
-// $Id: G4InelasticInteraction.hh,v 1.6 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// $Id: G4InelasticInteraction.hh,v 1.5 2007/01/11 05:30:12 dennis Exp $
+// GEANT4 tag $Name: geant4-09-02 $
 //
-// Hadronic Process: Inelastic Interaction 
-// This class is an abstract base class, since the pure virtual
-// function ApplyYourself has not been defined yet.
-// original by H.P. Wellisch
-// Modified by J.L. Chuma, TRIUMF, 22-Nov-1996
-// Modified by J.L. Chuma  27-Mar-1997
-// Modified by J.L. Chuma  30-Apr-1997
-// Modified by J.L. Chuma  05-Aug-1997  to pass the original incident particle to
-//                                      CalculateMomenta
-// Modified by J.L. Chuma  05-Jun-1998  to include quasiElastic flag to allow for
-//                                      TwoBody to be called directly, bypassing
-//                                      TwoCluster, and allowing TwoCluster to be
-//                                      called with no secondaries
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
+ // Hadronic Process: Inelastic Interaction 
+ // This class is an abstract base class, since the pure virtual
+ // function ApplyYourself has not been defined yet.
+ // original by H.P. Wellisch
+ // Modified by J.L. Chuma, TRIUMF, 22-Nov-1996
+ // Modified by J.L. Chuma  27-Mar-1997
+ // Modified by J.L. Chuma  30-Apr-1997
+ // Modified by J.L. Chuma  05-Aug-1997  to pass the original incident particle to
+ //                                      CalculateMomenta
+ // Modified by J.L. Chuma  05-Jun-1998  to include quasiElastic flag to allow for
+ //                                      TwoBody to be called directly, bypassing
+ //                                      TwoCluster, and allowing TwoCluster to be
+ //                                      called with no secondaries
  
 #ifndef G4InelasticInteraction_h
@@ -54,13 +53,16 @@
 #include "G4ReactionDynamics.hh"
 
-class G4InelasticInteraction : public G4HadronicInteraction
-{
-public:
+ class G4InelasticInteraction : public G4HadronicInteraction
+ {
+ public:
     
-    G4InelasticInteraction(const G4String& modelName = "LEInelastic"); 
+    G4InelasticInteraction(const G4String& modelName = "LEInelastic") 
+     : G4HadronicInteraction(modelName)
+    { cache = 0.0;}
     
-    virtual ~G4InelasticInteraction();
+    virtual ~G4InelasticInteraction()
+    { }
     
-protected:
+ protected:
     
     G4double Pmltpc( G4int np, G4int nm, G4int nz, G4int n,
@@ -98,10 +100,10 @@
                       G4ReactionProduct &targetParticle,
                       G4bool &incidentHasChanged );
-private:
+   private:
    
       G4double cache;
       G4ThreeVector what;
 
-};
+ };
  
 #endif
Index: trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4V3DNucleus.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4V3DNucleus.hh,v 1.6 2008/05/16 14:02:37 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4V3DNucleus_h
Index: trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VHighEnergyGenerator.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VHighEnergyGenerator.hh,v 1.4 2006/06/29 20:45:41 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VHighEnergyGenerator_h
Index: trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VIntraNuclearTransportModel.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VIntraNuclearTransportModel.hh,v 1.4 2007/01/11 05:29:46 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // $Id: G4IntraNuclearTransportMode.hh,v 1.0 1998/06/30
Index: trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VKineticNucleon.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VKineticNucleon.hh,v 1.4 2006/06/29 20:45:47 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VKineticNucleon_h
Index: trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VNuclearDensity.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VNuclearDensity.hh,v 1.4 2006/06/29 20:45:49 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #ifndef G4VNuclearDensity_h
Index: trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh
===================================================================
--- trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh	(revision 962)
+++ trunk/source/processes/hadronic/models/management/include/G4VPreCompoundModel.hh	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VPreCompoundModel.hh,v 1.5 2007/01/11 05:29:34 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 
Index: trunk/source/processes/hadronic/models/management/src/G4HadronicInteraction.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4HadronicInteraction.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4HadronicInteraction.cc	(revision 1007)
@@ -24,45 +24,27 @@
 // ********************************************************************
 //
-// $Id: G4HadronicInteraction.cc,v 1.4 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
-// Hadronic Interaction  base class
-// original by H.P. Wellisch
-// modified by J.L. Chuma, TRIUMF, 21-Mar-1997
-// Last modified: 04-Apr-1997
-// reimplemented 1.11.2003 JPW.
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
-
+ // Hadronic Interaction  base class
+ // original by H.P. Wellisch
+ // modified by J.L. Chuma, TRIUMF, 21-Mar-1997
+ // Last modified: 04-Apr-1997
+ // reimplemented 1.11.2003 JPW.
+ 
 #include "G4HadronicInteraction.hh"
-#include "G4HadronicInteractionRegistry.hh"
-#include "G4HadronicException.hh"
-
-G4HadronicInteraction::G4HadronicInteraction(const G4String& modelName) :
-  verboseLevel(0), theMinEnergy(0.0*GeV), theMaxEnergy(25.0*GeV), 
-  isBlocked(false), theModelName(modelName)
-{ 
-  G4HadronicInteractionRegistry::Instance()->RegisterMe(this);
-}
-    
-G4HadronicInteraction::~G4HadronicInteraction()
-{
-  G4HadronicInteractionRegistry::Instance()->RemoveMe(this);
-}
- 
-G4double G4HadronicInteraction::GetMinEnergy(
+ 
+ G4double
+  G4HadronicInteraction::GetMinEnergy(
    const G4Material *aMaterial, const G4Element *anElement ) const
-{
-  size_t i;
-  if( IsBlocked(aMaterial) )return 0.*GeV;
-  if( IsBlocked(anElement) )return 0.*GeV;
-  for( i=0; i<theMinEnergyListElements.size(); ++i )
-    {
-      if( anElement == theMinEnergyListElements[i].second )
-	return theMinEnergyListElements[i].first;
+  {
+    size_t i;
+    if( IsBlocked(aMaterial) )return 0.*GeV;
+    if( IsBlocked(anElement) )return 0.*GeV;
+    for( i=0; i<theMinEnergyListElements.size(); ++i )
+    {
+      if( anElement == theMinEnergyListElements[i].second )return theMinEnergyListElements[i].first;
     }
     for( i=0; i<theMinEnergyList.size(); ++i )
     {
-      if( aMaterial == theMinEnergyList[i].second )
-	return theMinEnergyList[i].first;
+      if( aMaterial == theMinEnergyList[i].second )return theMinEnergyList[i].first;
     }
     if(IsBlocked()) return 0.*GeV;
@@ -72,15 +54,17 @@
            << " not found in min energy List" << G4endl;
     return theMinEnergy;
-}
- 
-void G4HadronicInteraction::SetMinEnergy(G4double anEnergy,
-					 G4Element *anElement )
-{
-  if( IsBlocked(anElement) )
-    G4cout << "*** Warning from HadronicInteraction::SetMinEnergy" << G4endl
+  }
+ 
+ void
+  G4HadronicInteraction::SetMinEnergy(
+   G4double anEnergy,
+   G4Element *anElement )
+  {
+    if( IsBlocked(anElement) )
+      G4cout << "*** Warning from HadronicInteraction::SetMinEnergy" << G4endl
            << "    The model is not active for the Element  "
            << anElement->GetName() << "." << G4endl;
     
-  for( size_t i=0; i<theMinEnergyListElements.size(); ++i )
+    for( size_t i=0; i<theMinEnergyListElements.size(); ++i )
     {
       if( anElement == theMinEnergyListElements[i].second )
@@ -90,60 +74,63 @@
       }
     }
-  theMinEnergyListElements.push_back(std::pair<G4double, G4Element *>(anEnergy, anElement));
-}
- 
-void G4HadronicInteraction::SetMinEnergy(G4double anEnergy,
-					 G4Material *aMaterial )
-{
-  if( IsBlocked(aMaterial) )
-    G4cout << "*** Warning from HadronicInteraction::SetMinEnergy" << G4endl
+    theMinEnergyListElements.push_back(std::pair<G4double, G4Element *>(anEnergy, anElement));
+  }
+ 
+ void
+  G4HadronicInteraction::SetMinEnergy(
+   G4double anEnergy,
+   G4Material *aMaterial )
+  {
+    if( IsBlocked(aMaterial) )
+      G4cout << "*** Warning from HadronicInteraction::SetMinEnergy" << G4endl
            << "    The model is not active for the Material "
            << aMaterial->GetName() << "." << G4endl;
     
-  for( size_t i=0; i<theMinEnergyList.size(); ++i )
+    for( size_t i=0; i<theMinEnergyList.size(); ++i )
     {
       if( aMaterial == theMinEnergyList[i].second )
-	{
-	  theMinEnergyList[i].first = anEnergy;
-	  return;
-	}
-    }
-  theMinEnergyList.push_back(std::pair<G4double, G4Material *>(anEnergy, aMaterial));
-}
- 
-G4double G4HadronicInteraction::GetMaxEnergy(const G4Material *aMaterial, 
-					     const G4Element *anElement ) const
-{
-  size_t i;
-  if( IsBlocked(aMaterial) )return 0.0*GeV;
-  if( IsBlocked(anElement) )return 0.0*GeV;
-  for( i=0; i<theMaxEnergyListElements.size(); ++i )
-    {
-      if( anElement == theMaxEnergyListElements[i].second )
-	return theMaxEnergyListElements[i].first;
+      {
+        theMinEnergyList[i].first = anEnergy;
+        return;
+      }
+    }
+    theMinEnergyList.push_back(std::pair<G4double, G4Material *>(anEnergy, aMaterial));
+  }
+ 
+ G4double
+  G4HadronicInteraction::GetMaxEnergy(
+   const G4Material *aMaterial, const G4Element *anElement ) const
+  {
+    size_t i;
+    if( IsBlocked(aMaterial) )return 0.0*GeV;
+    if( IsBlocked(anElement) )return 0.0*GeV;
+    for( i=0; i<theMaxEnergyListElements.size(); ++i )
+    {
+      if( anElement == theMaxEnergyListElements[i].second )return theMaxEnergyListElements[i].first;
     }
     for( i=0; i<theMaxEnergyList.size(); ++i )
     {
-      if( aMaterial == theMaxEnergyList[i].second )
-	return theMaxEnergyList[i].first;
+      if( aMaterial == theMaxEnergyList[i].second )return theMaxEnergyList[i].first;
     }
     if(IsBlocked()) return 0.*GeV;
     if( verboseLevel > 0 )
       G4cout << "*** Warning from HadronicInteraction::GetMaxEnergy" << G4endl
-	     << "    material " << aMaterial->GetName()
-	     << " not found in min energy List" << G4endl;
+           << "    material " << aMaterial->GetName()
+           << " not found in min energy List" << G4endl;
     
     return theMaxEnergy;
-}
- 
-void G4HadronicInteraction::SetMaxEnergy(G4double anEnergy,
-					 G4Element *anElement ) 
-{
-  if( IsBlocked(anElement) )
-    G4cout << "*** Warning from HadronicInteraction::SetMaxEnergy" << G4endl
+  }
+ 
+ void
+  G4HadronicInteraction::SetMaxEnergy(
+   G4double anEnergy,
+   G4Element *anElement ) 
+  {
+    if( IsBlocked(anElement) )
+      G4cout << "*** Warning from HadronicInteraction::SetMaxEnergy" << G4endl
            << "Warning: The model is not active for the Element  "
            << anElement->GetName() << "." << G4endl;
     
-  for( size_t i=0; i<theMaxEnergyListElements.size(); ++i )
+    for( size_t i=0; i<theMaxEnergyListElements.size(); ++i )
     {
       if( anElement == theMaxEnergyListElements[i].second )
@@ -153,73 +140,66 @@
       }
     }
-  theMaxEnergyListElements.push_back(std::pair<G4double, G4Element *>(anEnergy, anElement));
-}
-
-void G4HadronicInteraction::SetMaxEnergy(G4double anEnergy,
-					 G4Material *aMaterial )
-{
-  if( IsBlocked(aMaterial) ) 
-    G4cout << "*** Warning from HadronicInteraction::SetMaxEnergy" << G4endl
+    theMaxEnergyListElements.push_back(std::pair<G4double, G4Element *>(anEnergy, anElement));
+  }
+
+ void
+  G4HadronicInteraction::SetMaxEnergy(
+   G4double anEnergy,
+   G4Material *aMaterial )
+  {
+    if( IsBlocked(aMaterial) ) 
+      G4cout << "*** Warning from HadronicInteraction::SetMaxEnergy" << G4endl
            << "Warning: The model is not active for the Material "
            << aMaterial->GetName() << "." << G4endl;
     
-  for( size_t i=0; i<theMaxEnergyList.size(); ++i )
+    for( size_t i=0; i<theMaxEnergyList.size(); ++i )
     {
       if( aMaterial == theMaxEnergyList[i].second )
-	{
+      {
         theMaxEnergyList[i].first = anEnergy;
         return;
-	}
-    }
-  theMaxEnergyList.push_back(std::pair<G4double, G4Material *>(anEnergy, aMaterial));
-}
-
-void G4HadronicInteraction::DeActivateFor( G4Material *aMaterial )
-{
-  theBlockedList.push_back(aMaterial);
-}
-
-void G4HadronicInteraction::DeActivateFor( G4Element *anElement )
-{
-  theBlockedListElements.push_back(anElement);
-}
-
-G4bool G4HadronicInteraction::IsBlocked( const G4Material *aMaterial ) const
-{
-  for( size_t i=0; i<theBlockedList.size(); ++i )
+      }
+    }
+    theMaxEnergyList.push_back(std::pair<G4double, G4Material *>(anEnergy, aMaterial));
+  }
+
+ void 
+  G4HadronicInteraction::DeActivateFor( G4Material *aMaterial )
+  {
+    theBlockedList.push_back(aMaterial);
+  }
+
+ void 
+  G4HadronicInteraction::DeActivateFor( G4Element *anElement )
+  {
+    theBlockedListElements.push_back(anElement);
+  }
+
+ G4bool 
+  G4HadronicInteraction::IsBlocked( const G4Material *aMaterial ) const
+  {
+    for( size_t i=0; i<theBlockedList.size(); ++i )
     {
       if( aMaterial == theBlockedList[i] )
-	{
-	  return true;
-	}
-    }
-  return false;
-}
- 
-G4bool G4HadronicInteraction::IsBlocked( const G4Element *anElement ) const
-{
-  for( size_t i=0; i<theBlockedListElements.size(); ++i )
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+ 
+ G4bool 
+  G4HadronicInteraction::IsBlocked( const G4Element *anElement ) const
+  {
+    for( size_t i=0; i<theBlockedListElements.size(); ++i )
     {
       if( anElement == theBlockedListElements[i] )
-	{
-	  return true;
-	}
-    }
-  return false;
-}
-
-G4HadronicInteraction::G4HadronicInteraction(const G4HadronicInteraction &right )
-{ 
-  *this = right; 
-}
-    
-const G4HadronicInteraction& 
-G4HadronicInteraction::operator=(const G4HadronicInteraction &right )
-{ 
-  G4String text = "unintended use of G4HadronicInteraction::operator=";
-  throw G4HadronicException(__FILE__, __LINE__, text); 
-  return right;
-}
- 
-/* end of file */
- 
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+ 
+ /* end of file */
+ 
Index: trunk/source/processes/hadronic/models/management/src/G4HadronicInteractionRegistry.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4HadronicInteractionRegistry.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4HadronicInteractionRegistry.cc	(revision 1007)
@@ -24,48 +24,11 @@
 // ********************************************************************
 //
-// $Id: G4HadronicInteractionRegistry.cc,v 1.7 2009/02/25 16:30:18 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
-//
-// 23-Jan-2009 V.Ivanchenko make the class to be a singleton
-
 #include "G4HadronicInteractionRegistry.hh"
 #include "G4HadronicInteraction.hh"
 
-G4HadronicInteractionRegistry* G4HadronicInteractionRegistry::theInstance = 0;
-
-G4HadronicInteractionRegistry* G4HadronicInteractionRegistry::Instance()
+G4HadronicInteractionRegistry & G4HadronicInteractionRegistry::theRegistry()
 {
-  if(0 == theInstance) {
-    static G4HadronicInteractionRegistry manager;
-    theInstance = &manager;
-  }
-  return theInstance;
-}
-
-G4HadronicInteractionRegistry::G4HadronicInteractionRegistry()
-{
-  nModels = 0;
-}
-
-G4HadronicInteractionRegistry::~G4HadronicInteractionRegistry()
-{
-  Clean();
-}
-
-void G4HadronicInteractionRegistry::Clean()
-{
-  //G4cout << "G4HadronicInteractionRegistry::Clean() start " << nModels << G4endl;
-  if(0 < nModels) {
-    for (G4int i=0; i<nModels; i++) {
-      if( allModels[i] ) {
-	//G4cout << "delete " << i << G4endl;
-        //G4cout << allModels[i]->GetModelName() << G4endl;
-	delete allModels[i];
-	allModels[i] = 0;
-      }
-    }
-  }
-  //G4cout << "G4HadronicInteractionRegistry::Clean() is done " << G4endl; 
-  nModels = 0;
+  static G4HadronicInteractionRegistry theRegistryInstance;
+  return theRegistryInstance;
 }
 
@@ -73,13 +36,5 @@
 RegisterMe(G4HadronicInteraction * aModel)
 {
-  if(nModels > 0) {
-    for (G4int i=0; i<nModels; i++) {
-      if( aModel == allModels[i] ) return;
-    }
-  }
-  //G4cout << "Register model <" << aModel->GetModelName() 
-  //<< ">  " << nModels << G4endl;
-  allModels.push_back(aModel);
-  nModels++;
+  theRegistry().AddModel(aModel);
 }
 
@@ -87,13 +42,35 @@
 RemoveMe(G4HadronicInteraction * aModel)
 {
-  if(nModels > 0) {
-    for (G4int i=0; i<nModels; i++) {
-      if( aModel == allModels[i] ) {
-	//G4cout << "DeRegister model <" << aModel->GetModelName() 
-	//<< ">  " << i << G4endl;
-	allModels[i] = 0;
-	return;
-      }
+  theRegistry().allModels.erase(std::find(theRegistry().allModels.begin(),
+                                          theRegistry().allModels.end(), aModel));
+  theRegistry().nModels = theRegistry().allModels.size();
+}
+
+G4HadronicInteractionRegistry::~G4HadronicInteractionRegistry()
+{
+  /*
+  while(allModels.size()!=0)
+  {
+    delete allModels.front();
+  }
+  */
+}
+
+void G4HadronicInteractionRegistry::
+AddModel(G4HadronicInteraction * aModel)
+{
+  G4bool alreadyThere = false;
+  for(G4int i=0; i<nModels; i++)
+  {
+    if(allModels[i]==aModel)
+    {
+      alreadyThere = true;
+      break;
     }
   }
+  if(!alreadyThere)
+  {
+    nModels++;
+    allModels.push_back(aModel);
+  }
 }
Index: trunk/source/processes/hadronic/models/management/src/G4InelasticInteraction.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4InelasticInteraction.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4InelasticInteraction.cc	(revision 1007)
@@ -24,35 +24,26 @@
 // ********************************************************************
 //
-// $Id: G4InelasticInteraction.cc,v 1.12 2009/01/24 11:56:27 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
 //
-// Hadronic Process: Inelastic Interaction 
-// original by H.P. Wellisch
-// modified by J.L. Chuma, TRIUMF, 22-Nov-1996
-// Last modified: 27-Mar-1997
-// J.P. Wellisch: 23-Apr-97: throw G4HadronicException(__FILE__, __LINE__,  removed
-// J.P. Wellisch: 24-Apr-97: correction for SetUpPions
-// Modified by J.L. Chuma, 30-Apr-97: added originalTarget to CalculateMomenta
-//                                    since TwoBody needed to reset the target particle
-// J.L. Chuma, 20-Jun-97: Modified CalculateMomenta to correct the decision process
-//                        for whether to use GenerateXandPt or TwoCluster
-// J.L. Chuma, 06-Aug-97: added original incident particle, before Fermi motion and
-//                        evaporation effects are included, needed for calculating
-//                        self absorption and corrections for single particle spectra
-// HPW removed misunderstanding of LocalEnergyDeposit, 11.04.98.
-// 23-Jan-2009 V.Ivanchenko move constructor and destructor to the body
+//
+ // Hadronic Process: Inelastic Interaction 
+ // original by H.P. Wellisch
+ // modified by J.L. Chuma, TRIUMF, 22-Nov-1996
+ // Last modified: 27-Mar-1997
+ // J.P. Wellisch: 23-Apr-97: throw G4HadronicException(__FILE__, __LINE__,  removed
+ // J.P. Wellisch: 24-Apr-97: correction for SetUpPions
+ // Modified by J.L. Chuma, 30-Apr-97: added originalTarget to CalculateMomenta
+ //                                    since TwoBody needed to reset the target particle
+ // J.L. Chuma, 20-Jun-97: Modified CalculateMomenta to correct the decision process
+ //                        for whether to use GenerateXandPt or TwoCluster
+ // J.L. Chuma, 06-Aug-97: added original incident particle, before Fermi motion and
+ //                        evaporation effects are included, needed for calculating
+ //                        self absorption and corrections for single particle spectra
+ // HPW removed misunderstanding of LocalEnergyDeposit, 11.04.98.
  
 #include "G4InelasticInteraction.hh"
 #include "Randomize.hh"
 #include "G4HadReentrentException.hh"
-
-G4InelasticInteraction::G4InelasticInteraction(const G4String& modelName) 
-  : G4HadronicInteraction(modelName)
-{ cache = 0.0;}
-    
-G4InelasticInteraction::~G4InelasticInteraction()
-{}
- 
-G4double
+ 
+ G4double
   G4InelasticInteraction::Pmltpc(      // used in Cascade functions
    G4int np, G4int nm, G4int nz, G4int n, G4double b, G4double c )
@@ -72,5 +63,5 @@
   }
 
-G4bool
+ G4bool
   G4InelasticInteraction::MarkLeadingStrangeParticle(
    const G4ReactionProduct &currentParticle,
@@ -101,5 +92,5 @@
   }
  
-void
+ void
   G4InelasticInteraction::SetUpPions(
    const G4int np,
@@ -135,5 +126,5 @@
   }
  
-void
+ void
   G4InelasticInteraction::GetNormalizationConstant(
    const G4double energy,  // MeV,  <0 means annihilation channels
@@ -179,5 +170,5 @@
   }
  
-void
+ void
   G4InelasticInteraction::CalculateMomenta(
    G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
@@ -353,5 +344,5 @@
 
  
-void G4InelasticInteraction::
+ void G4InelasticInteraction::
  Rotate(G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec, G4int &vecLen)
  {
@@ -367,5 +358,5 @@
  }      
 
-void
+ void
   G4InelasticInteraction::SetUpChange(
    G4FastVector<G4ReactionProduct,GHADLISTSIZE> &vec,
Index: trunk/source/processes/hadronic/models/management/src/G4V3DNucleus.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4V3DNucleus.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4V3DNucleus.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4V3DNucleus.cc,v 1.5 2006/06/29 20:45:59 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #include "G4V3DNucleus.hh"
Index: trunk/source/processes/hadronic/models/management/src/G4VHighEnergyGenerator.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4VHighEnergyGenerator.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4VHighEnergyGenerator.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VHighEnergyGenerator.cc,v 1.5 2006/06/29 20:46:03 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // G4VHighEnergyGenerator
Index: trunk/source/processes/hadronic/models/management/src/G4VIntraNuclearTransportModel.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4VIntraNuclearTransportModel.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4VIntraNuclearTransportModel.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VIntraNuclearTransportModel.cc,v 1.5 2007/01/11 05:28:56 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 // $Id: G4VIntraNuclearTransportModel.cc,v 1.0 1998/06/30
Index: trunk/source/processes/hadronic/models/management/src/G4VKineticNucleon.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4VKineticNucleon.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4VKineticNucleon.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VKineticNucleon.cc,v 1.3 2006/06/29 20:46:07 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 #include "G4VKineticNucleon.hh"
Index: trunk/source/processes/hadronic/models/management/src/G4VNuclearDensity.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4VNuclearDensity.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4VNuclearDensity.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VNuclearDensity.cc,v 1.3 2006/06/29 20:46:09 gunter Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 
Index: trunk/source/processes/hadronic/models/management/src/G4VPreCompoundModel.cc
===================================================================
--- trunk/source/processes/hadronic/models/management/src/G4VPreCompoundModel.cc	(revision 962)
+++ trunk/source/processes/hadronic/models/management/src/G4VPreCompoundModel.cc	(revision 1007)
@@ -26,5 +26,5 @@
 //
 // $Id: G4VPreCompoundModel.cc,v 1.6 2007/01/11 05:29:10 dennis Exp $
-// GEANT4 tag $Name: geant4-09-02-ref-02 $
+// GEANT4 tag $Name: geant4-09-02 $
 //
 
