Index: trunk/source/physics_lists/builders/include/G4FTFBuilder.hh
===================================================================
--- trunk/source/physics_lists/builders/include/G4FTFBuilder.hh	(revision 1229)
+++ trunk/source/physics_lists/builders/include/G4FTFBuilder.hh	(revision 1273)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4FTFBuilder.hh,v 1.1 2009/10/04 16:29:54 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
+// $Id: G4FTFBuilder.hh,v 1.2 2009/12/29 17:54:25 vnivanch Exp $
+// GEANT4 tag $Name: phys-lists-V09-03-03 $
 //
 //---------------------------------------------------------------------------
@@ -45,4 +45,5 @@
 class G4FTFModel;
 class G4ExcitedStringDecay;
+class G4PreCompoundModel;
 
 class G4FTFBuilder : public G4VHadronModelBuilder
@@ -50,5 +51,6 @@
 public: 
 
-  G4FTFBuilder(const G4String& name ="");
+  G4FTFBuilder(const G4String& name ="",
+	       G4PreCompoundModel* p = 0); 
 
   virtual ~G4FTFBuilder();
@@ -66,5 +68,5 @@
   G4FTFModel*            theStringModel;
   G4ExcitedStringDecay*  theStringDecay;
-
+  G4PreCompoundModel*    thePreCompound;
 };
 
Index: trunk/source/physics_lists/builders/include/G4QGSBuilder.hh
===================================================================
--- trunk/source/physics_lists/builders/include/G4QGSBuilder.hh	(revision 1229)
+++ trunk/source/physics_lists/builders/include/G4QGSBuilder.hh	(revision 1273)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4QGSBuilder.hh,v 1.1 2009/10/04 16:29:54 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
+// $Id: G4QGSBuilder.hh,v 1.2 2009/12/29 17:54:25 vnivanch Exp $
+// GEANT4 tag $Name: phys-lists-V09-03-03 $
 //
 //---------------------------------------------------------------------------
@@ -47,4 +47,5 @@
 class G4ExcitedStringDecay;
 class G4QuasiElasticChannel;
+class G4PreCompoundModel;
 class G4ProjectileDiffractiveChannel;
 
@@ -53,5 +54,6 @@
 public: 
 
-  G4QGSBuilder(const G4String& name ="", 
+  G4QGSBuilder(const G4String& name ="",
+	       G4PreCompoundModel* p = 0,
 	       G4bool quasiElastic=true,
 	       G4bool projectileDiffraction=false);
@@ -75,4 +77,5 @@
 
   G4ProjectileDiffractiveChannel* theProjectileDiffraction;
+  G4PreCompoundModel* thePreCompound;
 
   G4bool quasielFlag;
Index: trunk/source/physics_lists/builders/src/G4FTFBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4FTFBuilder.cc	(revision 1229)
+++ trunk/source/physics_lists/builders/src/G4FTFBuilder.cc	(revision 1273)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4FTFBuilder.cc,v 1.2 2009/11/25 19:33:18 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
+// $Id: G4FTFBuilder.cc,v 1.3 2009/12/29 17:54:25 vnivanch Exp $
+// GEANT4 tag $Name: phys-lists-V09-03-03 $
 //
 //---------------------------------------------------------------------------
@@ -46,7 +46,9 @@
 #include "G4LundStringFragmentation.hh"
 #include "G4BinaryCascade.hh"
+#include "G4PreCompoundModel.hh"
 
 
-G4FTFBuilder::G4FTFBuilder(const G4String& aName) : G4VHadronModelBuilder(aName)
+G4FTFBuilder::G4FTFBuilder(const G4String& aName, G4PreCompoundModel* p) 
+  : G4VHadronModelBuilder(aName), thePreCompound(p)
 {}
 
@@ -54,5 +56,4 @@
 {
   delete theStringDecay;
-  //delete theStringModel; // is deleted by the model
 }                                     
 
@@ -65,12 +66,20 @@
   theFTFModel->SetHighEnergyGenerator(theStringModel);
 
-  if(GetName() == "FTFP") {
-    theFTFModel->SetTransport(new G4GeneratorPrecompoundInterface());
-  } else if(GetName() == "FTFC") {
+  if(!thePreCompound) {
+    thePreCompound = new G4PreCompoundModel(new G4ExcitationHandler());
+  }
+
+  if(GetName() == "FTFC") {
     theFTFModel->SetTransport(new G4QStringChipsParticleLevelInterface());
+
   } else if(GetName() == "FTFB") {
-    theFTFModel->SetTransport(new G4BinaryCascade());
+    G4BinaryCascade* bic = new G4BinaryCascade();
+    bic->SetDeExcitation(thePreCompound);
+    theFTFModel->SetTransport(bic);
+
   } else {
-    theFTFModel->SetTransport(new G4GeneratorPrecompoundInterface());
+    G4GeneratorPrecompoundInterface* pint = new G4GeneratorPrecompoundInterface();
+    pint->SetDeExcitation(thePreCompound);
+    theFTFModel->SetTransport(pint);
   }
 
Index: trunk/source/physics_lists/builders/src/G4QGSBuilder.cc
===================================================================
--- trunk/source/physics_lists/builders/src/G4QGSBuilder.cc	(revision 1229)
+++ trunk/source/physics_lists/builders/src/G4QGSBuilder.cc	(revision 1273)
@@ -24,6 +24,6 @@
 // ********************************************************************
 //
-// $Id: G4QGSBuilder.cc,v 1.1 2009/10/04 16:29:54 vnivanch Exp $
-// GEANT4 tag $Name: geant4-09-03 $
+// $Id: G4QGSBuilder.cc,v 1.2 2009/12/29 17:54:25 vnivanch Exp $
+// GEANT4 tag $Name: phys-lists-V09-03-03 $
 //
 //---------------------------------------------------------------------------
@@ -48,8 +48,12 @@
 #include "G4ExcitedStringDecay.hh"
 #include "G4BinaryCascade.hh"
+#include "G4PreCompoundModel.hh"
+#include "G4ExcitationHandler.hh"
 
 
-G4QGSBuilder::G4QGSBuilder(const G4String& aName, G4bool quasiel, G4bool diff) 
-  : G4VHadronModelBuilder(aName), quasielFlag(quasiel), diffFlag(diff)
+G4QGSBuilder::G4QGSBuilder(const G4String& aName, G4PreCompoundModel* p,
+			   G4bool quasiel, G4bool diff) 
+  : G4VHadronModelBuilder(aName), thePreCompound(p), 
+    quasielFlag(quasiel), diffFlag(diff)
 {
   theProjectileDiffraction = 0;
@@ -82,12 +86,20 @@
   } 
 
-  if(GetName() == "QGSP") {
-    theQGSModel->SetTransport(new G4GeneratorPrecompoundInterface());
-  } else if(GetName() == "QGSC") {
+  if(!thePreCompound) {
+    thePreCompound = new G4PreCompoundModel(new G4ExcitationHandler());
+  }
+
+  if(GetName() == "QGSC") {
     theQGSModel->SetTransport(new G4QStringChipsParticleLevelInterface());
+
   } else if(GetName() == "QGSB") {
-    theQGSModel->SetTransport(new G4BinaryCascade());
+    G4BinaryCascade* bic = new G4BinaryCascade();
+    bic->SetDeExcitation(thePreCompound);
+    theQGSModel->SetTransport(bic);
+
   } else {
-    theQGSModel->SetTransport(new G4GeneratorPrecompoundInterface());
+    G4GeneratorPrecompoundInterface* pint = new G4GeneratorPrecompoundInterface();
+    pint->SetDeExcitation(thePreCompound);
+    theQGSModel->SetTransport(pint);
   }
 
