diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
index 4580aab711ddbc357b02636a50f56856d02e5354..bb41fd4a1ab5103f713e4442cfc3ed31bc0dba0b 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
@@ -1526,7 +1526,7 @@ CREATE TABLE "SCTBRLMODULE_DATA" ( "SCTBRLMODULE_DATA_ID" SLONGLONG ,"BASEBOARDT
 "BASEBOARDMATERIAL" TEXT ,"BASEBOARDOFFSETY" DOUBLE ,"BASEBOARDOFFSETZ" DOUBLE ,"HYBRIDTHICKNESS" DOUBLE ,"HYBRIDWIDTH" DOUBLE ,"HYBRIDLENGTH" DOUBLE ,
 "HYBRIDMATERIAL" TEXT ,"HYBRIDOFFSETX" DOUBLE ,"HYBRIDOFFSETZ" DOUBLE ,"PIGTAILTHICKNESS" DOUBLE ,"PIGTAILWIDTH" DOUBLE ,"PIGTAILLENGTH" DOUBLE ,
 "PIGTAILMATERIAL" TEXT ,"STEREOUPPERSIGN" INT ,"STEREOANGLE" DOUBLE ,"SENSORTOSENSORGAP" DOUBLE ,"SIDEUPPER" INT , UNIQUE ( "SCTBRLMODULE_DATA_ID" ) );
-INSERT INTO "SCTBRLMODULE_DATA" VALUES(0,0.58,87.6,61.8,'sct::BrlBaseBoard',-5.7,-7.1,0.9,74.6,21.0,'sct::BrlHybrid',1.058,-15.5,0.9,25.4,35.4,'sct::PigTail',-1,40.0,0.6,0);
+INSERT INTO "SCTBRLMODULE_DATA" VALUES(0,0.38,87.2,61.8,'sct::BrlBaseBoard',-5.7,-7.1,0.9,74.6,21.0,'sct::BrlHybrid',1.058,-15.5,0.9,25.4,35.4,'sct::PigTail',-1,40.0,0.6,0);
 DROP TABLE IF EXISTS "SCTBRLMODULE_DATA2TAG";
 CREATE TABLE "SCTBRLMODULE_DATA2TAG" ( "SCTBRLMODULE_TAG_ID" SLONGLONG ,"SCTBRLMODULE_DATA_ID" SLONGLONG  );
 INSERT INTO "SCTBRLMODULE_DATA2TAG" VALUES(107003,0);
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Frame.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Frame.cxx
index dcc0c44655188e2927071454988f6e08b92c1d9f..8b6caee814a76c49486cb53106d539f5c50bdd6a 100644
--- a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Frame.cxx
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Frame.cxx
@@ -109,7 +109,7 @@ SCT_Frame::build(SCT_Identifier id)
   {
     int izSide = -1 + 2 * side;
     int etaSign = -izSide;
-    GeoTransform* sideTransform = new GeoTransform(GeoTrf::Translate3D(0.0, 0.0, izSide * m_sideHalfPitch) * 
+    GeoTransform* sideTransform = new GeoTransform(GeoTrf::Translate3D(0.0, 0.0, izSide * m_sideHalfPitch ) * 
                                                GeoTrf::RotateY3D(-izSide * 90 * Gaudi::Units::deg));
     for (int module = 0; module < 4; module++)
     {
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
index f69e9d6e76a3c31f68f0eaa44c05b301a8a2ec63..a6fd2c00b5484188844104d5e5d5b98590845e0d 100644
--- a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
@@ -67,6 +67,7 @@ SCT_Module::~SCT_Module()
 
   delete m_env1RefPointVector;
   delete m_env2RefPointVector;
+  delete m_env3RefPointVector;
 }
 
 
@@ -141,7 +142,7 @@ SCT_Module::preBuild()
   GeoTrf::Vector3D w(0.0, v.y(), m_baseBoardOffsetZ - 0.5*baseBoardLength);
   GeoTrf::Vector3D x(0.0, u.y(),w.z());
   
-  // for corner of hybrid, connectorouter and pigtail of outer side.
+  // for corner of hybrid, connector outer and pigtail of outer side.
   GeoTrf::Vector3D i(0.0, 
                       0.5*outerSideHybridWidth,
                       m_outerSide->hybridOffsetZ() + 0.5*outerSidePigtailLength);
@@ -196,18 +197,28 @@ SCT_Module::preBuild()
 
   const double zmaxEnv1 = std::max(z_ab, z_ef);
   const double zminEnv1 = std::min(z_cd, z_gh);
+  const double zmaxEnv3 = u.z();
+  const double zminEnv3 = w.z();
 
   const double ypre_maxEnv1 = std::max(y_ad, y_eh);
   const double ypre_minEnv1 = std::min(y_bc, y_fg);
 
-  const double ymaxEnv1 = std::max(ypre_maxEnv1, u.y());
-  const double yminEnv1 = std::min(ypre_minEnv1, v.y());
+  // const double ymaxEnv1 = std::max(ypre_maxEnv1, u.y());
+  // const double yminEnv1 = std::min(ypre_minEnv1, v.y());
+  const double ymaxEnv1 = ypre_maxEnv1;
+  const double yminEnv1 = ypre_minEnv1;
+  const double ymaxEnv3 = std::max(ypre_maxEnv1, u.y());
+  const double yminEnv3 = std::min(ypre_minEnv1, v.y());
 
   // some temporary value.
   const double thicknessEnv1 = m_sensorGap + 2.0*m_outerSide->sensor()->thickness();
   const double lengthEnv1 = zmaxEnv1 - zminEnv1;
   const double widthEnv1  = ymaxEnv1 - yminEnv1;
 
+  const double thicknessEnv3 = thicknessEnv1;
+  const double lengthEnv3 = zmaxEnv3 - zminEnv3;
+  const double widthEnv3 = ymaxEnv3 - yminEnv3;
+
   // Center of evnelope1.
   const double xCenterEnv1 = 0.0;
   const double yCenterEnv1 = yminEnv1 + 0.5*widthEnv1;
@@ -215,6 +226,13 @@ SCT_Module::preBuild()
 
   m_env1RefPointVector = new GeoTrf::Vector3D(-xCenterEnv1, -yCenterEnv1, -zCenterEnv1);
 
+  // Center of envelope3
+  const double xCenterEnv3 = 0.0;
+  const double yCenterEnv3 = yminEnv3 + 0.5*widthEnv3;
+  const double zCenterEnv3 = zmaxEnv3 - 0.5*lengthEnv3;
+
+  m_env3RefPointVector = new GeoTrf::Vector3D(-xCenterEnv3, -yCenterEnv3, -zCenterEnv3);
+
   // Calculate demension of envelope2.
   const double z_ikl = std::max(i.z(), l.z());
   const double z_qr = std::max(q.z(), r.z());
@@ -266,6 +284,156 @@ SCT_Module::preBuild()
   const double yCenterSubBox = ymaxSubBox - 0.5*widthSubBox;
   const double zCenterSubBox = zmaxSubBox - 0.5*lengthSubBox;
 
+  // const double xmaxSubBox1a = - 0.5*m_baseBoard->thickness() - m_safety;
+  // const double xminSubBox1a = - 0.5*thicknessEnv2 - 2.0*m_safety;
+
+  // const double yminSubBox1a = std::max(r.y(), s.y()) + m_safety;
+  // const double ymaxSubBox1a = std::min(y_bc, y_fg) - 2.0*m_safety;
+
+  // const double zmaxSubBox1a = z_st - m_safety;
+  // const double zminSubBox1a = zminEnv1 - 2.0*m_safety; 
+  
+  // const double thicknessSubBox1a = xmaxSubBox1a - xminSubBox1a;
+  // const double widthSubBox1a = ymaxSubBox1a - yminSubBox1a;
+  // const double lengthSubBox1a = zmaxSubBox1a - zminSubBox1a;
+
+  // // Center of subbox.
+  // const double xCenterSubBox1a = xmaxSubBox1a - 0.5*thicknessSubBox1a;
+  // const double yCenterSubBox1a = ymaxSubBox1a - 0.5*widthSubBox1a;
+  // const double zCenterSubBox1a = zmaxSubBox1a - 0.5*lengthSubBox1a;
+
+
+  // const double xmaxSubBox1b = xmaxSubBox1a;
+  // const double xminSubBox1b = xminSubBox1a;
+
+  // const double yminSubBox1b = yminSubBox1a;
+  // const double ymaxSubBox1b = ymaxSubBox1a;
+
+  // const double zminSubBox1b = z_qr + m_safety;
+  // const double zmaxSubBox1b = zmaxEnv1 + 2.0*m_safety; 
+  
+  // const double thicknessSubBox1b = xmaxSubBox1b - xminSubBox1b;
+  // const double widthSubBox1b = ymaxSubBox1b - yminSubBox1b;
+  // const double lengthSubBox1b = zmaxSubBox1b - zminSubBox1b;
+
+  // // Center of subbox.
+  // const double xCenterSubBox1b = xmaxSubBox1b - 0.5*thicknessSubBox1b;
+  // const double yCenterSubBox1b = ymaxSubBox1b - 0.5*widthSubBox1b;
+  // const double zCenterSubBox1b = zmaxSubBox1b - 0.5*lengthSubBox1b;
+
+
+// Second subbox
+  const double xmaxSubBox2 = - 0.5*thicknessEnv1 - m_safety;
+  const double xminSubBox2 = xminSubBox;
+
+  const double ymaxSubBox2 = ymaxEnv2 + 2.0*m_safety;
+  const double yminSubBox2 = yminEnv2 - 2.0*m_safety;
+
+  const double zmaxSubBox2 = std::max(z_ab, z_ef) + 2.0*m_safety;
+  const double zminSubBox2 = z_qr + 2.0*m_safety;
+
+  const double thicknessSubBox2 = xmaxSubBox2 - xminSubBox2;
+  const double widthSubBox2 = ymaxSubBox2 - yminSubBox2;
+  const double lengthSubBox2 = zmaxSubBox2 - zminSubBox2;
+
+  const double xCenterSubBox2 = xmaxSubBox2 - 0.5*thicknessSubBox2;
+  const double yCenterSubBox2 = ymaxSubBox2 - 0.5*widthSubBox2;
+  const double zCenterSubBox2 = zmaxSubBox2 - 0.5*lengthSubBox2;
+
+  // Third subbox
+  const double xmaxSubBox3 = xmaxSubBox2;
+  const double xminSubBox3 = xminSubBox2;
+
+  const double ymaxSubBox3 = ymaxSubBox2;
+  const double yminSubBox3 = yminSubBox2;
+
+  const double zmaxSubBox3 = z_st - 2.0*m_safety;
+  const double zminSubBox3 = std::min(z_cd, z_gh) - 2.0*m_safety;
+
+  const double thicknessSubBox3 = xmaxSubBox3 - xminSubBox3;
+  const double widthSubBox3 = ymaxSubBox3 - yminSubBox3;
+  const double lengthSubBox3 = zmaxSubBox3 - zminSubBox3;
+
+  const double xCenterSubBox3 = xmaxSubBox3 - 0.5*thicknessSubBox3;
+  const double yCenterSubBox3 = ymaxSubBox3 - 0.5*widthSubBox3;
+  const double zCenterSubBox3 = zmaxSubBox3 - 0.5*lengthSubBox3;
+
+  // Fourth subbox
+  const double xmaxSubBox4 = - 0.5*m_baseBoard->thickness() - m_safety;
+  const double xminSubBox4 = - 0.5*thicknessEnv2 - 10.0*m_safety;
+
+  const double ymaxSubBox4 = std::min(f.y(), g.y()) - m_safety;
+  const double yminSubBox4 = yminEnv2 - 10.0*m_safety;
+
+  const double zmaxSubBox4 = zmaxEnv1 + 10.0*m_safety;
+  const double zminSubBox4 = std::max(q.z(), r.z()) + 2.0*m_safety; 
+  
+  const double thicknessSubBox4 = xmaxSubBox4 - xminSubBox4;
+  const double widthSubBox4 = ymaxSubBox4 - yminSubBox4;
+  const double lengthSubBox4 = zmaxSubBox4 - zminSubBox4;
+
+  // Center of subbox.
+  const double xCenterSubBox4 = xmaxSubBox4 - 0.5*thicknessSubBox4;
+  const double yCenterSubBox4 = ymaxSubBox4 - 0.5*widthSubBox4;
+  const double zCenterSubBox4 = zmaxSubBox4 - 0.5*lengthSubBox4;
+
+  // Fifth subbox
+  const double xmaxSubBox5 = - 0.5*m_baseBoard->thickness() - m_safety;
+  const double xminSubBox5 = - 0.5*thicknessEnv2 - 10.0*m_safety;
+
+  const double ymaxSubBox5 = std::min(f.y(), g.y()) - m_safety;
+  const double yminSubBox5 = yminEnv2 - 10.0*m_safety;
+
+  const double zminSubBox5 = zminEnv1 - 10.0*m_safety;
+  const double zmaxSubBox5 = std::min(s.z(), t.z()) - 2.0*m_safety; 
+  
+  const double thicknessSubBox5 = xmaxSubBox5 - xminSubBox5;
+  const double widthSubBox5 = ymaxSubBox5 - yminSubBox5;
+  const double lengthSubBox5 = zmaxSubBox5 - zminSubBox5;
+
+  // Center of subbox.
+  const double xCenterSubBox5 = xmaxSubBox5 - 0.5*thicknessSubBox5;
+  const double yCenterSubBox5 = ymaxSubBox5 - 0.5*widthSubBox5;
+  const double zCenterSubBox5 = zmaxSubBox5 - 0.5*lengthSubBox5;
+
+  // Sixth subbox
+  const double xmaxSubBox6 = - 0.5*m_baseBoard->thickness() - m_safety;
+  const double xminSubBox6 = - 0.5*thicknessEnv2 - 10.0*m_safety;
+
+  const double yminSubBox6 = std::max(e.y(), h.y()) + m_safety;
+  const double ymaxSubBox6 = ymaxEnv2 + 10.0*m_safety;
+
+  const double zmaxSubBox6 = zmaxEnv1 + 10.0*m_safety;
+  const double zminSubBox6 = std::max(q.z(), r.z()) + 2.0*m_safety; 
+  
+  const double thicknessSubBox6 = xmaxSubBox6 - xminSubBox6;
+  const double widthSubBox6 = ymaxSubBox6 - yminSubBox6;
+  const double lengthSubBox6 = zmaxSubBox6 - zminSubBox6;
+
+  // Center of subbox.
+  const double xCenterSubBox6 = xmaxSubBox6 - 0.5*thicknessSubBox6;
+  const double yCenterSubBox6 = ymaxSubBox6 - 0.5*widthSubBox6;
+  const double zCenterSubBox6 = zmaxSubBox6 - 0.5*lengthSubBox6;
+
+  // Seventh subbox
+  const double xmaxSubBox7 = - 0.5*m_baseBoard->thickness() - m_safety;
+  const double xminSubBox7 = - 0.5*thicknessEnv2 - 10.0*m_safety;
+
+  const double yminSubBox7 = std::max(e.y(), h.y()) + m_safety;
+  const double ymaxSubBox7 = ymaxEnv2 + 10.0*m_safety;
+
+  const double zminSubBox7 = zminEnv1 - 10.0*m_safety;
+  const double zmaxSubBox7 = std::min(s.z(), t.z()) - 2.0*m_safety; 
+  
+  const double thicknessSubBox7 = xmaxSubBox7 - xminSubBox7;
+  const double widthSubBox7 = ymaxSubBox7 - yminSubBox7;
+  const double lengthSubBox7 = zmaxSubBox7 - zminSubBox7;
+
+  // Center of subbox.
+  const double xCenterSubBox7 = xmaxSubBox7 - 0.5*thicknessSubBox7;
+  const double yCenterSubBox7 = ymaxSubBox7 - 0.5*widthSubBox7;
+  const double zCenterSubBox7 = zmaxSubBox7 - 0.5*lengthSubBox7;
+
 
   m_env1Thickness = thicknessEnv1 + 2*m_safety;
   m_env1Width     = widthEnv1     + 2*m_safety;
@@ -275,6 +443,10 @@ SCT_Module::preBuild()
   m_env2Width     = widthEnv2     + 2*m_safety;
   m_env2Length    = lengthEnv2    + 2*m_safety;
 
+  m_env3Thickness = thicknessEnv3 + 2*m_safety;
+  m_env3Width     = widthEnv3     + 2*m_safety;
+  m_env3Length    = lengthEnv3    + 2*m_safety;
+
   // Envelope 2 defines the overall thickness. NB. The ski assumes the 
   // the envelope "thickness" is centered on x, which it is.
   m_thickness   = m_env2Thickness;
@@ -292,14 +464,32 @@ SCT_Module::preBuild()
   // 6th Feb 2005 D.Naito modified.
   const GeoBox * envelope1 = new GeoBox(0.5*m_env1Thickness, 0.5*m_env1Width, 0.5*m_env1Length);
   const GeoBox * envelope2 = new GeoBox(0.5*m_env2Thickness, 0.5*m_env2Width, 0.5*m_env2Length);
+  const GeoBox * envelope3 = new GeoBox(0.5*m_env3Thickness, 0.5*m_env3Width, 0.5*m_env3Length);
 
   // 8th Aug 2005 S.Mima modified.
-  const GeoBox * subBox = new GeoBox(0.5*thicknessSubBox, 0.5*widthSubBox, 0.6*lengthSubBox);
+  const GeoBox * subBox  = new GeoBox(0.5*thicknessSubBox, 0.5*widthSubBox, 0.6*lengthSubBox);
+  // const GeoBox * subBox1a  = new GeoBox(0.5*thicknessSubBox1a, 0.5*widthSubBox1a, 0.5*lengthSubBox1a);
+  // const GeoBox * subBox1b  = new GeoBox(0.5*thicknessSubBox1b, 0.5*widthSubBox1b, 0.5*lengthSubBox1b);
+  const GeoBox * subBox2 = new GeoBox(0.5*thicknessSubBox2, 0.5*widthSubBox2, 0.5*lengthSubBox2);
+  const GeoBox * subBox3 = new GeoBox(0.5*thicknessSubBox3, 0.5*widthSubBox3, 0.5*lengthSubBox3);
+  const GeoBox * subBox4 = new GeoBox(0.5*thicknessSubBox4, 0.5*widthSubBox4, 0.5*lengthSubBox4);
+  const GeoBox * subBox5 = new GeoBox(0.5*thicknessSubBox5, 0.5*widthSubBox5, 0.5*lengthSubBox5);
+  const GeoBox * subBox6 = new GeoBox(0.5*thicknessSubBox6, 0.5*widthSubBox6, 0.5*lengthSubBox6);
+  const GeoBox * subBox7 = new GeoBox(0.5*thicknessSubBox7, 0.5*widthSubBox7, 0.5*lengthSubBox7);
 
   // In the following, envelope1 and envelope2 are added and SUBBOX is pulled. 
   const GeoShape & moduleEnvelope = (*envelope1 << GeoTrf::Translate3D(xCenterEnv1, yCenterEnv1, zCenterEnv1)).
+    add(*envelope3 << GeoTrf::Translate3D(xCenterEnv3, yCenterEnv3, zCenterEnv3)).
     add(*envelope2 << GeoTrf::Translate3D(xCenterEnv2, yCenterEnv2, zCenterEnv2)).
-    subtract(*subBox << GeoTrf::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox));
+    subtract(*subBox4 << GeoTrf::Translate3D(xCenterSubBox4, yCenterSubBox4, zCenterSubBox4)).
+    subtract(*subBox5 << GeoTrf::Translate3D(xCenterSubBox5, yCenterSubBox5, zCenterSubBox5)).
+    subtract(*subBox6 << GeoTrf::Translate3D(xCenterSubBox6, yCenterSubBox6, zCenterSubBox6)).
+    subtract(*subBox7 << GeoTrf::Translate3D(xCenterSubBox7, yCenterSubBox7, zCenterSubBox7)).
+    subtract(*subBox << GeoTrf::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox)).
+    subtract(*subBox2 << GeoTrf::Translate3D(xCenterSubBox2, yCenterSubBox2, zCenterSubBox2)).
+    subtract(*subBox3 << GeoTrf::Translate3D(xCenterSubBox3, yCenterSubBox3, zCenterSubBox3));
+    // subtract(*subBox1a << GeoTrf::Translate3D(xCenterSubBox1a, yCenterSubBox1a, zCenterSubBox1a)).
+    // subtract(*subBox1b << GeoTrf::Translate3D(xCenterSubBox1b, yCenterSubBox1b, zCenterSubBox1b)).
 
   const GeoLogVol * moduleLog           = new GeoLogVol(getName(), &moduleEnvelope, m_materials->gasMaterial());
   
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.h
index 1dffe59256488f42fa9d212db31df5f3db192a6a..0d179fdbee7fa9971df4b5b76a8d3b16260f470b 100644
--- a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.h
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.h
@@ -50,6 +50,7 @@ public:
 
   const GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
   const GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
+  const GeoTrf::Vector3D * env3RefPointVector() const {return m_env3RefPointVector;}
 
   double sensorGap()    const {return m_sensorGap;}
   double stereoInner()  const {return m_stereoInner;}
@@ -80,6 +81,9 @@ private:
   double m_env2Thickness;
   double m_env2Width;
   double m_env2Length;
+  double m_env3Thickness;
+  double m_env3Width;
+  double m_env3Length;
 
   double m_activeWidth;
 
@@ -105,6 +109,7 @@ private:
 
   GeoTrf::Vector3D * m_env1RefPointVector;
   GeoTrf::Vector3D * m_env2RefPointVector;
+  GeoTrf::Vector3D * m_env3RefPointVector;
 
 };