diff --git a/Inputs/EventGenerator/24Nadp.reaction b/Inputs/EventGenerator/24Nadp.reaction
index 884ffe2835a1104d9167f051197b58c5b90a5075..34ab09e592d279896b8623992a5f0a2f46c6be4b 100644
--- a/Inputs/EventGenerator/24Nadp.reaction
+++ b/Inputs/EventGenerator/24Nadp.reaction
@@ -24,7 +24,7 @@ TwoBodyReaction
 	Heavy= 25Na
 	ExcitationEnergyLight= 0.0
 	ExcitationEnergyHeavy= 2.2
-  CrossSectionPath= 11Li(d,3He)10He.txt	CSR
+  CrossSectionPath= flat.txt	CSR
 	ShootLight= 1
 	ShootHeavy= 1
   
diff --git a/NPSimulation/include/Sharc.hh b/NPSimulation/include/Sharc.hh
index b63908b0c7f3a52219688c010c3f7b2cc8c04320..505a4c097a11920351224e935d703bfb33e054cb 100644
--- a/NPSimulation/include/Sharc.hh
+++ b/NPSimulation/include/Sharc.hh
@@ -37,7 +37,7 @@
 #include "VDetector.hh"
 
 // NPLib
-//#include "TSharcData.h"
+#include "TSharcData.h"
 using namespace std;
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -45,8 +45,8 @@ namespace SHARC
 {
   // Energy and time Resolution
   const G4double ResoTime    = 0      ;
-  const G4double ResoEnergy  = 0.035  ;// = zzkeV of Resolution   //   Unit is MeV/2.35
-  
+  const G4double ResoEnergy  = 0.035*MeV ;// = zzkeV of Resolution   //   Unit is MeV/2.35
+  const G4double EnergyThreshold = 0.4*MeV;
   // Geometry
   
   // BOX //
@@ -67,8 +67,8 @@ namespace SHARC
   const G4double BOX_Wafer_Length = 76.20*mm;
   
   const G4double BOX_Wafer_DeadLayer_Thickness = 0.1*um;
-  const G4int    BOX_Wafer_Front_NumberOfStrip = 16 ;
-  const G4int    BOX_Wafer_Back_NumberOfStrip = 16 ;
+  const G4int    BOX_Wafer_Front_NumberOfStrip = 48 ;
+  const G4int    BOX_Wafer_Back_NumberOfStrip = 24 ;
   
   // Compute
   const G4double BOX_LeftOver1 =  BOX_PCB_Length - BOX_PCB_Border_ShortSide - BOX_Wafer_Length - BOX_PCB_Slot_Border1 - BOX_PCB_Slot_Width1 ;
@@ -141,7 +141,7 @@ class Sharc : public VDetector
   ////////////////////////////////////////////////////
 public:
   Sharc() ;
-  virtual ~Sharc() ;
+   ~Sharc() ;
   
   ////////////////////////////////////////////////////
   //////// Specific Function of this Class ///////////
@@ -181,7 +181,7 @@ public:
   ///////////Event class to store Data////////////////
   ////////////////////////////////////////////////////
 private:
-  //TSharcData*    m_Event ;
+  TSharcData*    m_Event ;
   
   ////////////////////////////////////////////////////
   ///////////////// Scorer Related ///////////////////
@@ -192,7 +192,7 @@ private:
   void InitializeScorers() ;
   
   //   Scorer Associate to the Silicon
-  G4MultiFunctionalDetector*   m_StripScorer ;
+  G4MultiFunctionalDetector*   m_DSSDScorer ;
   
 private:
   //    Initialize material used in detector definition
diff --git a/NPSimulation/include/SharcScorers.hh b/NPSimulation/include/SharcScorers.hh
index 98aa7d3ef15fa54ef9ec0c98931f34a19a8858ac..8744cdc62e34a2102377efd8ac99db47659c99dc 100644
--- a/NPSimulation/include/SharcScorers.hh
+++ b/NPSimulation/include/SharcScorers.hh
@@ -35,17 +35,17 @@ namespace SHARC {
     
   public: // with description
     PS_Silicon_Rectangle(G4String name, G4double StripPlaneLength, G4double StripPlaneWidth, G4int NumberOfStripLength,G4int NumberOfStripWidth,G4double TriggerThreshold,G4int depth=0);
-    virtual ~PS_Silicon_Rectangle();
+     ~PS_Silicon_Rectangle();
     
   protected: // with description
-    virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*);
+     G4bool ProcessHits(G4Step*, G4TouchableHistory*);
     
   public:
-    virtual void Initialize(G4HCofThisEvent*);
-    virtual void EndOfEvent(G4HCofThisEvent*);
-    virtual void clear();
-    virtual void DrawAll();
-    virtual void PrintAll();
+    void Initialize(G4HCofThisEvent*);
+    void EndOfEvent(G4HCofThisEvent*);
+    void clear();
+    void DrawAll();
+    void PrintAll();
   
   private: // Threshold
     G4double m_TriggerThreshold;
diff --git a/NPSimulation/src/Sharc.cc b/NPSimulation/src/Sharc.cc
index baa7ea8ac8d4a9f13ff043d1c21f4e1f9788f022..e6321fddcba0b8229d4f05dd0806505e4d48d800 100644
--- a/NPSimulation/src/Sharc.cc
+++ b/NPSimulation/src/Sharc.cc
@@ -43,7 +43,7 @@
 
 // NPS
 #include "Sharc.hh"
-#include "GeneralScorers.hh"
+#include "SharcScorers.hh"
 
 // NPL
 #include "NPOptionManager.h"
@@ -62,7 +62,7 @@ using namespace CLHEP;
 // Sharc Specific Method
 Sharc::Sharc(){
   InitializeMaterial();
-  // m_Event = new TSSSDData();
+  m_Event = new TSharcData();
   // Dark Grey
   SiliconVisAtt = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)) ;
   // Green
@@ -136,7 +136,7 @@ void Sharc::ReadConfiguration(string Path){
   bool ReadingStatusBOX = false ;
   bool ReadingStatus    = false ;
   while (!ConfigFile.eof()){
-  int VerboseLevel = NPOptionManager::getInstance()->GetVerboseLevel();
+    int VerboseLevel = NPOptionManager::getInstance()->GetVerboseLevel();
     
     getline(ConfigFile, LineBuffer);
     // cout << LineBuffer << endl;
@@ -409,6 +409,9 @@ void Sharc::ConstructBOXDetector(G4LogicalVolume* world){
                           Box_Wafer_Offset+G4ThreeVector(0,0,0.5*BOX_PCB_Thickness-0.5*m_ThicknessBOX[i][j]),
                           logicWafer,"Box_Wafer",logicBoxDetector,false,i*4+j+1);
       
+      
+      logicWafer->SetSensitiveDetector(m_DSSDScorer);
+      
       // create the PAD
       // Make a single detector geometry
       G4LogicalVolume* logicPADDetector;
@@ -470,17 +473,17 @@ void Sharc::ConstructBOXDetector(G4LogicalVolume* world){
       G4ThreeVector DetectorPosition;
       
       if(m_ThicknessPAD[i][j]>0){ //PAD Case
-       DetectorPosition = G4ThreeVector(-BOX_CenterOffset2,-Box_Wafer_Offset.y(),0);
+        DetectorPosition = G4ThreeVector(-BOX_CenterOffset2,-Box_Wafer_Offset.y(),0);
       }
       
       else{ // No Pad Case
         DetectorPosition = G4ThreeVector(-BOX_CenterOffset1,-Box_Wafer_Offset.y(),0);
       }
-
+      
       // Distance of the PCB to the target
       G4ThreeVector DetectorSpacing =
-        -G4ThreeVector(0, 0,BOX_DetectorSpacing);
-
+      -G4ThreeVector(0, 0,BOX_DetectorSpacing);
+      
       
       DetectorPosition+=DetectorSpacing;
       
@@ -598,142 +601,72 @@ void Sharc::ConstructQQQDetector(G4LogicalVolume* world){
 // Add Detector branch to the EventTree.
 // Called After DetecorConstruction::AddDetector Method
 void Sharc::InitializeRootOutput(){
-  /* RootOutput *pAnalysis = RootOutput::getInstance();
+   RootOutput *pAnalysis = RootOutput::getInstance();
    TTree *pTree = pAnalysis->GetTree();
-   pTree->Branch("SSSD", "TSSSDData", &m_Event) ;*/
+   pTree->Branch("Sharc", "TSharcData", &m_Event) ;
 }
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 // Read sensitive part and fill the Root tree.
 // Called at in the EventAction::EndOfEventAvtion
 void Sharc::ReadSensitive(const G4Event* event){
-  /* m_Event->Clear();
-   //////////////////////////////////////////////////////////////////////////////////////
-   //////////////////////// Used to Read Event Map of detector //////////////////////////
-   //////////////////////////////////////////////////////////////////////////////////////
-   
-   // Si
-   G4THitsMap<G4int>*     DetNbrHitMap;
-   G4THitsMap<G4int>*     StripNbrHitMap;
-   G4THitsMap<G4double>*  EnergyHitMap;
-   G4THitsMap<G4double>*  TimeHitMap;
-   
-   std::map<G4int, G4int*>::iterator DetNbr_itr    ;
-   std::map<G4int, G4int*>::iterator StripNbr_itr  ;
-   std::map<G4int, G4double*>::iterator Energy_itr ;
-   std::map<G4int, G4double*>::iterator Time_itr   ;
-   //////////////////////////////////////////////////////////////////////////////////////
-   //////////////////////////////////////////////////////////////////////////////////////
-   // Read the Scorer associate to the Silicon Strip
-   
-   //DetectorNumber
-   G4int DetNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("Sharc_StripScorer/DetectorNumber");
-   DetNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(DetNbrCollectionID));
-   DetNbr_itr = DetNbrHitMap->GetMap()->begin();
-   
-   //StripNumber
-   G4int StripNbrCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("Sharc_StripScorer/StripNumber");
-   StripNbrHitMap = (G4THitsMap<G4int>*)(event->GetHCofThisEvent()->GetHC(StripNbrCollectionID));
-   
-   //Energy
-   G4int StripEnergyCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("Sharc_StripScorer/StripEnergy");
-   EnergyHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripEnergyCollectionID));
-   
-   //Time
-   G4int StripTimeCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("Sharc_StripScorer/StripTime");
-   TimeHitMap = (G4THitsMap<G4double>*)(event->GetHCofThisEvent()->GetHC(StripTimeCollectionID));
-   
-   G4int sizeN = DetNbrHitMap      ->entries();
-   G4int sizeS = StripNbrHitMap    ->entries();
-   G4int sizeE = EnergyHitMap       ->entries();
-   G4int sizeT = TimeHitMap         ->entries();
-   
-   // Loop on Det Number
-   for (G4int l = 0 ; l < sizeN ; l++)
-   {
-   G4int N     =      *(DetNbr_itr->second);
-   G4int NTrackID  =   DetNbr_itr->first - N;
-   
-   if (N > 0)
-   {
-   m_Event->SetEnergyDetectorNbr(N);
-   m_Event->SetTimeDetectorNbr(N);
-   
-   //  Strip Number
-   StripNbr_itr = StripNbrHitMap->GetMap()->begin();
-   for (G4int h = 0 ; h < sizeS ; h++) {
-   G4int STrackID  =   StripNbr_itr->first  - N ;
-   G4int S         = *(StripNbr_itr->second);
-   
-   if (STrackID == NTrackID) {
-   m_Event->SetEnergyStripNbr(S);
-   m_Event->SetTimeStripNbr(S);
-   }
-   
-   StripNbr_itr++;
-   }
-   
-   //  Energy
-   Energy_itr = EnergyHitMap->GetMap()->begin();
-   for (G4int h = 0 ; h < sizeE ; h++) {
-   G4int ETrackID  =   Energy_itr->first  - N;
-   G4double E      = *(Energy_itr->second);
-   
-   if (ETrackID == NTrackID) {
-   m_Event->SetEnergy( RandGauss::shoot(E, ResoEnergy ) );
-   }
-   
-   Energy_itr++;
-   }
-   
-   
-   //  Time
-   Time_itr = TimeHitMap->GetMap()->begin();
-   for (G4int h = 0 ; h < sizeT ; h++) {
-   G4int TTrackID  =   Time_itr->first   - N ;
-   G4double T     = *(Time_itr->second);
-   
-   if (TTrackID == NTrackID) {
-   m_Event->SetTime( RandGauss::shoot(T, ResoTime ) );
-   }
-   
-   Time_itr++;
-   }
-   
-   }
-   
-   DetNbr_itr++;
-   }
-   
-   // clear map for next event
-   
-   DetNbrHitMap   ->clear();
-   StripNbrHitMap ->clear();
-   EnergyHitMap   ->clear();
-   TimeHitMap     ->clear();*/
+  m_Event->Clear();
+  
+  // DSSD
+  G4THitsMap<G4double*>*     DSSDHitMap;
+  std::map<G4int, G4double**>::iterator    DSSD_itr;
+
+  G4int DSSDCollectionID = G4SDManager::GetSDMpointer()->GetCollectionID("Sharc_DSSDScorer/SharcDSSD");
+  DSSDHitMap = (G4THitsMap<G4double*>*)(event->GetHCofThisEvent()->GetHC(DSSDCollectionID));
+  
+  // Loop on the map
+  for (DSSD_itr = DSSDHitMap->GetMap()->begin() ; DSSD_itr != DSSDHitMap->GetMap()->end() ; DSSD_itr++){
+        
+    G4double* Info = *(DSSD_itr->second);
+    
+    double Energy =  Info[0];
+    double Time  = Info[1];
+    int DetNbr =     (int) Info[2];
+    int StripFront = (int) Info[3];
+    int StripBack =  (int) Info[4];
+
+    m_Event->SetFront_DetectorNbr(DetNbr);
+    m_Event->SetFront_StripNbr(StripFront);
+    m_Event->SetFront_Energy(RandGauss::shoot(Energy, ResoEnergy));
+    m_Event->SetFront_TimeCFD(RandGauss::shoot(Time, ResoTime));
+    m_Event->SetFront_TimeLED(RandGauss::shoot(Time, ResoTime));
+    
+    m_Event->SetBack_DetectorNbr(DetNbr);
+    m_Event->SetBack_StripNbr(StripBack);
+    m_Event->SetBack_Energy(RandGauss::shoot(Energy, ResoEnergy));
+    m_Event->SetBack_TimeCFD(RandGauss::shoot(Time, ResoTime));
+    m_Event->SetBack_TimeLED(RandGauss::shoot(Time, ResoTime));
+  }
+  
+  // clear map for next event
+  DSSDHitMap->clear();
 }
 
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 void Sharc::InitializeScorers(){
-  /*
-   //   Silicon Associate Scorer
-   m_StripScorer = new G4MultiFunctionalDetector("Sharc_StripScorer");
-   
-   G4VPrimitiveScorer* DetNbr   = new GENERALSCORERS::PSDetectorNumber("DetectorNumber","Sharc_", 0);
-   G4VPrimitiveScorer* StripNbr = new PSStripNumber("StripNumber",0,SiliconSize, NumberOfStrip);
-   G4VPrimitiveScorer* Energy   = new GENERALSCORERS::PSEnergy("StripEnergy","Sharc_", 0);
-   G4VPrimitiveScorer* TOF      = new GENERALSCORERS::PSTOF("StripTime","Sharc_", 0);
-   
-   
-   //and register it to the multifunctionnal detector
-   m_StripScorer->RegisterPrimitive(DetNbr);
-   m_StripScorer->RegisterPrimitive(StripNbr);
-   m_StripScorer->RegisterPrimitive(Energy);
-   m_StripScorer->RegisterPrimitive(TOF);
-   
-   //   Add All Scorer to the Global Scorer Manager
-   G4SDManager::GetSDMpointer()->AddNewDetector(m_StripScorer) ;*/
+  
+  //   Silicon Associate Scorer
+  m_DSSDScorer = new G4MultiFunctionalDetector("Sharc_DSSDScorer");
+  
+  G4VPrimitiveScorer* DSSDScorer =
+    new  SHARC::PS_Silicon_Rectangle("SharcDSSD",
+                                  BOX_Wafer_Length,
+                                  BOX_Wafer_Width,
+                                  BOX_Wafer_Back_NumberOfStrip ,
+                                  BOX_Wafer_Front_NumberOfStrip,
+                                  EnergyThreshold);
+
+  //and register it to the multifunctionnal detector
+  m_DSSDScorer->RegisterPrimitive(DSSDScorer);
+  
+  //   Add All Scorer to the Global Scorer Manager
+  G4SDManager::GetSDMpointer()->AddNewDetector(m_DSSDScorer) ;
 }
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
diff --git a/NPSimulation/src/SharcScorers.cc b/NPSimulation/src/SharcScorers.cc
index 243700fe9c28aff2b92adf6b748731ec513fb749..38b6c3484254feb7df1a0c756876a4a5b64b88d7 100644
--- a/NPSimulation/src/SharcScorers.cc
+++ b/NPSimulation/src/SharcScorers.cc
@@ -46,8 +46,7 @@ PS_Silicon_Rectangle::~PS_Silicon_Rectangle(){
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 G4bool PS_Silicon_Rectangle::ProcessHits(G4Step* aStep, G4TouchableHistory*){
-  G4double* EnergyAndTime = new G4double[2];
-  
+  G4double* EnergyAndTime = new G4double[5];
   EnergyAndTime[0] = aStep->GetTotalEnergyDeposit();
   
   // If the energy deposit is below the threshold, the deposit is ignored
@@ -62,9 +61,13 @@ G4bool PS_Silicon_Rectangle::ProcessHits(G4Step* aStep, G4TouchableHistory*){
   m_Position  = aStep->GetPreStepPoint()->GetPosition();
   m_Position = aStep->GetPreStepPoint()->GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(m_Position);
   
-  m_StripLengthNumber = (int)((m_Position(1) + m_StripPlaneLength / 2.) / m_StripPitchLength ) + 1  ;
-  m_StripWidthNumber = (int)((m_Position(2) + m_StripPlaneWidth / 2.) / m_StripPitchWidth ) + 1  ;
+  m_StripLengthNumber = (int)((m_Position.x() + m_StripPlaneLength / 2.) / m_StripPitchLength ) + 1  ;
+  m_StripWidthNumber = (int)((m_Position.y() + m_StripPlaneWidth / 2.) / m_StripPitchWidth ) + 1  ;
 
+  EnergyAndTime[2] = m_DetectorNumber;
+  EnergyAndTime[3] = m_StripLengthNumber;
+  EnergyAndTime[4] = m_StripWidthNumber;
+  
   //Rare case where particle is close to edge of silicon plan
   if (m_StripLengthNumber == m_NumberOfStripLength+1) m_StripLengthNumber = m_StripLengthNumber;
   if (m_StripWidthNumber == m_NumberOfStripWidth+1) m_StripWidthNumber = m_StripWidthNumber;
@@ -72,7 +75,6 @@ G4bool PS_Silicon_Rectangle::ProcessHits(G4Step* aStep, G4TouchableHistory*){
   m_Index =  aStep->GetTrack()->GetTrackID() + m_DetectorNumber * 1e3 + m_StripLengthNumber * 1e6 + m_StripWidthNumber * 1e9;
   EvtMap->set(m_Index, EnergyAndTime);
   return TRUE;
-
 }
 
 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......