diff --git a/Inputs/DetectorConfiguration/Sharc.detector b/Inputs/DetectorConfiguration/Sharc.detector
index 3bf7193ed3366e88119da2de1b785d9aba308d20..f1146d2767c6573384f1d78c2cd8c1a7fa81f5f6 100644
--- a/Inputs/DetectorConfiguration/Sharc.detector
+++ b/Inputs/DetectorConfiguration/Sharc.detector
@@ -4,7 +4,7 @@ GeneralTarget
 
 %0.2mg/cm2
 Target
-	THICKNESS= 9
+	THICKNESS= 0.01
 	RADIUS=	5
 	MATERIAL= CD2
 	ANGLE= 0
@@ -52,10 +52,10 @@ Sharc
 %Down Stream Box
   SharcBOX
     Z= 31.4
-    ThicknessDector1= 100
-    ThicknessDector2= 100
-    ThicknessDector3= 100
-    ThicknessDector4= 100
+    ThicknessDector1= 140
+    ThicknessDector2= 140
+    ThicknessDector3= 140
+    ThicknessDector4= 140
     ThicknessPAD1= 1000
     ThicknessPAD2= 1000
     ThicknessPAD3= 1000
diff --git a/Inputs/EventGenerator/28Mgdp.reaction b/Inputs/EventGenerator/28Mgdp.reaction
index 378c137462a49176522da8f3967c15e7a3ab4435..d9e0b8827a38c5806c59b28aae0f7099643acb0e 100644
--- a/Inputs/EventGenerator/28Mgdp.reaction
+++ b/Inputs/EventGenerator/28Mgdp.reaction
@@ -24,7 +24,7 @@ TwoBodyReaction
 	Light= 1H
 	Heavy= 29Mg
 	ExcitationEnergyLight= 0.0
-	ExcitationEnergyHeavy= 5.0 
+	ExcitationEnergyHeavy= 0.0 
   CrossSectionPath= flat.txt CSR
 	ShootLight= 1
 	ShootHeavy= 1
diff --git a/NPAnalysis/Sharc/Analysis.cxx b/NPAnalysis/Sharc/Analysis.cxx
index 8d36cdcfe44d7cd9dbb635d07707a05882f275e9..4cd8a8b54b3831c706b731d35a368a22f5c5110d 100644
--- a/NPAnalysis/Sharc/Analysis.cxx
+++ b/NPAnalysis/Sharc/Analysis.cxx
@@ -38,9 +38,9 @@ void Analysis::Init(){
   InitInputBranch();
   
   Sharc = (TSharcPhysics*)  m_DetectorManager -> GetDetector("Sharc");
-  LightCD2 = EnergyLoss("proton_CD2.G4table","G4Table",100 );
-  LightSi = EnergyLoss("proton_Si.G4table","G4Table",100);
-  BeamCD2 = EnergyLoss("Mg28_CD2.G4table","G4Table",100);
+  LightCD2 = EnergyLoss("proton_CD2.G4table","G4Table",10 );
+  LightSi = EnergyLoss("proton_Si.G4table","G4Table",1);
+  BeamCD2 = EnergyLoss("Mg28_CD2.G4table","G4Table",10);
   myReaction = new NPL::Reaction();
   myReaction->ReadConfigurationFile(NPOptionManager::getInstance()->GetReactionFile());
    TargetThickness = m_DetectorManager->GetTargetThickness()*micrometer;
@@ -62,7 +62,11 @@ void Analysis::Init(){
    E_Sharc = 0;
    Si_X_Sharc = 0;
    Si_Y_Sharc = 0;
-}
+
+  double BeamEnergy = BeamCD2.Slow(OriginalBeamEnergy,TargetThickness*0.5,0);
+  myReaction->SetBeamEnergy(BeamEnergy);
+  cout << "Beam energy set at " << BeamEnergy << " MeV" << endl;
+} 
 
 ////////////////////////////////////////////////////////////////////////////////
 void Analysis::TreatEvent(){
@@ -71,12 +75,10 @@ void Analysis::TreatEvent(){
   double XTarget = 0;
   double YTarget = 0;
   TVector3 BeamDirection = TVector3(0,0,1);
-  double BeamEnergy = BeamCD2.Slow(OriginalBeamEnergy,TargetThickness*0.5,0);
-  myReaction->SetBeamEnergy(BeamEnergy);
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   //////////////////////////// LOOP on Sharc//////////////////
-  if(Sharc->Strip_E.size()>0){
+  if(Sharc->Strip_E.size()==1){
     /************************************************/
     // Part 1 : Impact Angle
     ThetaSharcSurface = 0;
@@ -100,7 +102,7 @@ void Analysis::TreatEvent(){
     /************************************************/
     // Part 2 : Impact Energy
 
-    Energy = ELab = 0;
+    Energy = 0;
     if(Sharc->PAD_E[0]>0){
       Energy = Sharc->PAD_E[0];
     }
@@ -108,7 +110,7 @@ void Analysis::TreatEvent(){
     Energy += Sharc->Strip_E[0];
     // Target Correction
     
-   ELab   = LightCD2.EvaluateInitialEnergy( Energy ,TargetThickness*0.5, ThetaNormalTarget);
+    ELab = LightCD2.EvaluateInitialEnergy( Energy ,TargetThickness*0.5, ThetaNormalTarget);
    /************************************************/
     
     /************************************************/
@@ -121,9 +123,8 @@ void Analysis::TreatEvent(){
     // Part 4 : Theta CM Calculation
     ThetaCM  = myReaction -> EnergyLabToThetaCM( ELab , ThetaLab)/deg;
     ThetaLab=ThetaLab/deg;
-    ThetaLab=Rand.Uniform(ThetaLab-0.5,ThetaLab+0.5);
     /************************************************/
-  }//end loop GASPARD
+  }//end loop Sharc 
 
 }
 
diff --git a/NPLib/Sharc/TSharcPhysics.cxx b/NPLib/Sharc/TSharcPhysics.cxx
index a253fb63360e6907ab289e32a339cbf7880e5124..ab99398734034cfa3d290a8fdaefc70fb76673e9 100644
--- a/NPLib/Sharc/TSharcPhysics.cxx
+++ b/NPLib/Sharc/TSharcPhysics.cxx
@@ -718,33 +718,85 @@ void TSharcPhysics::InitializeRootOutput(){
 ////////////////////////////////////////////////////////////////////////////////
 /////   Specific to SharcArray   ////
 void TSharcPhysics::AddBoxDetector(double Z){
+// BOX //
+  double BOX_PCB_Width  = 61.10;
+  double BOX_PCB_Length = 104.00;
+  double BOX_PCB_Thickness = 3.4;
+  double BOX_PCB_Border_LongSide = 1;
+  double BOX_PCB_Border_ShortSide = 2;
+  
+  // Single stage box case (DSSD only)
+  double BOX_PCB_Slot_Width1 = BOX_PCB_Thickness;
+  double BOX_PCB_Slot_Border1 = 4;
+  double BOX_PCB_Slot_Deepness1 = BOX_PCB_Border_ShortSide;
+  
+  // BOX Wafer
   double BOX_Wafer_Width  = 52.20;
   double BOX_Wafer_Length = 76.20;
   
-  double BOX_ActiveArea_Length = 76.2;
-  double BOX_ActiveArea_Width = 52.2;
-  
-  int    BOX_Wafer_Back_NumberOfStrip = 48 ;
   int    BOX_Wafer_Front_NumberOfStrip = 24 ;
+  int    BOX_Wafer_Back_NumberOfStrip = 48 ;
+  
+  // Compute
+  double BOX_LeftOver1 =  BOX_PCB_Length - BOX_PCB_Border_ShortSide - BOX_Wafer_Length - BOX_PCB_Slot_Border1 - BOX_PCB_Slot_Width1 ;
+  double BOX_Exposed_Length1 = BOX_Wafer_Length + BOX_PCB_Slot_Border1 ;
+  
+  double BOX_CenterOffset1 = - 0.5 * BOX_PCB_Length+BOX_PCB_Border_ShortSide+0.5*BOX_Exposed_Length1;
+  double BOX_DetectorSpacing1 = 0.5*BOX_Exposed_Length1+0.5*BOX_PCB_Slot_Width1;
+  
+  double BOX_Wafer_Width_Offset1 = -0.5*BOX_PCB_Width + BOX_PCB_Border_LongSide + 0.5*BOX_Wafer_Width;
+  double BOX_Wafer_Length_Offset1 = -0.5*BOX_PCB_Length + BOX_PCB_Border_ShortSide + 0.5*BOX_Wafer_Length;
+  
+  double BOX_PCB_Slot_Position1 = 0.5*BOX_PCB_Length-BOX_LeftOver1 - 0.5*BOX_PCB_Slot_Width1;
+
+  double StripPitchFront = BOX_Wafer_Length/BOX_Wafer_Front_NumberOfStrip ; //mm
+  double StripPitchBack  = BOX_Wafer_Width/BOX_Wafer_Back_NumberOfStrip ; //mm
   
-  double StripPitchFront = BOX_ActiveArea_Length/BOX_Wafer_Front_NumberOfStrip ; //mm
-  double StripPitchBack  = BOX_ActiveArea_Width/BOX_Wafer_Back_NumberOfStrip ; //mm
+  // Double stage box case (DSSD+PAD) (the wafer is the same but the slot is different to accomodate the additional PAD)
+  double PAD_PCB_Thickness = 3.4;
+
+  double BOX_PCB_Slot_Width2 = BOX_PCB_Thickness + PAD_PCB_Thickness ;
+  double BOX_PCB_Slot_Border2 = 2.7;
+  double BOX_PCB_Slot_Deepness2 = BOX_PCB_Border_ShortSide;
+  
+  double BOX_LeftOver2 =  BOX_PCB_Length - BOX_PCB_Border_ShortSide - BOX_Wafer_Length - BOX_PCB_Slot_Border2 - BOX_PCB_Slot_Width2;
+  double BOX_Exposed_Length2 = BOX_Wafer_Length + BOX_PCB_Slot_Border2 ;
+  
+  double BOX_CenterOffset2 = - 0.5*BOX_PCB_Length+BOX_PCB_Border_ShortSide + 0.5*BOX_Exposed_Length2;
+  double BOX_DetectorSpacing2 = 0.5*BOX_Exposed_Length2 + 0.5*BOX_PCB_Thickness;
+
+  double BOX_Wafer_Width_Offset2 = - 0.5*BOX_PCB_Width + BOX_PCB_Border_LongSide + 0.5*BOX_Wafer_Width;
+  double BOX_Wafer_Length_Offset2 = - 0.5*BOX_PCB_Length + BOX_PCB_Border_ShortSide + 0.5*BOX_Wafer_Length;
   
+  double BOX_PCB_Slot_Position2 = 0.5*BOX_PCB_Length-BOX_LeftOver2 - 0.5*BOX_PCB_Slot_Width2;
+ 
   TVector3 U; TVector3 V;TVector3 Strip_1_1;
+
+
+ // TVector3 WaferCenter1 = TVector3(BOX_CenterOffset2, BOX_DetectorSpacing1, Z )
+ //          StripPos = WaferCenter1 + TVector3(BOX_Wafer_Length*0.5-  0.5*StripPitchFront ,0,BOX_Wafer_Width*0.5 - StripPitchBack*0.5)                  
+  double A1 = BOX_Exposed_Length1*0.5 -BOX_PCB_Slot_Border1- 0.5*StripPitchFront ; 
+  double B1 = BOX_DetectorSpacing1 - 0.5*BOX_PCB_Thickness;
+  double Z1 = Z - BOX_Wafer_Width*0.5 + StripPitchBack*0.5 ;
+
+  double A2 = BOX_Exposed_Length2*0.5 -BOX_PCB_Slot_Border2- 0.5*StripPitchFront ; 
+  double B2 = BOX_DetectorSpacing2 - 0.5*BOX_PCB_Thickness;
+  double Z2 = Z + BOX_Wafer_Width*0.5 - StripPitchBack*0.5 ;
+  
   for(int i = 0 ; i < 4 ; i++){
     m_NumberOfDetector++;
     if(Z<0){// Up Stream
-      if(i==0)      {U=TVector3(1,0,0);V=TVector3(0,0,1);  Strip_1_1=TVector3(-36,42.5,Z-BOX_Wafer_Width/2.)   ;}
-      else if(i==1) {U=TVector3(0,1,0);V=TVector3(0,0,1);  Strip_1_1=TVector3(-42.5,-36,Z-BOX_Wafer_Width/2.)  ;}
-      else if(i==2) {U=TVector3(-1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3(36,-42.5,Z-BOX_Wafer_Width/2.)   ;}
-      else if(i==3) {U=TVector3(0,-1,0);V=TVector3(0,0,1); Strip_1_1=TVector3(42.5,36,Z-BOX_Wafer_Width/2.)    ;}
+      if(i==0)      {U=TVector3(1,0,0);V=TVector3(0,0,1);  Strip_1_1=TVector3( -A1 , B1  ,Z1)   ;}
+      else if(i==1) {U=TVector3(0,1,0);V=TVector3(0,0,1);  Strip_1_1=TVector3( -B1 , -A1 ,Z1)   ;}
+      else if(i==2) {U=TVector3(-1,0,0);V=TVector3(0,0,1); Strip_1_1=TVector3( A1  , -B1 ,Z1)   ;}
+      else if(i==3) {U=TVector3(0,-1,0);V=TVector3(0,0,1); Strip_1_1=TVector3( B1  , A1  ,Z1)   ;}
     }
     
     if(Z>0){//Down Stream
-      if(i==0)      {U=TVector3(-1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(36,40.5,Z+BOX_Wafer_Width/2.)   ;}
-      else if(i==1) {U=TVector3(0,-1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3(-40.5,36,Z+BOX_Wafer_Width/2.)  ;}
-      else if(i==2) {U=TVector3(1,0,0);V=TVector3(0,0,-1);  Strip_1_1=TVector3(-36,-40.5,Z+BOX_Wafer_Width/2.) ;}
-      else if(i==3) {U=TVector3(0,1,0);V=TVector3(0,0,-1);  Strip_1_1=TVector3(40.5,-36,Z+BOX_Wafer_Width/2.)   ;}
+      if(i==0)      {U=TVector3(-1,0,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( A2  ,B2  ,Z2)  ;}
+      else if(i==1) {U=TVector3(0,-1,0);V=TVector3(0,0,-1); Strip_1_1=TVector3( -B2 ,A2  ,Z2)  ;}
+      else if(i==2) {U=TVector3(1,0,0);V=TVector3(0,0,-1);  Strip_1_1=TVector3( -A2 ,-B2 ,Z2)  ;}
+      else if(i==3) {U=TVector3(0,1,0);V=TVector3(0,0,-1);  Strip_1_1=TVector3( B2  ,-A2 ,Z2)  ;}
     }
    
     //   Buffer object to fill Position Array