diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/SiLorentzAngleSvc/SiLorentzAngleSvc.h b/InnerDetector/InDetConditions/SiLorentzAngleSvc/SiLorentzAngleSvc/SiLorentzAngleSvc.h
index a30c4b1d19ac9fc716b2d86b1f579479d12d6260..8b8fbbd8b2b0ddab67a90924cf2b83c1dc743ae7 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/SiLorentzAngleSvc/SiLorentzAngleSvc.h
+++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/SiLorentzAngleSvc/SiLorentzAngleSvc.h
@@ -19,7 +19,7 @@
 #include "AthenaBaseComps/AthService.h"
 #include "AthenaKernel/IOVSvcDefs.h"
 #include "StoreGate/DataHandle.h"
-#include "SiPropertiesSvc/SiliconProperties.h"
+#include "SiPropertiesSvc/ISiPropertiesSvc.h"
 // Amg
 #include "GeoPrimitives/GeoPrimitives.h"
 
@@ -148,6 +148,7 @@ private:
   bool m_isPixel;  
 
   InDet::SiliconProperties m_siProperties;
+  ServiceHandle<ISiPropertiesSvc> m_siPropertiesSvc;
   const InDetDD::SiDetectorManager * m_detManager;
 
   std::vector<double> m_lorentzShift;
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/LorentzAngleSvcSetup.py b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/LorentzAngleSvcSetup.py
index 3f85d0bdf36427e022e1b5988701817611100e7f..7407210af49215db5ba1409906e32a2f50db0ac0 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/LorentzAngleSvcSetup.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/LorentzAngleSvcSetup.py
@@ -48,16 +48,19 @@ class LorentzAngleSvcSetup:
 
         from AthenaCommon.DetFlags      import DetFlags
 
+        from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesSvc
+
         ##
         ## Pixel
         ##
         if ( DetFlags.detdescr.pixel_on() ):
 
             from PixelLorentzAngleSvcSetup import pixelLorentzAngleSvcSetup
-
             self.pixel = pixelLorentzAngleSvcSetup.PixelLorentzAngleSvc
             self.pixelSiliconConditionsSvc = pixelLorentzAngleSvcSetup.PixelSiliconConditionsSvc
             self.PixelSiliconConditionsSvc = pixelLorentzAngleSvcSetup.PixelSiliconConditionsSvc
+            self.pixelSiPropertiesSvc      = pixelLorentzAngleSvcSetup.PixelSiPropertiesSvc
+            self.PixelSiPropertiesSvc      = pixelLorentzAngleSvcSetup.PixelSiPropertiesSvc
 
         ##
         ## SCT 
@@ -69,6 +72,8 @@ class LorentzAngleSvcSetup:
             self.sct   = sctLorentzAngleSvcSetup.SCTLorentzAngleSvc
             self.sctSiliconConditionsSvc  = sctLorentzAngleSvcSetup.SCT_SiliconConditionsSvc
             self.SCT_SiliconConditionsSvc = sctLorentzAngleSvcSetup.SCT_SiliconConditionsSvc
+            self.sctSiPropertiesSvc       = sctLorentzAngleSvcSetup.SCT_SiPropertiesSvc
+            self.SCT_SiPropertiesSvc      = sctLorentzAngleSvcSetup.SCT_SiPropertiesSvc
 
     # Force the Lorentz angle sercive to use SiliconConditions service (which are assumed to use the DB)
     # Default is to decide based on GeoModel.
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleSvcSetup.py b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleSvcSetup.py
index de2dcbeb1b5835aa9cd3994ac2108b81bf547c5d..d263ae4affa9c410e4b91696735959ae8f76535c 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleSvcSetup.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/PixelLorentzAngleSvcSetup.py
@@ -40,9 +40,8 @@ class PixelLorentzAngleSvcSetup:
         if hasattr(svcMgr,'PixelLorentzAngleSvc'):
             pixelLorentzAngleSvc = svcMgr.PixelLorentzAngleSvc
         else :
-            pixelLorentzAngleSvc = SiLorentzAngleSvc(name="PixelLorentzAngleSvc",
-                                                     DetectorName="Pixel")
-            svcMgr+=pixelLorentzAngleSvc     
+            pixelLorentzAngleSvc = SiLorentzAngleSvc(name="PixelLorentzAngleSvc",DetectorName="Pixel")
+            svcMgr+=pixelLorentzAngleSvc
 
         # Init PixelSiliconConditionsSvc
         if hasattr(svcMgr,'PixelSiliconConditionsSvc'):
@@ -54,11 +53,16 @@ class PixelLorentzAngleSvcSetup:
 
         pixelSiliconConditionsSvc.DepletionVoltage=10.0
 
+        from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesSvc
+        pixelSiPropertiesSvc=SiPropertiesSvc(name="PixelSiPropertiesSvc",DetectorName="Pixel",SiConditionsServices=pixelSiliconConditionsSvc)
+        svcMgr+=pixelSiPropertiesSvc
+
         # Pass the silicon conditions services to the Lorentz angle service
         # Also make sure UseMagFieldTool is True as AtlasGeoModel sets this to False
         # if loaded first.
         pixelLorentzAngleSvc.UseMagFieldSvc = True
         pixelLorentzAngleSvc.SiConditionsServices = pixelSiliconConditionsSvc
+        pixelLorentzAngleSvc.SiPropertiesSvc = pixelSiPropertiesSvc
         #pixelLorentzAngleSvc.CorrectionFactor = 0.900
         #Load Correction factor from database
         from IOVDbSvc.CondDB import conddb
@@ -75,7 +79,10 @@ class PixelLorentzAngleSvcSetup:
         self.PixelLorentzAngleSvc = pixelLorentzAngleSvc
         self.pixelSiliconConditionsSvc = pixelSiliconConditionsSvc
         self.PixelSiliconConditionsSvc = pixelSiliconConditionsSvc
+        self.pixelSiPropertiesSvc      = pixelSiPropertiesSvc
+        self.PixelSiPropertiesSvc      = pixelSiPropertiesSvc
 
+        self.PixelSiPropertiesSvc.UseConditionsDB = True
 
     # Force the Lorentz angle sercive to use SiliconConditions service (which are assumed to use the DB)
     # Default is to decide based on GeoModel.
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/SCTLorentzAngleSvcSetup.py b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/SCTLorentzAngleSvcSetup.py
index 7a8f67d84907a8f1955387cbdfc112565ad0baa6..1a9fbbc0e86156d624755f918702ad5744f7c96c 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/SCTLorentzAngleSvcSetup.py
+++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/python/SCTLorentzAngleSvcSetup.py
@@ -48,10 +48,8 @@ class SCTLorentzAngleSvcSetup:
         if hasattr(svcMgr,'SCTLorentzAngleSvc'):
             sctLorentzAngleSvc = svcMgr.SCTLorentzAngleSvc
         else :
-            sctLorentzAngleSvc = SiLorentzAngleSvc(name="SCTLorentzAngleSvc",
-                                                   DetectorName="SCT")
-            svcMgr+=sctLorentzAngleSvc     
-            
+            sctLorentzAngleSvc = SiLorentzAngleSvc(name="SCTLorentzAngleSvc",DetectorName="SCT")
+            svcMgr+=sctLorentzAngleSvc
        
         # Init PixelSiliconConditionsSvc
         if hasattr(svcMgr,'SCT_SiliconConditionsSvc'):
@@ -61,16 +59,24 @@ class SCTLorentzAngleSvcSetup:
             sctSiliconConditionsSvc=SCT_SiliconConditionsSvc()
             svcMgr+=sctSiliconConditionsSvc
 
+        from SiPropertiesSvc.SiPropertiesSvcConf import SiPropertiesSvc
+        sctSiPropertiesSvc=SiPropertiesSvc(name="SCT_SiPropertiesSvc",DetectorName="SCT",SiConditionsServices=sctSiliconConditionsSvc)
+        svcMgr+=sctSiPropertiesSvc
+
         # Pass the silicon conditions services to the Lorentz angle service
         # Also make sure UseMagFieldTool is True as AtlasGeoModel sets this to False
         # if loaded first.
         sctLorentzAngleSvc.UseMagFieldSvc = True
         sctLorentzAngleSvc.SiConditionsServices = sctSiliconConditionsSvc
+        sctLorentzAngleSvc.SiPropertiesSvc = sctSiPropertiesSvc
 
         self.SCTLorentzAngleSvc = sctLorentzAngleSvc
         self.sctSiliconConditionsSvc = sctSiliconConditionsSvc
         self.SCT_SiliconConditionsSvc = sctSiliconConditionsSvc
+        self.sctSiPropertiesSvc       = sctSiPropertiesSvc
+        self.SCT_SiPropertiesSvc      = sctSiPropertiesSvc
 
+        self.SCT_SiPropertiesSvc.UseConditionsDB = True
 
     # Force the Lorentz angle sercive to use SiliconConditions service (which are assumed to use the DB)
     # Default is to decide based on GeoModel.
diff --git a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/SiLorentzAngleSvc.cxx b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/SiLorentzAngleSvc.cxx
index b0765bc1eefd24f75b0164b3c61271168210005d..c52362a86e88605931e986a0ca446799a39f3a35 100644
--- a/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/SiLorentzAngleSvc.cxx
+++ b/InnerDetector/InDetConditions/SiLorentzAngleSvc/src/SiLorentzAngleSvc.cxx
@@ -25,6 +25,7 @@ SiLorentzAngleSvc::SiLorentzAngleSvc( const std::string& name, ISvcLocator* pSvc
   AthService(name, pSvcLocator),
   m_pixelDefaults(false),
   m_sctDefaults(false),
+	m_siPropertiesSvc("SiPropertiesSvc",name),
   m_siConditionsSvc("PixelSiliconConditionsSvc", name),
   m_magFieldSvc("AtlasFieldSvc", name),
   m_detStore("StoreGateSvc/DetectorStore", name),
@@ -37,6 +38,7 @@ SiLorentzAngleSvc::SiLorentzAngleSvc( const std::string& name, ISvcLocator* pSvc
   m_bfieldFolders.push_back("/GLOBAL/BField/Map");
   m_bfieldFolders.push_back("/EXT/DCS/MAGNETS/SENSORDATA");
     
+	declareProperty("SiPropertiesSvc",m_siPropertiesSvc,"SiPropertiesSvc");
   declareProperty("SiConditionsServices", m_siConditionsSvc);
   declareProperty("DetectorName", m_detectorName="Pixel", "Detector name (Pixel or SCT)");
   // Temperature and voltages from job options only used if SiConditionsServices is None or
@@ -72,6 +74,8 @@ StatusCode SiLorentzAngleSvc::initialize() {
 
   ATH_MSG_INFO( "SiLorentzAngleSvc Initialized" );
 
+  CHECK(m_siPropertiesSvc.retrieve());
+
   // Detector store
   CHECK(m_detStore.retrieve());
 
@@ -430,9 +434,19 @@ void SiLorentzAngleSvc::updateCache(const IdentifierHash & elementHash, const Am
  
   double meanElectricField = 0;
   if (depletionDepth) { meanElectricField = biasVoltage / depletionDepth; }
-  double mobility = 0;
-  m_siProperties.setConditions(temperature, meanElectricField);
-  mobility = m_siProperties.signedHallMobility(element->carrierType());
+  const InDet::SiliconProperties &siProperties = m_siPropertiesSvc->getSiProperties(elementHash);
+  double mobility = siProperties.signedHallMobility(element->carrierType());
+
+  // should be removed in rel.22
+  if (m_sctDefaults && !m_isPixel) {
+    m_siProperties.setConditions(temperature, meanElectricField);
+    mobility = m_siProperties.signedHallMobility(element->carrierType());
+  }
+  if (m_pixelDefaults && m_isPixel) {
+    m_siProperties.setConditions(temperature, meanElectricField);
+    mobility = m_siProperties.signedHallMobility(element->carrierType());
+  }
+
   // Get magnetic field. This first checks that field cache is valid.
   const Amg::Vector3D& magneticField = getMagneticField(elementHash, locPos, useLocPos);
   
diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiPropertiesSvc.h b/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiPropertiesSvc.h
index 69efba3586a6d943bf206706393a7e7668458182..cb26af739ae750c6a26e9e92a6e0bc7dc2326d7c 100644
--- a/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiPropertiesSvc.h
+++ b/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiPropertiesSvc.h
@@ -66,6 +66,8 @@ private:
   // Properties
   double m_temperatureMin;
   double m_temperatureMax;
+  double m_electronSaturationVelocity;
+  double m_holeSaturationVelocity;
   std::string m_detectorName;
   ServiceHandle<ISiliconConditionsSvc> m_siConditionsSvc;
   ServiceHandle<StoreGateSvc> m_detStore;
diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiliconProperties.h b/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiliconProperties.h
index 8417aa06c98d237277f123c66707bc7f82e4b793..e9a4901ed06e6be06feb8dbbe658ed809abc6e5c 100755
--- a/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiliconProperties.h
+++ b/InnerDetector/InDetConditions/SiPropertiesSvc/SiPropertiesSvc/SiliconProperties.h
@@ -36,6 +36,8 @@ public:
   double holeHallMobility() const;
   double electronDiffusionConstant() const;
   double holeDiffusionConstant() const;
+  double electronSaturationVelocity() const;
+  double holeSaturationVelocity() const;
   
   double electronHolePairsPerEnergy() const;
   
@@ -66,6 +68,8 @@ public:
   void setHoleHallMobility(double mobility);
   void setElectronDiffusionConstant(double diffusionConstant);
   void setHoleDiffusionConstant(double diffusionConstant);
+  void setElectronSaturationVelocity(double electronSaturationVelocity);
+  void setHoleSaturationVelocity(double holeSaturationVelocity);
   void setElectronHolePairsPerEnergy(double ehPairsPerEnergy);
 
 private:
@@ -75,6 +79,8 @@ private:
   double m_holeHallMobility;
   double m_electronDiffusionConstant;
   double m_holeDiffusionConstant;
+  double m_electronSaturationVelocity;
+  double m_holeSaturationVelocity;
   double m_ehPairsPerEnergy;
 
   bool   m_override; // signal that quantities are overriden and recalculation are disabled.
diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiPropertiesSvc.cxx b/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiPropertiesSvc.cxx
index 42d813129512a9be6bfe37969c4e50a0d7c9a1f7..8a53b7451f16eeef08b9d0f08f68c7c24455cb64 100644
--- a/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiPropertiesSvc.cxx
+++ b/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiPropertiesSvc.cxx
@@ -21,8 +21,10 @@ const double DEFAULTTEMPERATURE = -7;  // Degree C
 const double DEFAULTDEPLVOLTAGE = 70;  // Volt
 const double DEFAULTBIASVOLTAGE = 150; // Volt
 
-SiPropertiesSvc::SiPropertiesSvc( const std::string& name, ISvcLocator* pSvcLocator ) : 
+SiPropertiesSvc::SiPropertiesSvc( const std::string& name, ISvcLocator* pSvcLocator ):
   AthService(name, pSvcLocator),
+  m_electronSaturationVelocity(1.53e9),
+  m_holeSaturationVelocity(1.62e8),
   m_siConditionsSvc("PixelSiliconConditionsSvc", name),
   m_detStore("StoreGateSvc/DetectorStore", name),
   m_conditionsSvcValid(false),
@@ -30,69 +32,42 @@ SiPropertiesSvc::SiPropertiesSvc( const std::string& name, ISvcLocator* pSvcLoca
 {
   declareProperty("TemperatureMin",m_temperatureMin = -80., "Minimum temperature allowed in Celcius.");
   declareProperty("TemperatureMax",m_temperatureMax = 100., "Maximum temperature allowed in Celcius.");
+  declareProperty("ElectronSaturationVelocity", m_electronSaturationVelocity = 1.53e9, "Electron Saturation Velocity [cm/s]");
+  declareProperty("HoleSaturationVelocity",     m_holeSaturationVelocity     = 1.62e8, "Hole Saturation Velocity [cm/s]");
   declareProperty("SiConditionsServices", m_siConditionsSvc);
   declareProperty("DetectorName", m_detectorName="Pixel");
+  declareProperty("UseConditionsDB", m_conditionsSvcValid=true);
 }
 
 SiPropertiesSvc::~SiPropertiesSvc()
 {}
 
 
-StatusCode 
-SiPropertiesSvc::initialize()
-{ 
-  msg(MSG::INFO) << "SiPropertiesSvc Initialized" << endreq;
-  
-  StatusCode sc = AthService::initialize();
-  if (sc.isFailure()) { 
-    msg(MSG::FATAL) << "Unable to initialize the service!" << endreq;
-    return sc;
-  } 
-  
-  if (m_detectorName != "Pixel" && m_detectorName != "SCT") {
-    msg(MSG::FATAL) << "Invalid detector name: " << m_detectorName << ". Must be Pixel or SCT." << endreq;
+StatusCode SiPropertiesSvc::initialize() { 
+  ATH_MSG_INFO("SiPropertiesSvc Initialized");
+
+  CHECK(AthService::initialize());
+
+  if (m_detectorName!="Pixel" && m_detectorName!="SCT") {
+    ATH_MSG_FATAL("Invalid detector name: " << m_detectorName << ". Must be Pixel or SCT.");
     return StatusCode::FAILURE;
   }
 
   // Get conditions summary service. 
-  m_conditionsSvcValid = false; 
-  sc =  m_siConditionsSvc.retrieve();
-  if (sc.isFailure()) {
-    msg(MSG::FATAL) << "Unable to to retrieve Conditions Summary Service" << endreq;
-    return StatusCode::FAILURE;
-  } else {
-    msg(MSG::INFO) << "SiPropertiesSvc successfully loaded Conditions Summary Service." << endreq;
-    m_conditionsSvcValid = true;
+  if (m_conditionsSvcValid) {
+    CHECK(m_siConditionsSvc.retrieve());
   }
- 
+
   // Detector store
-  sc = m_detStore.retrieve();
-  if (sc.isFailure()) {
-    msg(MSG::FATAL) << "DetectorStore service not found !" << endreq;
-    return StatusCode::FAILURE;  
-  }
+  CHECK(m_detStore.retrieve());
 
   // Get the detector manager
-  m_detStore->retrieve(m_detManager, m_detectorName);
-  if (sc.isFailure()) {
-    msg(MSG::FATAL) << "Could not find the detector manager: " << m_detectorName << " !" << endreq;
-    return StatusCode::FAILURE;
-  } 
-  
-  if (m_conditionsSvcValid) {  
-    if (m_siConditionsSvc->hasCallBack()) {
-      //Register callback. To be triggered after SiConditionsSvc's callback,
-      msg(MSG::INFO) << "Registering callback." << endreq;
-      sc = m_detStore->regFcn(&ISiliconConditionsSvc::callBack, &*m_siConditionsSvc,
-			      &ISiPropertiesSvc::callBack, dynamic_cast<ISiPropertiesSvc *>(this),
-			      true);
-      if (sc.isFailure()) {
-	msg(MSG::ERROR) << "Could not register callback." << endreq;
-	return sc;
-      }
-    } else {
-      msg(MSG::DEBUG) << "Conditions Summary Service has no callback." << endreq;
-    }
+  CHECK(m_detStore->retrieve(m_detManager,m_detectorName));
+
+  //Register callback. To be triggered after SiConditionsSvc's callback,
+  if (m_siConditionsSvc->hasCallBack()) {
+    ATH_MSG_INFO("Registering callback.");
+    CHECK(m_detStore->regFcn(&ISiliconConditionsSvc::callBack,&*m_siConditionsSvc,&ISiPropertiesSvc::callBack,dynamic_cast<ISiPropertiesSvc *>(this),true));
   }
 
   bool isPixel = (m_detectorName == "Pixel");
@@ -102,18 +77,13 @@ SiPropertiesSvc::initialize()
   if (isPixel) {
     // Pixel
     const PixelID * idHelper;
-    if (m_detStore->retrieve(idHelper, "PixelID").isFailure()) {
-      msg(MSG::FATAL) << "Could not get Pixel ID helper" << endreq;
-      return StatusCode::FAILURE;
-    }
+    CHECK(m_detStore->retrieve(idHelper,"PixelID"));
     maxHash = idHelper->wafer_hash_max();
-  } else {
+  } 
+  else {
     // SCT
     const SCT_ID * idHelper;
-    if (m_detStore->retrieve(idHelper, "SCT_ID").isFailure()) {
-      msg(MSG::FATAL) << "Could not get SCT ID helper" << endreq;
-      return StatusCode::FAILURE;
-    }
+    CHECK(m_detStore->retrieve(idHelper,"SCT_ID"));
     maxHash = idHelper->wafer_hash_max();
   }
   
@@ -123,41 +93,13 @@ SiPropertiesSvc::initialize()
   //m_outOfRangeWarning.resize(maxHash); // initialized to false
 
   return StatusCode::SUCCESS;
-  
 }
 
-StatusCode 
-SiPropertiesSvc::finalize()
-{
-  // Count number of modules that produced out of range errors.
-  //int count = std::count(m_outOfRangeWarning.begin(),m_outOfRangeWarning.end(),true);
-  
-  //if (count > 0) {
-    //if (count > m_outOfRangeWarningThresh) {
-      //if (count == 1) { 
-	//if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "There was 1 detector element returning an invalid temperature. Temperature was set to " 
-	//					    << m_temperature << " C for this detector element." << endreq; 
-      //} else {
-	//if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "There were " << count 
-		//				    << " detector elements returning an invalid temperature. Temperature was set to " 
-			//			    << m_temperature << " C for these detector elements." << endreq; 
-      //}
-    //} else {
-      //if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Number of detector elements returning invalid temperature: " << count << endreq; 
-    //}
-  //}
-  
+StatusCode SiPropertiesSvc::finalize() {
   return StatusCode::SUCCESS;
 }
 
-// Query the interfaces.
-//   Input: riid, Requested interface ID
-//          ppvInterface, Pointer to requested interface
-//   Return: StatusCode indicating SUCCESS or FAILURE.
-// N.B. Don't forget to release the interface after use!!!
-StatusCode
-SiPropertiesSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)
-{
+StatusCode SiPropertiesSvc::queryInterface(const InterfaceID& riid, void** ppvInterface) {
   if ( ISiPropertiesSvc::interfaceID().versionMatch(riid) ) {
     *ppvInterface = dynamic_cast<ISiPropertiesSvc *>(this);
   }  else  {
@@ -169,26 +111,21 @@ SiPropertiesSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)
 }
 
 
-StatusCode
-SiPropertiesSvc::callBack(IOVSVC_CALLBACK_ARGS)
-{  
-  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Callback called." << endreq;
+StatusCode SiPropertiesSvc::callBack(IOVSVC_CALLBACK_ARGS) {  
+  if (msgLvl(MSG::DEBUG)) { 
+    ATH_MSG_DEBUG("Callback called.");
+  }
   invalidateCache();
   return StatusCode::SUCCESS;
 }
 
-const InDet::SiliconProperties &
-SiPropertiesSvc::getSiProperties(const IdentifierHash & elementHash){ 
+const InDet::SiliconProperties & SiPropertiesSvc::getSiProperties(const IdentifierHash & elementHash) { 
   if (!valid(elementHash)) updateCache(elementHash);
   return m_propertiesCache[elementHash];
 }
 
-void
-SiPropertiesSvc::updateCache(const IdentifierHash & elementHash)
-{
-  
+void SiPropertiesSvc::updateCache(const IdentifierHash & elementHash) {
   const InDetDD::SiDetectorElement * element = m_detManager->getDetectorElement(elementHash);
-  
   double temperature;
   double deplVoltage;
   double biasVoltage;
@@ -208,19 +145,14 @@ SiPropertiesSvc::updateCache(const IdentifierHash & elementHash)
     //if (msgLvl(MSG::WARNING)) msg(MSG::WARNING) << "Invalid temperature: " << temperatureC << " C. "
     //						<< "Setting to " << DEFAULTTEMPERATURE << " C."
     //						<< endreq;
-   //  temperature = m_temperature + 273.15;
-
-     if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Invalid temperature: "  
- 					    << temperatureC << " C. " 
- 					    << "Setting to " <<  DEFAULTTEMPERATURE << " C. " 
- 					    << "Detector element hash: " << elementHash  
- 					    << endreq;       
-    
+    //  temperature = m_temperature + 273.15;
+    if (msgLvl(MSG::DEBUG)) {
+      ATH_MSG_DEBUG("Invalid temperature: "  << temperatureC << " C. " << "Setting to " <<  DEFAULTTEMPERATURE << " C. " << "Detector element hash: " << elementHash);
+    }
     temperature = DEFAULTTEMPERATURE + 273.15;
   }
 
 
-
   // Calculate depletion depth. If biasVoltage is less than depletionVoltage
   // the detector is not fully depleted and we need to take this into account.
   // We take absolute values just in case voltages are signed .  
@@ -232,37 +164,33 @@ SiPropertiesSvc::updateCache(const IdentifierHash & elementHash)
   double meanElectricField = 0;
   if (depletionDepth) meanElectricField = biasVoltage / depletionDepth;
 
+  // Change saturation velocity
+  m_propertiesCache[elementHash].setElectronSaturationVelocity(m_electronSaturationVelocity*CLHEP::cm/CLHEP::s);
+  m_propertiesCache[elementHash].setHoleSaturationVelocity(m_holeSaturationVelocity*CLHEP::cm/CLHEP::s);
+
   m_propertiesCache[elementHash].setConditions(temperature, meanElectricField);
   m_cacheValid[elementHash] = true;
 
-
   if (msgLvl(MSG::VERBOSE)) {
-    msg(MSG::VERBOSE) << "Temperature (C), bias voltage, depletion voltage: "
-		      << temperature - 273.15 << ", "
-		      << biasVoltage/CLHEP::volt << ", "
-		      << deplVoltage/CLHEP::volt << endreq;
+    ATH_MSG_VERBOSE("Temperature (C), bias voltage, depletion voltage: " << temperature - 273.15 << ", " << biasVoltage/CLHEP::volt << ", " << deplVoltage/CLHEP::volt);
     double hallMobility = m_propertiesCache[elementHash].signedHallMobility(element->carrierType());
     double driftMobility = m_propertiesCache[elementHash].driftMobility(element->carrierType());
     double ehPairsPerEnergy = m_propertiesCache[elementHash].electronHolePairsPerEnergy();
     double diffConst = m_propertiesCache[elementHash].diffusionConstant(element->carrierType());
-    msg(MSG::VERBOSE) << "Signed Mobility (cm2/V/s):  " <<  hallMobility/(CLHEP::cm2/CLHEP::volt/CLHEP::s) << endreq;
-    msg(MSG::VERBOSE) << "Drift Mobility (cm2/V/s):   " <<  driftMobility/(CLHEP::cm2/CLHEP::volt/CLHEP::s) << endreq;
-    msg(MSG::VERBOSE) << "eh pairs per eV:            " <<  ehPairsPerEnergy/(1./CLHEP::eV) << endreq;
-    msg(MSG::VERBOSE) << "Diffusion constant (cm2/s): " <<  diffConst/(CLHEP::cm2/CLHEP::s) << endreq;
+    ATH_MSG_VERBOSE("Signed Mobility (cm2/V/s):  " <<  hallMobility/(CLHEP::cm2/CLHEP::volt/CLHEP::s));
+    ATH_MSG_VERBOSE("Drift Mobility (cm2/V/s):   " <<  driftMobility/(CLHEP::cm2/CLHEP::volt/CLHEP::s));
+    ATH_MSG_VERBOSE("eh pairs per eV:            " <<  ehPairsPerEnergy/(1./CLHEP::eV));
+    ATH_MSG_VERBOSE("Diffusion constant (cm2/s): " <<  diffConst/(CLHEP::cm2/CLHEP::s));
   }
-
 }
 
-void 
-SiPropertiesSvc::invalidateCache()
-{
+void SiPropertiesSvc::invalidateCache() {
   // Invalidate all caches.
   std::fill(m_cacheValid.begin(), m_cacheValid.end(), false);
 }
 
 
-bool
-SiPropertiesSvc::valid(const IdentifierHash & elementHash){
+bool SiPropertiesSvc::valid(const IdentifierHash & elementHash) {
   //if (msgLvl(MSG::VERBOSE) msg(MSG::VERBOSE) << "Cache valid = " <<  m_cacheValid[elementHash] << endreq;
   return m_cacheValid[elementHash];
 }
diff --git a/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiliconProperties.cxx b/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiliconProperties.cxx
index 5527fd40f911e09c1be8d3d833a7cf147b7bd2b8..242d049cec93debac8f7527f48ad3fcd2df67bbf 100755
--- a/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiliconProperties.cxx
+++ b/InnerDetector/InDetConditions/SiPropertiesSvc/src/SiliconProperties.cxx
@@ -6,6 +6,7 @@
 #include "CLHEP/Units/PhysicalConstants.h"
 
 #include <cmath>
+#include <iostream>
 
 namespace InDet {
 
@@ -39,8 +40,6 @@ const double holeBeta_exp      = 0.17;
 
 const double temperatureZero   = 273.15 * CLHEP::kelvin;
 
-
-
 SiliconProperties::SiliconProperties() 
   :  m_electronDriftMobility(0),
      m_holeDriftMobility(0),
@@ -48,11 +47,12 @@ SiliconProperties::SiliconProperties()
      m_holeHallMobility(0),
      m_electronDiffusionConstant(0),
      m_holeDiffusionConstant(0),
+     m_electronSaturationVelocity(0),
+     m_holeSaturationVelocity(0),
      m_ehPairsPerEnergy(s_ehPairsPerEnergyDefault),
      m_override(false)
 {}
 
-
 SiliconProperties::SiliconProperties(double temperature, double electricField) 
   :  m_electronDriftMobility(0),
      m_holeDriftMobility(0),
@@ -60,15 +60,19 @@ SiliconProperties::SiliconProperties(double temperature, double electricField)
      m_holeHallMobility(0),
      m_electronDiffusionConstant(0),
      m_holeDiffusionConstant(0),
+     m_electronSaturationVelocity(0),
+     m_holeSaturationVelocity(0),
      m_ehPairsPerEnergy(s_ehPairsPerEnergyDefault),
      m_override(false)
 {
   setConditions(temperature, electricField);
 }
 
-void
-SiliconProperties::setConditions(double temperature, double electricField)
-{
+void SiliconProperties::setConditions(double temperature, double electricField) {
+
+  if (m_electronSaturationVelocity==0.0) { m_electronSaturationVelocity=elecV_sat_0; }
+  if (m_holeSaturationVelocity==0.0)     { m_holeSaturationVelocity=holeV_sat_0; }
+
   if (!m_override) {
     m_electronDriftMobility = calcElectronDriftMobility(temperature, electricField); 
     m_holeDriftMobility = calcHoleDriftMobility(temperature, electricField); 
@@ -79,9 +83,7 @@ SiliconProperties::setConditions(double temperature, double electricField)
   }
 }
 
-double
-SiliconProperties::driftMobility(CarrierType carrierType) const
-{
+double SiliconProperties::driftMobility(CarrierType carrierType) const {
   if (carrierType == holes) {
     return holeDriftMobility();
   } else {
@@ -89,9 +91,7 @@ SiliconProperties::driftMobility(CarrierType carrierType) const
   }
 }
 
-double
-SiliconProperties::hallMobility(CarrierType carrierType) const 
-{
+double SiliconProperties::hallMobility(CarrierType carrierType) const {
   if (carrierType == holes) {
     return holeHallMobility();
   } else {
@@ -99,9 +99,7 @@ SiliconProperties::hallMobility(CarrierType carrierType) const
   }
 }
 
-double
-SiliconProperties::diffusionConstant(CarrierType carrierType) const 
-{
+double SiliconProperties::diffusionConstant(CarrierType carrierType) const {
   if (carrierType == holes) {
     return holeDiffusionConstant();
   } else {
@@ -109,15 +107,11 @@ SiliconProperties::diffusionConstant(CarrierType carrierType) const
   }
 }
 
-double
-SiliconProperties::charge(CarrierType carrierType) const 
-{
+double SiliconProperties::charge(CarrierType carrierType) const {
   return (carrierType == holes) ? +1 : -1;
 }
 
-double
-SiliconProperties::signedHallMobility(CarrierType carrierType) const 
-{
+double SiliconProperties::signedHallMobility(CarrierType carrierType) const {
   if (carrierType == holes) {
     return holeHallMobility();
   } else {
@@ -126,151 +120,125 @@ SiliconProperties::signedHallMobility(CarrierType carrierType) const
 }
 
 
-double 
-SiliconProperties::calcElectronHallFactor(double temperature) const
-{
+double SiliconProperties::calcElectronHallFactor(double temperature) const {
   // Equation from ATL-INDET-2001-004
   return elecHallFactZero + elecHallFact_drdt * (temperature - temperatureZero);
 }
 
-double 
-SiliconProperties::calcHoleHallFactor(double temperature) const
-{
+double SiliconProperties::calcHoleHallFactor(double temperature) const {
   // Equation from ATL-INDET-2001-004
   return holeHallFactZero + holeHallFact_drdt * (temperature - temperatureZero);
 }
 
 // driftMobility
-double 
-SiliconProperties::calcDriftMobility(double electricField, double electricField_critical, 
-				     double saturationVelocity, double beta) const
-{
+double SiliconProperties::calcDriftMobility(double electricField, double electricField_critical, double saturationVelocity, double beta) const {
   // Equation from ATL-INDET-2001-004
   return saturationVelocity / electricField_critical / 
     pow(std::abs(1. + pow(std::abs(electricField/electricField_critical), beta)), 1./beta);
 }
   
-double 
-SiliconProperties::calcElectronDriftMobility(double temperature, double electricField) const
-{
+double SiliconProperties::calcElectronDriftMobility(double temperature, double electricField) const {
   // Equations from ATL-INDET-2001-004
-  double saturationVelocity = elecV_sat_0 * pow(temperature, elecV_sat_exp);
+//  double saturationVelocity = elecV_sat_0 * pow(temperature, elecV_sat_exp);
+  double saturationVelocity = m_electronSaturationVelocity*pow(temperature, elecV_sat_exp);
   double electricField_critical = elecE_crit_0 * pow(temperature, elecE_crit_exp);
   double beta = elecBeta_0 * pow(temperature, elecBeta_exp);
- 
   return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
 } 
 
-double 
-SiliconProperties::calcHoleDriftMobility(double temperature, double electricField) const
-{
+double SiliconProperties::calcHoleDriftMobility(double temperature, double electricField) const {
   // Equations from ATL-INDET-2001-004
-  double saturationVelocity = holeV_sat_0 * pow(temperature, holeV_sat_exp);
+//  double saturationVelocity = holeV_sat_0 * pow(temperature, holeV_sat_exp);
+  double saturationVelocity = m_holeSaturationVelocity*pow(temperature, holeV_sat_exp);
   double electricField_critical = holeE_crit_0 * pow(temperature, holeE_crit_exp);
   double beta = holeBeta_0 * pow(temperature, holeBeta_exp);
- 
   return calcDriftMobility(electricField, electricField_critical, saturationVelocity, beta);
 } 
 
 
-double 
-SiliconProperties::calcDiffusionConstant(double temperature, double mobility) const
-{
+double SiliconProperties::calcDiffusionConstant(double temperature, double mobility) const {
   // Einstein's relationship (in many text books)
   return -CLHEP::k_Boltzmann * temperature / CLHEP::electron_charge * mobility; // CLHEP::k_Boltzmann and CLHEP::electron_charge
-                                                                  // are defined in CLHEP/PhysicalConstants.h
 }
 
-double 
-SiliconProperties::electronDriftMobility() const
-{
+double SiliconProperties::electronDriftMobility() const {
   return m_electronDriftMobility;
 }
 
-double 
-SiliconProperties::holeDriftMobility() const
-{
+double SiliconProperties::holeDriftMobility() const {
   return m_holeDriftMobility;
 }
 
-double 
-SiliconProperties::electronHallMobility() const
-{
+double SiliconProperties::electronHallMobility() const {
   return m_electronHallMobility;
 }
 
-double 
-SiliconProperties::holeHallMobility() const
-{
+double SiliconProperties::holeHallMobility() const {
   return m_holeHallMobility;
 }
 
-double 
-SiliconProperties::electronDiffusionConstant() const
-{
+double SiliconProperties::electronDiffusionConstant() const {
   return m_electronDiffusionConstant;
 }
 
-double 
-SiliconProperties::holeDiffusionConstant() const
-{
+double SiliconProperties::holeDiffusionConstant() const {
   return m_holeDiffusionConstant;
 }
 
-void 
-SiliconProperties::setElectronDriftMobility(double mobility)
-{
+double SiliconProperties::electronSaturationVelocity() const {
+  return m_electronSaturationVelocity;
+}
+
+double SiliconProperties::holeSaturationVelocity() const {
+  return m_holeSaturationVelocity;
+}
+
+void SiliconProperties::setElectronDriftMobility(double mobility) {
   m_override = true;
   m_electronDriftMobility = mobility;
 }
 
-
-void 
-SiliconProperties::setHoleDriftMobility(double mobility)
-{
+void SiliconProperties::setHoleDriftMobility(double mobility) {
   m_override = true;
   m_holeDriftMobility = mobility;
 }
 
-void 
-SiliconProperties::setElectronHallMobility(double mobility)
-{
+void SiliconProperties::setElectronHallMobility(double mobility) {
   m_override = true;
   m_electronHallMobility = mobility;
 }
 
-void 
-SiliconProperties::setHoleHallMobility(double mobility)
-{
+void SiliconProperties::setHoleHallMobility(double mobility) {
   m_override = true;
   m_holeHallMobility = mobility;
 }
 
-
-void 
-SiliconProperties::setElectronDiffusionConstant(double diffusionConstant)
-{
+void SiliconProperties::setElectronDiffusionConstant(double diffusionConstant) {
   m_override = true;
   m_electronDiffusionConstant = diffusionConstant;
 }
 
-void 
-SiliconProperties::setHoleDiffusionConstant(double diffusionConstant)
-{
+void SiliconProperties::setHoleDiffusionConstant(double diffusionConstant) {
   m_override = true;
   m_holeDiffusionConstant = diffusionConstant;
 }
 
-void
-SiliconProperties::setElectronHolePairsPerEnergy(double ehPairsPerEnergy)
-{
-  m_ehPairsPerEnergy = ehPairsPerEnergy; 
+void SiliconProperties::setElectronSaturationVelocity(double electronSaturationVelocity) {
+  m_electronSaturationVelocity = electronSaturationVelocity;
 }
 
+void SiliconProperties::setHoleSaturationVelocity(double holeSaturationVelocity) {
+  m_holeSaturationVelocity = holeSaturationVelocity;
+}
 
-double SiliconProperties::electronHolePairsPerEnergy() const
-{
+void SiliconProperties::setElectronHolePairsPerEnergy(double ehPairsPerEnergy) {
+  m_ehPairsPerEnergy = ehPairsPerEnergy; 
+}
+
+double SiliconProperties::electronHolePairsPerEnergy() const {
    return m_ehPairsPerEnergy;
 }
 
+
+
 } // namespace InDetDD