From 4404e4472d71ff5fcd1656a7d1cd72679acbf504 Mon Sep 17 00:00:00 2001
From: Dave Casper <dcasper@uci.edu>
Date: Tue, 10 Sep 2019 01:59:27 +0000
Subject: [PATCH] Construction and display (but not yet simulation) of SCT

---
 .../DetDescrCnvSvc/src/DetDescrCnvSvc.cxx     |    4 +-
 .../FaserDetDescr/FaserGeoModelAthenaComps.h  |    4 +-
 .../FaserDetectorManager.h                    |    2 +-
 .../GeoModel/FaserGeoModel/data/geomDB.sql    | 6840 ++++++++++++++++-
 .../python/FaserGeoModelConfig.py             |    3 +
 .../FaserGeoModel/python/GeoModelInit.py      |   12 +-
 .../FaserGeoModel/python/SCTGMConfig.py       |   52 +
 .../FaserGeoModel/python/ScintGMConfig.py     |   21 -
 .../DecodeFaserVersionKey.h                   |    2 +-
 .../src/DecodeFaserVersionKey.cxx             |   17 +
 .../GeoModelInterfaces/IGeoDbTagSvc.h         |    2 +
 .../GeoModelInterfaces/IGeoModelSvc.h         |    2 +
 .../GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx  |    4 +
 .../GeoModel/GeoModelSvc/src/GeoDbTagSvc.h    |    5 +
 .../GeoModel/GeoModelSvc/src/GeoModelSvc.cxx  |    1 +
 .../GeoModel/GeoModelSvc/src/GeoModelSvc.h    |    3 +
 .../GeoModelSvc/src/RDBMaterialManager.cxx    |   33 +-
 .../GeoModelSvc/src/RDBMaterialManager.h      |    2 +
 .../share/IdDictDetDescrCnv_joboptions.py     |    2 +-
 .../src/IdDictDetDescrCnv.cxx                 |  103 +-
 .../ScintGeoModelUtils/src/ExtraMaterial.cxx  |    1 -
 .../ScintIdentifier/src/VetoID.cxx            |   10 -
 .../ExtendedAlignableTransform.h              |    2 +-
 .../ScintDetectorDesign.h                     |    1 -
 .../ScintDetectorElement.h                    |   29 +
 .../ScintDetectorElementCollection.h          |    2 +-
 .../ScintReadoutGeometry/ScintLocalPosition.h |    2 +-
 .../ScintReadoutGeometry/ScintNumerology.h    |    1 -
 .../ScintReadoutGeometry/Version.h            |    2 +-
 .../VetoDetectorManager.h                     |    4 +-
 .../src/ScintDetectorElement.cxx              |  210 +-
 .../src/ScintDetectorManager.cxx              |    2 +-
 .../src/ScintLocalPosition.cxx                |    2 +-
 .../src/VetoDetectorManager.cxx               |   39 +-
 .../VetoGeoModel/VetoMaterialManager.h        |    2 +-
 .../VetoGeoModel/src/VetoDataBase.cxx         |  171 +-
 .../VetoGeoModel/src/VetoDetectorFactory.cxx  |  176 +-
 .../VetoGeoModel/src/VetoPlate.cxx            |   49 -
 .../VetoGeoModel/src/VetoStation.cxx          |  204 +-
 .../ScintIdCnv/src/VetoIDDetDescrCnv.h        |    6 +-
 .../ScintSimEventTPCnvDict.h                  |    2 +-
 Simulation/G4Faser/G4FaserApp/test/runG4.py   |    2 +
 .../FaserSCT_GeoModel/CMakeLists.txt          |   47 +
 .../ATLAS_CHECK_THREAD_SAFETY                 |    1 +
 .../FaserSCT_GeoModel/FaserSCT_DetectorTool.h |   58 +
 .../FaserSCT_GeoModel/SCT_Barrel.h            |   50 +
 .../SCT_BarrelModuleParameters.h              |   68 +
 .../FaserSCT_GeoModel/SCT_BarrelParameters.h  |   32 +
 .../FaserSCT_GeoModel/SCT_BaseBoard.h         |   49 +
 .../FaserSCT_GeoModel/SCT_ComponentFactory.h  |   89 +
 .../FaserSCT_GeoModel/SCT_DataBase.h          |  151 +
 .../FaserSCT_GeoModel/SCT_DetectorFactory.h   |   50 +
 .../FaserSCT_GeoModel/SCT_GeneralParameters.h |   45 +
 .../SCT_GeoModelAthenaComps.h                 |   30 +
 .../FaserSCT_GeoModel/SCT_GeometryManager.h   |   65 +
 .../FaserSCT_GeoModel/SCT_Hybrid.h            |   41 +
 .../FaserSCT_GeoModel/SCT_Identifier.h        |   59 +
 .../FaserSCT_GeoModel/SCT_InnerSide.h         |   89 +
 .../FaserSCT_GeoModel/SCT_Layer.h             |   67 +
 .../FaserSCT_GeoModel/SCT_MaterialManager.h   |   48 +
 .../FaserSCT_GeoModel/SCT_Module.h            |  111 +
 .../FaserSCT_GeoModel/SCT_Options.h           |   44 +
 .../FaserSCT_GeoModel/SCT_OuterSide.h         |   78 +
 .../FaserSCT_GeoModel/SCT_Pigtail.h           |   41 +
 .../FaserSCT_GeoModel/SCT_Sensor.h            |   48 +
 .../FaserSCT_GeoModel/SCT_Ski.h               |   66 +
 .../TrackerDetDescr/FaserSCT_GeoModel/README  |   16 +
 .../FaserSCT_GeoModel/doc/packagedoc.h        |   50 +
 .../python/FaserSCT_GeoModelConfig.py         |   46 +
 .../python/FaserSCT_GeoModelConfigDb.py       |    6 +
 .../src/FaserSCT_DetectorTool.cxx             |  236 +
 .../FaserSCT_GeoModel/src/SCT_Barrel.cxx      |  118 +
 .../src/SCT_BarrelModuleParameters.cxx        |  238 +
 .../src/SCT_BarrelParameters.cxx              |   50 +
 .../FaserSCT_GeoModel/src/SCT_BaseBoard.cxx   |   56 +
 .../src/SCT_ComponentFactory.cxx              |   40 +
 .../FaserSCT_GeoModel/src/SCT_DataBase.cxx    |  112 +
 .../src/SCT_DetectorFactory.cxx               |  188 +
 .../src/SCT_GeneralParameters.cxx             |   88 +
 .../src/SCT_GeoModelAthenaComps.cxx           |   23 +
 .../src/SCT_GeometryManager.cxx               |  112 +
 .../FaserSCT_GeoModel/src/SCT_Hybrid.cxx      |   50 +
 .../FaserSCT_GeoModel/src/SCT_Identifier.cxx  |   26 +
 .../FaserSCT_GeoModel/src/SCT_InnerSide.cxx   |  199 +
 .../FaserSCT_GeoModel/src/SCT_Layer.cxx       |  146 +
 .../src/SCT_MaterialManager.cxx               |   83 +
 .../FaserSCT_GeoModel/src/SCT_Module.cxx      |  375 +
 .../FaserSCT_GeoModel/src/SCT_Options.cxx     |   88 +
 .../FaserSCT_GeoModel/src/SCT_OuterSide.cxx   |  211 +
 .../FaserSCT_GeoModel/src/SCT_Pigtail.cxx     |   51 +
 .../FaserSCT_GeoModel/src/SCT_Sensor.cxx      |  166 +
 .../FaserSCT_GeoModel/src/SCT_Ski.cxx         |  143 +
 .../src/components/SCT_GeoModel_entries.cxx   |    4 +
 .../test/FaserSCT_GMConfig_test.py            |   23 +
 .../TrackerGeoModelUtils/CMakeLists.txt       |   34 +
 .../TrackerGeoModelUtils/README               |    9 +
 .../DistortedMaterialManager.h                |   28 +
 .../TrackerGeoModelUtils/ExtraMaterial.h      |   37 +
 .../TrackerGeoModelUtils/GenericTubeMaker.h   |   55 +
 .../ITrackerServMatBuilderTool.h              |   35 +
 .../TrackerGeoModelUtils/PairIndexMap.h       |   29 +
 .../TrackerGeoModelUtils/ServiceVolume.h      |  145 +
 .../TrackerGeoModelUtils/ServiceVolumeMaker.h |  154 +
 .../TrackerGeoModelUtils/TopLevelPlacements.h |   47 +
 .../TrackerDDAthenaComps.h                    |   75 +
 .../TrackerDetectorFactoryBase.h              |   51 +
 .../TrackerMaterialManager.h                  |  244 +
 .../TrackerSubDetectorFactoryBase.h           |   65 +
 .../TrackerGeoModelUtils/TubeVolData.h        |   59 +
 .../TrackerGeoModelUtils/VolumeBuilder.h      |   73 +
 .../TrackerGeoModelUtils/VolumeSplitter.h     |   38 +
 .../VolumeSplitterUtils.h                     |  200 +
 .../src/DistortedMaterialManager.cxx          |   46 +
 .../src/ExtraMaterial.cxx                     |   74 +
 .../src/GenericTubeMaker.cxx                  |  164 +
 .../TrackerGeoModelUtils/src/PairIndexMap.cxx |   20 +
 .../src/ServiceVolume.cxx                     |  383 +
 .../src/ServiceVolumeMaker.cxx                |  375 +
 .../src/TopLevelPlacements.cxx                |  123 +
 .../src/TrackerDDAthenaComps.cxx              |   35 +
 .../src/TrackerMaterialManager.cxx            | 1042 +++
 .../TrackerGeoModelUtils/src/TubeVolData.cxx  |  101 +
 .../src/VolumeBuilder.cxx                     |  393 +
 .../src/VolumeSplitter.cxx                    |  191 +
 .../src/VolumeSplitterUtils.cxx               |  432 ++
 .../TrackerIdDictFiles/data/IdDictTracker.xml |   41 +-
 .../TrackerIdentifier/CMakeLists.txt          |   39 +
 .../TrackerIdentifier/FaserSCT_ID.h           |  808 ++
 .../TrackerIdentifier/TrackerIdentifierDict.h |   19 +
 .../TrackerIdentifier/selection.xml           |    3 +
 .../TrackerIdentifier/src/FaserSCT_ID.cxx     | 1203 +++
 .../test/test_tracker_id.cxx                  |  935 +++
 .../TrackerReadoutGeometry/CMakeLists.txt     |   44 +
 .../ATLAS_CHECK_THREAD_SAFETY                 |    1 +
 .../ExtendedAlignableTransform.h              |   57 +
 .../SCT_BarrelModuleSideDesign.h              |  224 +
 .../SCT_DetectorManager.h                     |  166 +
 .../SCT_ModuleSideDesign.h                    |  259 +
 .../SCT_ReadoutScheme.h                       |  150 +
 .../TrackerReadoutGeometry/SiCellId.h         |  160 +
 .../TrackerReadoutGeometry/SiCommonItems.h    |   95 +
 .../TrackerReadoutGeometry/SiDetectorDesign.h |  305 +
 .../SiDetectorElement.h                       |  689 ++
 .../SiDetectorElement.icc                     |  374 +
 .../SiDetectorElementCollection.h             |   43 +
 .../SiDetectorManager.h                       |  152 +
 .../SiDiodesParameters.h                      |  148 +
 .../TrackerReadoutGeometry/SiIntersect.h      |   94 +
 .../TrackerReadoutGeometry/SiLocalPosition.h  |  204 +
 .../TrackerReadoutGeometry/SiNumerology.h     |  104 +
 .../TrackerReadoutGeometry/SiNumerology.icc   |   70 +
 .../TrackerReadoutGeometry/SiReadoutCellId.h  |   77 +
 .../TrackerReadoutGeometry/TrackerDD_Defs.h   |   22 +
 .../TrackerDetectorManager.h                  |  204 +
 .../TrackerReadoutGeometry/Version.h          |   91 +
 .../src/SCT_BarrelModuleSideDesign.cxx        |  279 +
 .../src/SCT_DetectorManager.cxx               |  408 +
 .../src/SCT_ModuleSideDesign.cxx              |  104 +
 .../src/SCT_ReadoutScheme.cxx                 |   67 +
 .../TrackerReadoutGeometry/src/SiCellId.cxx   |   17 +
 .../src/SiCommonItems.cxx                     |   31 +
 .../src/SiDetectorDesign.cxx                  |  125 +
 .../src/SiDetectorElement.cxx                 | 1015 +++
 .../src/SiDetectorElementCollection.cxx       |   19 +
 .../src/SiDetectorManager.cxx                 |  149 +
 .../src/SiDiodesParameters.cxx                |   47 +
 .../src/SiLocalPosition.cxx                   |  100 +
 .../src/SiNumerology.cxx                      |   47 +
 .../src/TrackerDetectorManager.cxx            |  423 +
 .../TrackerReadoutGeometry/src/Version.cxx    |  121 +
 .../TrackerIdCnv/CMakeLists.txt               |   23 +
 .../share/TrackerIdCnv_jobOptions.py          |    6 +
 .../src/FaserSCT_IDDetDescrCnv.cxx            |  244 +
 .../TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.h |   74 +
 .../TrackerIdCnv/src/TrackerIdCnv_entries.cxx |    6 +
 graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui  |    2 +-
 .../src/VolumeTreeModel.cxx                   |   37 +-
 .../VTI12TrackSystems/CMakeLists.txt          |    9 +-
 .../src/TrackCollHandle_TruthTracks.cxx       |   10 +-
 .../VTI12TrackSystems/src/TrkObjToString.cxx  |   12 +-
 graphics/VTI12/VTI12Utils/CMakeLists.txt      |    7 +-
 .../VTI12/VTI12Utils/VTI12Utils/HitToSoNode.h |    2 +-
 .../VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h  |   16 +-
 .../VTI12/VTI12Utils/src/HitToSodeNode.cxx    |   40 +-
 graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx  |   37 +-
 185 files changed, 26305 insertions(+), 1114 deletions(-)
 create mode 100644 DetectorDescription/GeoModel/FaserGeoModel/python/SCTGMConfig.py
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/CMakeLists.txt
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/ATLAS_CHECK_THREAD_SAFETY
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/FaserSCT_DetectorTool.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Barrel.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelModuleParameters.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelParameters.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BaseBoard.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_ComponentFactory.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DataBase.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DetectorFactory.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeneralParameters.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeometryManager.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Hybrid.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Identifier.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_InnerSide.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Layer.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_MaterialManager.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Module.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Options.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_OuterSide.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Pigtail.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Sensor.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Ski.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/README
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/doc/packagedoc.h
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfig.py
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfigDb.py
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Barrel.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelParameters.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BaseBoard.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_ComponentFactory.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DataBase.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DetectorFactory.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeneralParameters.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeoModelAthenaComps.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeometryManager.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Hybrid.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Identifier.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_InnerSide.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Layer.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_MaterialManager.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Options.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_OuterSide.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Pigtail.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Sensor.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Ski.cxx
 create mode 100644 Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/components/SCT_GeoModel_entries.cxx
 create mode 100755 Tracker/TrackerDetDescr/FaserSCT_GeoModel/test/FaserSCT_GMConfig_test.py
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/CMakeLists.txt
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/README
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/DistortedMaterialManager.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ExtraMaterial.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/GenericTubeMaker.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ITrackerServMatBuilderTool.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/PairIndexMap.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolume.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolumeMaker.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TopLevelPlacements.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDDAthenaComps.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDetectorFactoryBase.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerMaterialManager.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerSubDetectorFactoryBase.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TubeVolData.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeBuilder.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitter.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitterUtils.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/DistortedMaterialManager.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ExtraMaterial.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/GenericTubeMaker.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/PairIndexMap.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolume.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolumeMaker.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TopLevelPlacements.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerDDAthenaComps.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerMaterialManager.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TubeVolData.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeBuilder.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitter.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitterUtils.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/CMakeLists.txt
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/FaserSCT_ID.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/TrackerIdentifierDict.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/selection.xml
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/src/FaserSCT_ID.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerIdentifier/test/test_tracker_id.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/CMakeLists.txt
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ATLAS_CHECK_THREAD_SAFETY
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ExtendedAlignableTransform.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_DetectorManager.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ModuleSideDesign.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ReadoutScheme.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCellId.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCommonItems.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorDesign.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElementCollection.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorManager.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDiodesParameters.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiIntersect.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiLocalPosition.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.h
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.icc
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiReadoutCellId.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDD_Defs.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDetectorManager.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/Version.h
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_BarrelModuleSideDesign.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_DetectorManager.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ModuleSideDesign.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ReadoutScheme.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCellId.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCommonItems.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorDesign.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElement.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElementCollection.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorManager.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDiodesParameters.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiLocalPosition.cxx
 create mode 100644 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiNumerology.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/TrackerDetectorManager.cxx
 create mode 100755 Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/Version.cxx
 create mode 100644 Tracker/TrackerDetDescrCnv/TrackerIdCnv/CMakeLists.txt
 create mode 100644 Tracker/TrackerDetDescrCnv/TrackerIdCnv/share/TrackerIdCnv_jobOptions.py
 create mode 100644 Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.cxx
 create mode 100644 Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.h
 create mode 100644 Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/TrackerIdCnv_entries.cxx

diff --git a/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx b/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
index d4482743f..ad1870e3b 100644
--- a/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
+++ b/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
@@ -118,8 +118,8 @@ DetDescrCnvSvc::initialize()     {
     if (status != StatusCode::SUCCESS) return status;
     status =  addToDetStore(131395045, "VetoID");
     if (status != StatusCode::SUCCESS) return status;
-    // status =  addToDetStore(2517, "SCT_ID");
-    // if (status != StatusCode::SUCCESS) return status;
+    status =  addToDetStore(205618430, "FaserSCT_ID");
+    if (status != StatusCode::SUCCESS) return status;
 
     return status;
 }
diff --git a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h
index 5576efe4e..0fe7834af 100644
--- a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h
+++ b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h
@@ -5,14 +5,14 @@
 #ifndef GeoModelFaserUtilities_FaserGeoModelAthenaComps_H
 #define GeoModelFaserUtilities_FaserGeoModelAthenaComps_H
 
-#include "InDetGeoModelUtils/InDetDDAthenaComps.h"
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
 
 // class VetoID;
 
 
 /// Class to hold various Athena components
 template <class ID_HELPER>
-class FaserGeoModelAthenaComps : public InDetDD::AthenaComps {
+class FaserGeoModelAthenaComps : public TrackerDD::AthenaComps {
 
 public:
 
diff --git a/DetectorDescription/FaserReadoutGeometry/FaserReadoutGeometry/FaserDetectorManager.h b/DetectorDescription/FaserReadoutGeometry/FaserReadoutGeometry/FaserDetectorManager.h
index 1371cc404..2d6ecf125 100644
--- a/DetectorDescription/FaserReadoutGeometry/FaserReadoutGeometry/FaserDetectorManager.h
+++ b/DetectorDescription/FaserReadoutGeometry/FaserReadoutGeometry/FaserDetectorManager.h
@@ -145,7 +145,7 @@ namespace FaserDD {
       const LevelInfo & getLevel(const std::string & key) const;
 
       /** return align folder string to use **/
-      //      InDetDD::AlignFolderType getAlignInfo();
+      //      TrackerDD::AlignFolderType getAlignInfo();
 
       /** Process the alignment container, calls processKey */
       bool processAlignmentContainer(const std::string & key) const;
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
index 163b05690..7aeeeedc9 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
@@ -310,8 +310,16 @@ INSERT INTO "HVS_NODE" VALUES (11, "Veto", 1, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (12, "Trigger", 1, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (13, "Preshower", 1, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (2, "Tracker", 0, 1, NULL);
-INSERT INTO "HVS_NODE" VALUES (3, "Calorimeter", 0, 1, NULL);
-INSERT INTO "HVS_NODE" VALUES (4, "Magnet", 0, 1, NULL);
+INSERT INTO "HVS_NODE" VALUES (21, "SCT", 2, 1, NULL);
+INSERT INTO "HVS_NODE" VALUES (210, "SctTopLevel", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (211, "SctBrlModule", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (212, "SctBrlSensor", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (213, "SctFaserGeneral", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (214, "SctSwitches", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (215, "SCTMaterials", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (216, "SCTMatComponents", 21, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (3,    "Calorimeter", 0, 1, NULL);
+INSERT INTO "HVS_NODE" VALUES (4,    "Magnet", 0, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (100,  "Materials", 0, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (101,  "StdMaterials", 100, 0, NULL);
 INSERT INTO "HVS_NODE" VALUES (102,  "StdMatComponents", 100, 0, NULL);
@@ -336,6 +344,14 @@ INSERT INTO "HVS_NODE" VALUES (3005, "CaloIdentifier", 3, 0, NULL);
 INSERT INTO "HVS_TAG2NODE" VALUES (0, "FASER-00", 100000, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (1, "Scintillator-00", 100001, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (2, "Tracker-00", 100002, NULL, 0, 0, 1549238400000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (21, "SCT-00", 100026, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (210, "SctTopLevel-00", 106788, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (211, "SctBarrelModule-00", 107003, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (212, "SctBarrelSensor-00", 106730, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (213, "SctFaserGeneral-00", 106789, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (214, "SctSwitches-00", 107782, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (215, "SctMaterials-00", 107777, NULL, 0, 0, 1567987200000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (216, "SctMatComponents-00", 107778, NULL, 0, 0, 1567987200000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (3, "Calorimeter-00", 100003, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (4, "Magnet-00", 100004, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (100, "Materials-00", 100005, NULL, 0, 0, 1549238400000000000, NULL, 22);
@@ -375,6 +391,14 @@ INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 1003, 100011);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 1004, 100012);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (2,   100002, 2003, 100021);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (2,   100002, 2004, 100022);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (2,   100002, 21,   100026);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 210,  106788);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 211,  107003);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 212,  106730);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 213,  106789);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 214,  107782);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 215,  107777);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (21,  100026, 216,  107778);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (3,   100003, 3003, 100023);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (3,   100003, 3004, 100024);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (0,   100000, 110,  100013);
@@ -389,6 +413,14 @@ INSERT INTO "HVS_LTAG2LTAG" VALUES (3,   100003, 3005, 100018);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "FASER",              "FASER-00",                100000);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Scintillator",       "Scintillator-00",         100001);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Tracker",            "Tracker-00",              100002);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SCT",                "SCT-00",                  100026);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SctTopLevel",        "SCTTopLevel-00",          106788);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SctBrlModule",       "SCTBrlModule-00",         107003);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SctBrlSensor",       "SCTBrlSensor-00",         106730);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SctFaserGeneral",    "SCTFaserGeneral-00",      106789);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SctSwitches",        "SCTSwitches-00",          107782);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SCTMaterials",       "SCTMaterials-00",         107777);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "SCTMatComponents",   "SCTMatComponents-00",     107778);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Calorimeter",        "Calorimeter-00",          100003);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Magnet",             "Magnet-00",               100004);
 INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Materials",          "Materials-00",            100005);
@@ -988,4 +1020,6808 @@ INSERT INTO "TRACKERIDENTIFIER_DATA2TAG" VALUES (100017, 0);
 --
 INSERT INTO "CALOIDENTIFIER_DATA" VALUES (0, "Calorimeter", "CaloIdDictFiles/IdDictCalorimeter.xml", "Baseline layout");
 INSERT INTO "CALOIDENTIFIER_DATA2TAG" VALUES (100018, 0);
+--
+--
+DROP TABLE IF EXISTS "SCTBRLSENSOR_DATA";
+CREATE TABLE "SCTBRLSENSOR_DATA" ( "SCTBRLSENSOR_DATA_ID" SLONGLONG ,"THICKNESS" DOUBLE ,"WIDTH" DOUBLE ,"WAFERLENGTH" DOUBLE ,"NUMWAFERS" INT ,"MATERIAL" TEXT ,
+"FIDUCIALSEP" DOUBLE ,"CENTERTOFIDUCIAL" DOUBLE ,"STRIPPITCH" DOUBLE ,"NUMSTRIPS" INT ,"NUMREADOUTSTRIPS" INT ,"STRIPSHIFT" INT ,"ACTIVEHALFLENGTH" DOUBLE , UNIQUE ( "SCTBRLSENSOR_DATA_ID" ) );
+INSERT INTO "SCTBRLSENSOR_DATA" VALUES(0,0.285,63.56,63.96,2,'std::Silicon',2.19,30.95,0.08,770,768,1,31.0);
+DROP TABLE IF EXISTS "SCTBRLSENSOR_DATA2TAG";
+CREATE TABLE "SCTBRLSENSOR_DATA2TAG" ( "SCTBRLSENSOR_TAG_ID" SLONGLONG ,"SCTBRLSENSOR_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTBRLSENSOR_DATA2TAG" VALUES(106730,0);
+--
+--
+DROP TABLE IF EXISTS "SCTBRLMODULE_DATA";
+CREATE TABLE "SCTBRLMODULE_DATA" ( "SCTBRLMODULE_DATA_ID" SLONGLONG ,"BASEBOARDTHICKNESS" DOUBLE ,"BASEBOARDWIDTH" DOUBLE ,"BASEBOARDLENGTH" DOUBLE ,
+"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);
+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);
+--
+--
+DROP TABLE IF EXISTS "SCTTOPLEVEL_DATA";
+CREATE TABLE "SCTTOPLEVEL_DATA" ( "SCTTOPLEVEL_DATA_ID" SLONGLONG ,"POSX" DOUBLE ,"POSY" DOUBLE ,"POSZ" DOUBLE ,"ROTX" DOUBLE ,"ROTY" DOUBLE ,"ROTZ" DOUBLE ,"ROTORDER" INT ,"LABEL" TEXT , UNIQUE ( "SCTTOPLEVEL_DATA_ID" ) );
+INSERT INTO "SCTTOPLEVEL_DATA" VALUES(0,0.0,0.0,-1000.0,0.0,0.0,0.0,312,'StationA');
+INSERT INTO "SCTTOPLEVEL_DATA" VALUES(1,0.0,0.0,    0.0,0.0,0.0,0.0,312,'StationB');
+INSERT INTO "SCTTOPLEVEL_DATA" VALUES(2,0.0,0.0, 1000.0,0.0,0.0,0.0,312,'StationC');
+INSERT INTO "SCTTOPLEVEL_DATA" VALUES(3,0.0,0.0, 1000.0,0.0,0.0,0.0,312,'SCT');
+DROP TABLE IF EXISTS "SCTTOPLEVEL_DATA2TAG";
+CREATE TABLE "SCTTOPLEVEL_DATA2TAG" ( "SCTTOPLEVEL_TAG_ID" SLONGLONG ,"SCTTOPLEVEL_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(106788,0);
+INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(106788,1);
+INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(106788,2);
+INSERT INTO "SCTTOPLEVEL_DATA2TAG" VALUES(106788,3);
+--
+--
+DROP TABLE IF EXISTS "SCTFASERGENERAL_DATA";
+CREATE TABLE "SCTFASERGENERAL_DATA" ("SCTFASERGENERAL_DATA_ID" SLONGLONG, "NUMLAYERS" INT, "LAYERPITCH" DOUBLE, "ROWSPERLAYER" INT, "MODULESPERROW" INT, UNIQUE ( "SCTFASERGENERAL_DATA_ID") );
+INSERT INTO "SCTFASERGENERAL_DATA" VALUES (0, 3, 100.0, 4, 2);
+DROP TABLE IF EXISTS "SCTFASERGENERAL_DATA2TAG";
+CREATE TABLE "SCTFASERGENERAL_DATA2TAG" ( "SCTFASERGENERAL_TAG_ID" SLONGLONG ,"SCTFASERGENERAL_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTFASERGENERAL_DATA2TAG" VALUES(106789, 0);
+--
+--
+DROP TABLE IF EXISTS "SCTSWITCHES_DATA";
+CREATE TABLE "SCTSWITCHES_DATA" ( "SCTSWITCHES_DATA_ID" SLONGLONG ,"DETECTORNAME" TEXT ,"G3COMPATIBLE" INT ,"G3DIGITSCOMPATIBLE" INT ,"DC2GEOMETRY" INT ,"USEMAGFIELDSVC" INT ,"COSMICLAYOUT" INT ,"VERSIONNAME" TEXT ,"LAYOUT" TEXT ,"DESCRIPTION" TEXT , UNIQUE ( "SCTSWITCHES_DATA_ID" ) );
+INSERT INTO "SCTSWITCHES_DATA" VALUES(0,'SCT',0,0,0,1,0,'GEO','Final','Atlas Geometry 2008');
+DROP TABLE IF EXISTS "SCTSWITCHES_DATA2TAG";
+CREATE TABLE "SCTSWITCHES_DATA2TAG" ( "SCTSWITCHES_TAG_ID" SLONGLONG ,"SCTSWITCHES_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTSWITCHES_DATA2TAG" VALUES(107782,0);
+--
+--
+DROP TABLE IF EXISTS "SCTMATCOMPONENTS_DATA";
+CREATE TABLE "SCTMATCOMPONENTS_DATA" ( "SCTMATCOMPONENTS_DATA_ID" SLONGLONG ,"MATERIAL_ID" SLONGLONG ,"COMPNAME" TEXT ,"FRACTION" DOUBLE , UNIQUE ( "SCTMATCOMPONENTS_DATA_ID" ) );
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(201,50,'Carbon',0.4816);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(202,50,'sct::AlNitride',0.1576);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(203,50,'sct::Elastosil',0.0056);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(204,50,'sct::Epoxy',0.117);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(205,50,'Aluminium',0.0212);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(206,50,'sct::FR4',0.0644);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(207,50,'sct::Glass',0.1526);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(208,51,'Carbon',0.4081);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(209,51,'sct::AlNitride',0.1528);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(210,51,'sct::Elastosil',0.0111);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(211,51,'sct::Epoxy',0.1908);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(212,51,'Aluminium',0.0156);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(213,51,'sct::FR4',0.083);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(214,51,'sct::Glass',0.1386);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(544,124,'Iron',0.187);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(545,124,'Aluminium',0.491);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(546,124,'sct::BeCu',0.322);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(897,175,'sct::CN107',0.226);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(161,42,'sct::Peek',0.0251);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(168,43,'sct::Peek',0.0327);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(174,44,'sct::Peek',0.0192);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(178,45,'sct::Peek',0.0175);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(898,175,'sct::C6F14',0.076);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(961,174,'Copper',0.575);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(962,174,'std::C3F8',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(963,174,'Iron',0.252);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(964,174,'sct::CN107',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(965,174,'sct::Rubber',0.053);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(966,188,'Copper',0.775);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(967,188,'std::C3F8',0.047);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(968,188,'sct::Rubber',0.178);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(0,0,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(1,1,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2,2,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(3,3,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(4,4,'Copper',0.863);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(5,4,'std::Kapton',0.137);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(6,5,'Aluminium',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(7,6,'Aluminium',0.369);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(24,14,'sct::AirexR82',0.057);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(9,7,'Copper',0.7);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(10,7,'Nickel',0.3);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(11,8,'sct::CN107',0.09);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(12,8,'std::C3F8',0.91);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(13,9,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(14,10,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(15,11,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(16,12,'std::Polystyrene',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(17,13,'sct::CFRP',0.367);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(18,13,'std::Aluminium',0.495);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(19,13,'std::C3F8',0.116);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(20,13,'std::Kapton',0.022);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(21,14,'sct::CFRP',0.508);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(22,14,'std::Aluminium',0.193);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(23,14,'std::C3F8',0.242);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(27,15,'sct::AirexR82',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(25,15,'sct::CFRP',0.9);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(26,15,'std::Aluminium',0.095);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(28,16,'std::Aluminium',0.588);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(29,16,'std::Kapton',0.412);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(30,17,'Silicon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(31,18,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(32,19,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(33,20,'Hydrogen',0.092);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(34,20,'Oxygen',0.366);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(35,20,'Aluminium',0.542);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(36,21,'Aluminium',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(37,22,'std::Polystyrene',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(38,23,'std::Polyethylene',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(8,6,'std::Kapton',0.631);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(338,77,'Carbon',37.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(339,77,'Hydrogen',24.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(340,77,'Oxygen',4.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(341,77,'Nitrogen',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(342,78,'Hydrogen',0.026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(343,78,'Carbon',0.692);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(344,78,'Nitrogen',0.073);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(345,78,'Oxygen',0.209);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(346,79,'Aluminium',0.0496);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(347,79,'Iron',0.0468);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(348,79,'Copper',0.185);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(349,79,'Nickel',0.0027);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(350,79,'Silicon',0.0012);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(351,79,'sct::Solder',0.0091);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(352,79,'std::Kapton',0.119);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(353,79,'sct::Peek',0.0409);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(354,79,'sct::PEI',0.0126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(355,79,'sct::Glass',0.0136);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(356,79,'sct::Plastic',0.0085);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(357,79,'sct::CFRP',0.1192);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(358,79,'sct::FR4',0.1344);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(359,79,'sct::Adhesive',0.119);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(360,79,'sct::AlNitride',0.1384);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(490,107,'sct::Epoxy',0.6925);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(491,107,'sct::BoronNitride',0.3075);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(533,122,'sct::Peek',0.4);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(534,122,'sct::CFRP',0.45);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(535,122,'sct::PEI',0.11);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(536,122,'sct::Epoxy',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(547,125,'Iron',0.0417);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(548,125,'Copper',0.333);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(549,125,'sct::CN107',0.6249);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(550,125,'sct::solder',0.0004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(561,128,'Silver',0.15);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(562,128,'Nickel',0.6);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(563,128,'sct::Epoxy',0.25);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(684,148,'Copper',0.9);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(685,148,'Zinc',0.1);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(686,149,'Aluminium',0.2722);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(687,149,'Iron',0.0168);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(688,149,'sct::CFRP',0.6314);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(689,149,'sct::Peek',0.0701);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(690,149,'sct::EPDM',0.0018);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(691,149,'sct::Brass',0.0077);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(737,157,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(738,158,'Carbon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(826,142,'sct::CFRP',0.613);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(827,142,'sct::CuKaptonEC',0.053);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(828,142,'std::Kapton',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(829,142,'Copper',0.065);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(830,142,'sct::Araldite',0.072);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(831,142,'sct::CuOnAlWire',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(832,142,'std::G10',0.15);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(906,174,'Copper',0.696);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(907,174,'std::C3F8',0.052);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(908,174,'Iron',0.1);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(909,174,'sct::CN107',0.024);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(910,174,'sct::Rubber',0.128);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(937,184,'Aluminium',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(938,184,'sct::Peek',0.6584);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(939,184,'sct::Vectra',0.2431);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(940,184,'sct::Glass',0.0026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(941,184,'sct::Plastic',0.0374);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(942,184,'sct::Silica',0.0545);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(943,185,'sct::Peek',0.6677);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(944,185,'sct::Glass',0.1638);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(945,185,'sct::Plastic',0.102);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(946,185,'sct::Araldite',0.0665);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(947,186,'Aluminium',0.0293);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(948,186,'sct::Peek',0.7988);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(949,186,'sct::Vectra',0.1237);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(950,186,'sct::Glass',0.0153);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(951,186,'sct::Silica',0.0053);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(952,186,'sct::Araldite',0.0276);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(953,187,'Aluminium',0.0021);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(954,187,'sct::Peek',0.2746);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(955,187,'sct::Vectra',0.418);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(956,187,'sct::Glass',0.026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(957,187,'sct::Plastic',0.2038);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(958,187,'sct::Silica',0.0247);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(959,187,'std::Kapton',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(960,187,'sct::Araldite',0.0498);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(510,116,'sct::CN107',0.785);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(511,116,'std::C3F8',0.127);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(512,116,'Copper',0.088);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(513,117,'std::Kapton',0.27);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(514,117,'Copper',0.61);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(515,117,'sct::Epoxy',0.12);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(516,118,'sct::CN107',0.52);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(517,118,'std::C3F8',0.21);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(518,118,'Aluminium',0.1);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(519,118,'std::Kapton',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(520,118,'sct::BeCu',0.14);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(521,119,'sct::Plastic',0.33);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(522,119,'sct::Epoxy',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(523,119,'sct::BeCu',0.14);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(524,119,'std::Polyethylene',0.47);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(525,120,'Aluminium',0.219);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(526,120,'sct::Peek',0.522);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(527,120,'Copper',0.125);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(528,120,'Iron',0.134);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(529,121,'sct::Peek',0.4);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(530,121,'sct::CFRP',0.45);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(531,121,'sct::PEI',0.11);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(532,121,'sct::Epoxy',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(537,123,'Aluminium',0.044);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(538,123,'sct::CFRP',0.821);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(539,123,'sct::CuKapton',0.079);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(540,123,'sct::Solder',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(541,123,'Copper',0.006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(542,123,'sct::Plastic',0.036);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(543,123,'sct::Peek',0.013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(264,34,'sct::Plastic',0.23);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(265,34,'Copper',0.32);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(266,34,'sct::FR4',0.27);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(267,34,'sct::CuOnAlWire',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(268,34,'std::Kapton',0.14);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(604,132,'sct::Silica',0.99);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(619,138,'Copper',0.76);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(620,138,'std::Kapton',0.24);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(621,139,'sct::PEI',0.373);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(622,139,'sct::AlKapton',0.028);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(623,139,'sct::CuKaptonEC',0.166);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(624,139,'sct::Araldite',0.31);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(625,139,'std::Kapton',0.084);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(626,139,'Copper',0.024);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(627,139,'sct::CuOnAlWire',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(628,140,'sct::CFRP',0.512);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(629,140,'sct::PEI',0.163);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(630,140,'sct::CuKapton',0.117);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(631,140,'sct::Epoxy',0.208);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(632,141,'sct::Epoxy',0.106);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(633,141,'sct::PEI',0.342);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(634,141,'sct::CuKapton',0.552);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(635,142,'sct::CFRP',0.835);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(636,142,'sct::CuKapton',0.072);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(637,142,'std::Kapton',0.054);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(638,142,'Copper',0.009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(639,142,'sct::Araldite',0.02);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(640,142,'sct::CuOnAlWire',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(641,143,'Iron',0.284);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(642,143,'sct::PEI',0.062);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(643,143,'sct::CFRP',0.522);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(644,143,'sct::Araldite',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(645,143,'std::G10',0.125);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(646,144,'sct::PEI',0.106);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(647,144,'sct::CuKapton',0.093);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(648,144,'Aluminium',0.008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(649,144,'sct::CFRP',0.763);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(650,144,'Titanium',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(651,145,'sct::CFRP',0.796);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(652,145,'sct::PEI',0.069);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(653,145,'sct::AlKapton',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(654,145,'sct::Epoxy',0.061);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(655,145,'sct::CuKapton',0.037);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(656,145,'std::Kapton',0.012);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(657,145,'Copper',0.003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(658,145,'sct::Araldite',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(659,145,'sct::CuOnAlWire',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(660,145,'Aluminium',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(661,145,'sct::Peek',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(662,146,'Iron',0.645);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(663,146,'sct::Peek',0.241);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(664,146,'Aluminium',0.114);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(665,147,'sct::CFRP',0.377);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(666,147,'Aluminium',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(667,147,'Iron',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(668,147,'sct::PEI',0.454);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(669,147,'sct::Silicone',0.079);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(750,145,'sct::CuKaptonEC',0.045);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(833,171,'Carbon',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(834,171,'Fluorine',14.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(835,172,'Carbon',15.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(836,172,'Hydrogen',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(837,172,'Oxygen',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(838,173,'sct::Polycarbonate',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(839,174,'Copper',0.684);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(840,174,'std::C3F8',0.069);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(841,174,'Iron',0.098);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(842,174,'sct::CN107',0.023);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(843,174,'sct::Rubber',0.126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(844,175,'std::Kapton',0.18);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(845,175,'Copper',0.406);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(846,175,'sct::Epoxy',0.08);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(847,175,'sct:CN107',0.226);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(848,175,'sct:C6F14',0.076);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(849,175,'Aluminium',0.032);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(850,176,'Aluminium',0.925);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(851,176,'Iron',0.043);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(852,176,'Copper',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(853,176,'std::Kapton',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(854,155,'Aluminium',0.235);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(855,155,'Copper',0.118);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(856,155,'Iron',0.427);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(857,155,'std::Polyethylene',0.201);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(858,155,'sct::Polyester',0.019);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(859,177,'Copper',0.549);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(860,177,'sct::CN107',0.152);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(861,177,'Iron',0.265);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(862,177,'sct::Peek',0.008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(863,177,'sct::Solder',0.026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(864,178,'sct::CN107',0.702);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(865,178,'Copper',0.073);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(866,178,'std::C3F8',0.126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(867,178,'sct::Rubber',0.099);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(868,179,'std::Kapton',0.258);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(869,179,'Copper',0.578);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(870,179,'sct::Epoxy',0.114);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(871,179,'Aluminium',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(872,153,'Aluminium',0.326);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(873,153,'Copper',0.196);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(874,153,'std::Polyethylene',0.478);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(875,180,'sct::Polyimide',0.021);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(876,180,'Iron',0.634);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(877,180,'sct::Polyester',0.239);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(878,180,'Aluminium',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(879,180,'Copper',0.1);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(880,180,'sct::Peek',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(881,181,'sct::PEI',0.533);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(882,181,'sct::CFRP',0.181);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(883,181,'sct::Araldite',0.041);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(884,181,'sct::Polyimide',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(885,181,'Aluminium',0.076);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(886,181,'Iron',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(887,181,'sct::Torlon',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(888,181,'sct::Silicone',0.066);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(889,181,'std::Kapton',0.021);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(890,181,'Copper',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(891,181,'sct::Polyimide',0.025);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(892,181,'sct::CuKaptonEC',0.006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(893,182,'Aluminium',0.904);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(894,182,'Iron',0.053);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(895,182,'std::G10',0.031);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(896,182,'sct::Araldite',0.012);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(249,64,'Carbon',10.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(250,64,'Hydrogen',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(251,64,'Oxygen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(252,65,'Copper',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(253,66,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(254,67,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(255,68,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(256,69,'sct::Silica',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(257,70,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(258,71,'Copper',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(222,52,'sct::Solder',0.0554);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(165,42,'sct::Araldite',0.0099);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(171,43,'sct::Araldite',0.0098);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(551,125,'sct::Solder',0.0004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(925,149,'Aluminium',0.2152);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(926,149,'Iron',0.0013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(116,35,'std::C3F8',0.1636);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(928,149,'sct::Peek',0.0403);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(929,149,'sct::EPDM',0.0017);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(930,183,'Aluminium',0.4829);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(931,183,'Iron',0.0733);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(932,183,'sct::CFRP',0.2265);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(933,183,'sct::Peek',0.1792);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(934,183,'sct::EPDM',0.0021);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(935,183,'sct::Epoxy',0.0002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(936,183,'sct::Brass',0.0358);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(927,149,'sct::CFRP',0.7415);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(327,74,'Silicon',0.637);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(328,74,'Oxygen',0.363);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(329,75,'Aluminium',0.6103);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(330,75,'Copper',0.0126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(331,75,'sct::Solder',0.1652);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(332,75,'sct::Peek',0.184);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(333,75,'sct::Silicone',0.0279);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(451,105,'sct::CN107',0.4811);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(452,105,'sct::Solder',0.0027);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(453,105,'std::C3F8',0.5162);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(558,127,'Aluminium',0.27);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(559,127,'sct::CFRP',0.72);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(560,127,'sct::Araldite',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(605,137,'Aluminium',0.4822);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(606,137,'Iron',0.0106);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(607,137,'Copper',0.0152);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(608,137,'sct::CN107',0.0012);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(609,137,'std::Kapton',0.1966);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(610,137,'sct::Peek',0.0023);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(611,137,'std::G10',0.2794);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(612,137,'sct::BeCu',0.0034);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(613,137,'sct::Glass',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(614,137,'sct::Plastic',0.0051);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(615,120,'Aluminium',0.242);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(616,120,'sct::Peek',0.471);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(617,120,'Copper',0.138);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(618,120,'Iron',0.149);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(260,53,'sct::Plastic',0.64);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(93,30,'Oxygen',0.4418);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(259,53,'sct::Glass',0.08);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(261,53,'sct::Rubber',0.23);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(262,53,'sct::Ceramic',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(263,53,'Aluminium',0.02);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(899,161,'Aluminium',0.3033);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(900,161,'Fluorine',0.3965);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(901,161,'Copper',0.1013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(902,161,'sct::CN107',0.0797);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(903,161,'sct::Airex',0.02);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(904,161,'sct::Peek',0.0012);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(905,161,'std::C3F8',0.098);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2009,2002,'Aluminium',0.2);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2010,2002,'Carbon',0.7);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2011,2002,'Copper',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2012,2002,'Hydrogen',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2013,2002,'Oxygen',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(39,24,'Hydrogen',0.0063);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(40,24,'Boron',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(41,24,'Carbon',0.4703);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(42,24,'Nitrogen',0.0143);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(43,24,'Oxygen',0.0922);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(44,24,'Aluminium',0.0581);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(45,24,'Silicon',0.1351);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(46,24,'Chlorine',0.0033);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(47,24,'Nickel',0.0038);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(48,24,'Copper',0.1621);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(49,24,'Tin',0.0094);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(50,24,'Silver',0.0329);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(51,24,'Gold',0.0017);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(52,24,'Lead',0.0055);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(53,25,'Hydrogen',0.0032);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(54,25,'Beryllium',0.0892);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(55,25,'Boron',0.0014);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(56,25,'Carbon',0.7198);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(57,25,'Nitrogen',0.0019);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(58,25,'Oxygen',0.166);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(59,25,'Aluminium',0.0175);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(60,25,'Silver',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(61,26,'Hydrogen',0.0289);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(62,26,'Carbon',0.3713);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(63,26,'Nitrogen',0.0112);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(64,26,'Oxygen',0.091);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(65,26,'Nickel',0.0009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(66,26,'Copper',0.4063);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(67,26,'Tin',0.0606);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(68,26,'Gold',0.0004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(69,26,'Lead',0.0294);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(70,27,'Hydrogen',0.0348);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(71,27,'Carbon',0.5257);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(72,27,'Oxygen',0.1733);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(73,27,'Aluminium',0.0929);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(74,27,'Silicon',0.0742);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(75,27,'Iron',0.0346);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(76,27,'Copper',0.0531);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(77,27,'Silver',0.0001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(78,27,'Tin',0.0034);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(79,27,'Lead',0.0079);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(80,28,'Hydrogen',0.0187);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(81,28,'Carbon',0.3659);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(82,28,'Nitrogen',0.0538);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(83,28,'Oxygen',0.1104);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(84,28,'Aluminium',0.1224);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(85,28,'Silicon',0.032);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(86,28,'Iron',0.0385);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(87,28,'Copper',0.2487);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(88,28,'Nickel',0.0022);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(89,28,'Tin',0.0022);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(90,28,'Lead',0.0052);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(91,29,'Aluminium',0.3595);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(92,29,'std::Kapton',0.6405);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(502,114,'sct::Plastic',0.15);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(94,30,'Silicon',0.2743);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(95,30,'Boron',0.0166);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(96,30,'Aluminium',0.0207);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(97,30,'Sodium',0.0448);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(98,30,'Potassium',0.0822);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(99,30,'Zinc',0.0882);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(100,30,'Titanium',0.0292);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(101,30,'Antimony',0.0022);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(102,31,'Copper',0.6142);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(103,31,'std::Kapton',0.3858);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(104,32,'Aluminium',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(105,32,'Nitrogen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(106,33,'Copper',0.2571);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(107,33,'Aluminium',0.5199);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(108,33,'std::Kapton',0.223);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(109,34,'Sct:Plastic',0.346);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(110,34,'Copper',0.4613);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(111,34,'Sct::FR4',0.118);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(112,34,'Sct::CuOnAlWire',0.0157);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(113,34,'std::Kapton',0.059);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(114,35,'sct::CN107',0.747);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(115,35,'sct::Solder',0.0894);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(503,114,'Copper',0.09);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(504,114,'sct::FR4',0.5);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(505,114,'sct::CuOnAlWire',0.09);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(506,114,'std::Kapton',0.17);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(508,115,'Titanium',0.22);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(509,115,'Aluminium',0.3);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(507,115,'sct::CN107',0.48);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(552,16,'Aluminium',0.27);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(553,16,'sct::CFRP',0.72);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(554,16,'sct::Araldite',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(555,126,'Silver',0.15);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(556,126,'Nickel',0.6);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(557,126,'sct::Epoxy',0.25);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(159,42,'sct::Torlon',0.7947);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(160,42,'sct::Silica',0.0585);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(162,42,'sct::Vectra',0.0472);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(163,42,'sct::Plastic',0.0622);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(164,42,'Aluminium',0.0024);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(166,43,'sct::Torlon',0.8186);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(167,43,'sct::Silica',0.0131);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(169,43,'sct::Vectra',0.0114);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(170,43,'sct::Plastic',0.1144);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(172,44,'sct::Torlon',0.8208);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(173,44,'sct::Silica',0.1454);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(175,44,'Aluminium',0.0146);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(176,45,'sct::Torlon',0.76);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(177,45,'sct::Silica',0.196);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(179,45,'Aluminium',0.0265);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(194,49,'Carbon',0.4895);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(195,49,'sct::AlNitride',0.1511);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(196,49,'sct::Elastosil',0.0052);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(197,49,'sct::Epoxy',0.1179);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(198,49,'Aluminium',0.021);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(199,49,'sct::FR4',0.0639);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(200,49,'sct::Glass',0.1514);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(215,52,'Copper',0.2873);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(216,52,'Carbon',0.2376);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(217,52,'Silicon',0.1024);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(218,52,'std::Kapton',0.105);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(219,52,'sct::Epoxy',0.1013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(220,52,'sct::Al2O3',0.0531);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(221,52,'sct::Plastic',0.0226);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(223,52,'sct::AlNitride',0.0179);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(224,52,'sct::EotiteP102',0.0128);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(225,52,'sct::AIT',0.0046);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(226,53,'sct::Glass',0.0825);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(227,53,'sct::Plastic',0.5408);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(228,53,'sct::Rubber',0.2291);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(229,53,'sct::Ceramic',0.0261);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(230,53,'Aluminium',0.0215);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(231,54,'Silicon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(232,54,'Oxygen',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(233,55,'Tin',0.3642);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(234,55,'Lead',0.6358);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(235,56,'sct::Epoxy',0.2064);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(236,56,'sct::Glass',0.7936);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(237,57,'Aluminium',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(238,57,'Oxygen',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(239,58,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(240,59,'sct::Plastic',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(241,60,'Carbon',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(242,60,'Hydrogen',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(243,60,'Oxygen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(244,61,'sct::AIT',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(245,62,'sct::Epoxy',0.6514);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(246,62,'Silver',0.3486);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(247,63,'Silicon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(248,63,'Hydrogen',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(564,129,'sct::PEI',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(565,130,'sct::Silicone',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(566,131,'Aluminium',0.15);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(567,131,'std::Kapton',0.85);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(568,132,'Silica',0.99);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(569,132,'std::Air',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(570,133,'sct::Rubber',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(571,134,'Aluminium',0.4334);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(572,134,'std::Kapton',0.0064);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(573,134,'sct::AlKapton',0.0293);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(574,134,'sct::Pyrogel',0.1619);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(575,134,'sct::CFRP',0.261);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(576,134,'sct::Airex',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(577,134,'sct::Araldite',0.0864);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(578,134,'sct::Epoxy',0.0014);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(579,134,'sct::Techsil',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(580,134,'Nickel',0.0034);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(581,134,'Silver',0.0008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(582,135,'Aluminium',0.7898);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(583,135,'Iron',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(584,135,'sct::CN107',0.0622);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(585,135,'sct::Peek',0.0682);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(586,135,'sct::EPDM',0.0258);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(587,135,'sct::Araldite',0.0109);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(588,135,'sct::Silicone',0.0003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(589,135,'sct::Techsil',0.0408);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(590,136,'Aluminium',0.4126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(591,136,'Iron',0.0096);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(592,136,'Copper',0.0085);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(593,136,'std::Kapton',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(594,136,'sct::AlKapton',0.0126);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(595,136,'sct::CuKapton',0.0114);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(596,136,'sct::Pyrogel',0.0788);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(597,136,'sct::CFRP',0.241);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(598,136,'sct::Airex',0.0066);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(599,136,'sct::Peek',0.0099);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(600,136,'sct::EPDM',0.0142);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(601,136,'sct::Araldite',0.1864);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(602,136,'sct::Epoxy',0.0013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(603,136,'sct::Solder',0.0001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(739,145,'sct::CFRP',0.75);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(740,145,'sct::PEI',0.085);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(741,145,'sct::AlKapton',0.008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(742,145,'sct::Epoxy',0.075);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(743,145,'sct::CuKapton',0.045);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(744,145,'std::Kapton',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(745,145,'Copper',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(746,145,'sct::Araldite',0.009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(747,145,'sct::CuOnAlWire',0.006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(748,145,'Aluminium',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(749,145,'sct::Peek',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(816,137,'Aluminium',0.4985);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(817,137,'Iron',0.0103);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(818,137,'Copper',0.0147);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(819,137,'sct::CN107',0.0011);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(820,137,'std::Kapton',0.1904);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(821,137,'sct::Peek',0.0022);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(822,137,'std::G10',0.2705);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(823,137,'sct::BeCu',0.0034);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(824,137,'sct::Glass',0.0039);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(825,137,'sct::Plastic',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2000,2000,'Carbon',0.7);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2001,2000,'Aluminium',0.2);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2002,2000,'Hydrogen',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2003,2000,'Oxygen',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2004,2000,'Copper',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2005,2001,'Hydrogen',0.129);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2006,2001,'Carbon',0.73);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2007,2001,'Oxygen',0.091);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(2008,2001,'Boron',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(361,80,'Copper',0.95);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(362,80,'Gold',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(363,81,'Aluminium',0.0087);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(364,81,'sct::CFRP',0.9913);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(365,82,'Aluminium',0.0086);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(366,82,'sct::CFRP',0.9914);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(367,83,'Aluminium',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(368,83,'sct::CFRP',0.993);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(369,84,'Aluminium',0.0077);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(370,84,'sct::CFRP',0.9923);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(371,85,'sct::Peek',0.0511);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(372,85,'sct::CFRP',0.9472);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(373,85,'sct::CuAu',0.0017);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(374,86,'sct::Peek',0.0373);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(375,86,'sct::CFRP',0.9616);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(376,86,'sct::CuAu',0.0011);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(377,87,'sct::Peek',0.0311);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(378,87,'sct::CFRP',0.968);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(379,87,'sct::CuAu',0.0009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(380,88,'sct::Peek',0.0273);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(381,88,'sct::CFRP',0.9719);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(382,88,'sct::CuAu',0.0008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(383,89,'Aluminium',0.0311);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(384,89,'Copper',0.0347);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(385,89,'sct::Peek',0.6797);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(386,89,'sct::Glass',0.1296);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(387,89,'sct::Plastic',0.0807);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(388,89,'sct::BeCu',0.0442);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(389,90,'Aluminium',0.0297);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(390,90,'Copper',0.0322);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(391,90,'sct::Peek',0.6468);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(392,90,'sct::Glass',0.1537);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(393,90,'sct::Plastic',0.0957);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(394,90,'sct::BeCu',0.0419);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(395,91,'Aluminium',0.0313);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(396,91,'Copper',0.0295);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(397,91,'sct::Peek',0.6211);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(398,91,'sct::Glass',0.172);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(399,91,'sct::Plastic',0.1071);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(400,91,'sct::BeCu',0.039);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(401,92,'Aluminium',0.028);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(402,92,'Copper',0.0285);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(403,92,'sct::Peek',0.5872);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(404,92,'sct::Glass',0.1961);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(405,92,'sct::Plastic',0.1221);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(406,92,'sct::BeCu',0.0381);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(670,123,'sct::CuKaptonEC',0.079);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(671,140,'sct::CuKaptonEC',0.117);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(672,141,'sct::CuKaptonEC',0.552);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(673,142,'sct::CuKaptonEC',0.072);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(674,144,'sct::CuKaptonEC',0.093);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(675,145,'sct::CuKaptonEC',0.037);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(676,71,'Copper',0.27);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(677,71,'Aluminium',0.73);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(678,74,'Carbon',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(679,74,'Hydrogen',6.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(680,74,'Oxygen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(681,74,'Silicon',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(682,133,'Carbon',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(683,133,'Hydrogen',10.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(729,156,'sct::PEI',0.222);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(730,156,'std::Kapton',0.106);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(731,156,'Aluminium',0.003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(732,156,'Copper',0.114);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(733,156,'sct::CFRP',0.191);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(734,156,'sct::Plastic',0.016);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(735,156,'sct::Araldite',0.218);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(736,156,'sct::CuOnAlWire',0.13);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(751,159,'Copper',0.054);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(752,159,'sct::CN107',0.7994);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(753,159,'std::C3F8',0.1466);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(754,160,'Aluminium',0.2755);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(755,160,'Fluorine',0.0016);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(756,160,'Copper',0.3159);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(757,160,'sct::CN107',0.2966);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(758,160,'sct::Airex',0.0182);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(759,160,'sct::Peek',0.0032);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(760,160,'std::C3F8',0.089);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(761,161,'Aluminium',0.2737);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(762,161,'Fluorine',0.4783);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(763,161,'Copper',0.0831);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(764,161,'sct::CN107',0.0654);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(765,161,'sct::Airex',0.0181);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(766,161,'sct::Peek',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(767,161,'std::C3F8',0.0804);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(768,162,'Carbon',22.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(769,162,'Hydrogen',10.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(770,162,'Oxygen',5.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(771,162,'Nitrogen',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(772,163,'Aluminium',0.776);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(773,163,'Iron',0.0154);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(774,163,'Copper',0.0826);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(775,163,'sct::Peek',0.0069);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(776,163,'sct::FR4',0.0962);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(777,163,'sct::Polyimide',0.0213);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(778,163,'sct::Al2O3',0.0016);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(779,164,'Aluminium',0.3856);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(780,164,'Iron',0.0548);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(781,164,'Copper',0.2619);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(782,164,'sct::Peek',0.0019);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(783,164,'sct::FR4',0.2128);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(784,164,'sct::Polyimide',0.083);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(785,165,'Aluminium',0.4381);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(786,165,'Iron',0.0425);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(787,165,'Copper',0.2352);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(788,165,'sct::FR4',0.1912);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(789,165,'sct::Polyimide',0.0746);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(790,165,'sct::Plastic',0.0056);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(791,165,'sct::BeCu',0.0103);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(792,165,'sct::Ceramic',0.0025);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(793,166,'Aluminium',0.6489);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(794,166,'Iron',0.0145);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(795,166,'Copper',0.2967);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(796,166,'sct::FR4',0.0399);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(797,167,'Aluminium',0.5534);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(798,167,'Copper',0.3901);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(799,167,'sct::Araldite',0.0109);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(800,167,'sct::Polyimide',0.0456);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(801,168,'Aluminium',0.3385);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(802,168,'Copper',0.4877);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(803,168,'sct::Araldite',0.0061);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(804,168,'sct::Polyimide',0.1677);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(805,169,'Aluminium',0.4169);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(806,169,'Copper',0.4079);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(807,169,'sct::Araldite',0.0049);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(808,169,'sct::Polyimide',0.1363);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(809,169,'sct::Glass',0.0143);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(810,169,'sct::Plastic',0.0197);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(811,170,'Aluminium',0.6634);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(812,170,'Copper',0.2682);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(813,170,'sct::CN107',0.0421);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(814,170,'sct::Araldite',0.0112);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(815,170,'sct::Polyimide',0.0151);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(911,136,'Aluminium',0.4165);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(912,136,'Iron',0.0095);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(913,136,'Copper',0.0084);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(914,136,'std::Kapton',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(915,136,'sct::AlKapton',0.0125);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(916,136,'sct::CuKapton',0.0113);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(917,136,'sct::Pyrogel',0.0783);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(918,136,'sct::CFRP',0.2394);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(919,136,'sct::Airex',0.0066);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(920,136,'sct::Peek',0.0098);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(921,136,'sct::EPDM',0.0141);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(922,136,'sct::Araldite',0.1852);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(923,136,'sct::Epoxy',0.0013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(924,136,'sct::Solder',0.0001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(117,36,'sct::CN107',0.7245);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(118,36,'sct::Solder',0.1189);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(119,36,'std::C3F8',0.1566);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(120,37,'sct::CN107',0.7761);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(121,37,'sct::Solder',0.048);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(122,37,'std::C3F8',0.1759);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(123,38,'Carbon',0.7909);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(124,38,'sct::Peek',0.0351);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(125,38,'Copper',0.0175);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(126,38,'Aluminium',0.1059);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(127,38,'Gold',0.0125);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(128,38,'Lead',0.0108);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(129,38,'Tin',0.0162);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(130,38,'sct::BeCu',0.0093);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(131,38,'sct::Grease',0.0018);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(132,39,'Carbon',0.7267);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(133,39,'sct::Peek',0.0288);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(134,39,'Copper',0.0229);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(135,39,'Aluminium',0.1425);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(136,39,'Gold',0.0165);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(137,39,'Lead',0.0178);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(138,39,'Tin',0.0266);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(139,39,'sct::BeCu',0.0153);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(140,39,'sct::Grease',0.0029);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(141,40,'Carbon',0.7194);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(142,40,'sct::Peek',0.069);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(143,40,'Copper',0.0232);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(144,40,'Aluminium',0.1107);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(145,40,'Gold',0.0166);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(146,40,'Lead',0.0204);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(147,40,'Tin',0.0306);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(148,40,'sct::BeCu',0.0078);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(149,40,'sct::Grease',0.0023);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(150,41,'Carbon',0.6606);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(151,41,'sct::Peek',0.0494);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(152,41,'Copper',0.0283);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(153,41,'Aluminium',0.1446);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(154,41,'Gold',0.0203);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(155,41,'Lead',0.0323);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(156,41,'Tin',0.0485);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(157,41,'sct::BeCu',0.0124);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(158,41,'sct::Grease',0.0036);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(180,46,'Aluminium',0.5957);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(181,46,'sct::Peek',0.0618);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(182,46,'sct::Plastic',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(183,46,'Copper',0.0297);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(184,46,'sct::FR4',0.1728);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(185,46,'sct::CuOnAlWire',0.0313);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(186,46,'std::Kapton',0.0587);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(187,47,'Aluminium',0.1778);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(188,47,'sct::Plastic',0.6784);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(189,47,'sct::BeCu',0.1438);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(190,48,'Aluminium',0.4371);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(191,48,'sct::CN107',0.3171);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(192,48,'sct::Solder',0.0415);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(193,48,'sct::PCB',0.2043);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(492,112,'Aluminium',0.0127);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(493,112,'Copper',0.2054);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(494,112,'sct::Solder',0.0113);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(495,112,'std::Kapton',0.0186);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(496,112,'sct::Peek',0.4896);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(497,112,'sct::FR4',0.2624);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(498,113,'Aluminium',0.3326);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(499,113,'std::Kapton',0.4874);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(500,113,'sct::Glass',0.1109);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(501,113,'sct::Plastic',0.0691);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(692,150,'sct::CFRP',0.953);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(693,150,'std::Kapton',0.025);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(694,150,'Copper',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(695,150,'sct::Araldite',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(696,151,'sct::CFRP',0.971);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(697,151,'std::Kapton',0.015);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(698,151,'Copper',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(699,151,'sct::Araldite',0.009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(700,152,'Aluminium',0.472);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(701,152,'Iron',0.528);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(702,153,'Aluminium',0.423);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(703,153,'Iron',0.017);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(704,153,'sct::Torlon',0.006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(705,153,'sct::PEI',0.2);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(706,153,'Carbon',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(707,153,'std::Kapton',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(708,153,'Copper',0.133);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(709,153,'sct::Epoxy',0.018);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(710,153,'sct::Silicone',0.011);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(711,153,'sct::CuKaptonEC',0.001);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(712,153,'sct::CN107',0.139);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(713,153,'sct::Solder',0.002);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(714,153,'std::Polyethylene',0.005);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(715,154,'Aluminium',0.315);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(716,154,'Copper',0.312);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(717,154,'sct::CN107',0.013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(718,154,'Iron',0.269);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(719,154,'std::Kapton',0.058);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(720,154,'sct::Epoxy',0.026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(721,154,'std::Polyethylene',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(270,51,'sct::AlNitride',0.2196);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(271,51,'sct::Elastosil',0.0078);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(272,51,'sct::Epoxy',0.0969);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(273,51,'Aluminium',0.0296);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(274,51,'sct::FR4',0.0898);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(275,51,'sct::Glass',0.2127);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(276,35,'sct::CN107',0.5);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(277,35,'sct::Solder',0.06);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(278,35,'std::C3F8',0.44);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(279,36,'sct::CN107',0.49);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(280,36,'sct::Solder',0.08);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(281,36,'std::C3F8',0.43);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(282,37,'sct::CN107',0.51);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(283,37,'sct::Solder',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(284,37,'std::C3F8',0.46);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(285,18,'Carbon',0.883);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(286,18,'std::Kapton',0.013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(287,18,'sct::Epoxy',0.004);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(288,18,'Aluminium',0.02);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(289,18,'Nickel',0.016);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(290,18,'Gold',0.006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(291,18,'Copper',0.008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(292,18,'sct::Peek',0.05);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(293,34,'sct::Plastic',0.19);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(294,34,'Copper',0.46);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(295,34,'sct::FR4',0.21);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(296,34,'sct::CuOnAlWire',0.03);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(297,34,'std::Kapton',0.11);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(269,51,'Carbon',0.3436);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(722,155,'Aluminium',0.315);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(723,155,'Copper',0.312);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(724,155,'sct::CN107',0.013);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(725,155,'Iron',0.269);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(726,155,'std::Kapton',0.058);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(727,155,'sct::Epoxy',0.026);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(728,155,'std::Polyethylene',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(298,62,'sct::Epoxy',0.29);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(299,62,'Silver',0.71);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(300,59,'Carbon',18.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(301,59,'Hydrogen',20.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(302,59,'Oxygen',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(303,64,'Carbon',19.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(304,64,'Hydrogen',12.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(305,64,'Oxygen',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(306,58,'sct::Epoxy',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(307,60,'sct::Peek',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(308,23,'Carbon',5.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(309,23,'Hydrogen',8.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(310,55,'Tin',0.63);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(311,55,'Lead',0.37);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(312,65,'Beryllium',0.01);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(313,65,'Copper',0.99);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(314,2,'sct::Epoxy',0.3);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(315,2,'Carbon',0.7);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(316,30,'sct::Silica',0.81);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(317,30,'sct::B2O3',0.13);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(318,30,'sct::Na2O',0.04);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(319,30,'sct::Al2O3',0.02);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(320,72,'Boron',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(321,72,'Oxygen',3.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(322,73,'Sodium',2.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(323,73,'Oxygen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(324,56,'sct::Epoxy',0.23);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(325,56,'sct::Glass',0.77);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(326,66,'sct::FR4',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(334,76,'Aluminium',0.1528);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(335,76,'Iron',0.057);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(336,76,'sct::Peek',0.5327);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(337,76,'sct::CFRP',0.2575);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(407,93,'Aluminium',0.0087);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(408,93,'sct::CFRP',0.9913);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(409,94,'Aluminium',0.0086);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(410,94,'sct::CFRP',0.9914);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(411,95,'Aluminium',0.007);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(412,95,'sct::CFRP',0.993);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(413,96,'Aluminium',0.0077);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(414,96,'sct::CFRP',0.9923);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(415,97,'sct::Peek',0.0511);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(416,97,'sct::CFRP',0.9472);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(417,97,'sct::CuAu',0.0017);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(418,98,'sct::Peek',0.0373);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(419,98,'sct::CFRP',0.9616);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(420,98,'sct::CuAu',0.0011);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(421,99,'sct::Peek',0.0311);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(422,99,'sct::CFRP',0.968);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(423,99,'sct::CuAu',0.0009);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(424,100,'sct::Peek',0.0273);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(425,100,'sct::CFRP',0.9719);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(426,100,'sct::CuAu',0.0008);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(427,101,'Aluminium',0.0311);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(428,101,'Copper',0.0347);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(429,101,'sct::Peek',0.6797);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(430,101,'sct::Glass',0.1296);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(431,101,'sct::Plastic',0.0807);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(432,101,'sct::BeCu',0.0442);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(433,102,'Aluminium',0.0297);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(434,102,'Copper',0.0322);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(435,102,'sct::Peek',0.6468);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(436,102,'sct::Glass',0.1537);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(437,102,'sct::Plastic',0.0957);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(438,102,'sct::BeCu',0.0419);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(439,103,'Aluminium',0.0313);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(440,103,'Copper',0.0295);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(441,103,'sct::Peek',0.6211);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(442,103,'sct::Glass',0.172);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(443,103,'sct::Plastic',0.1071);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(444,103,'sct::BeCu',0.039);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(445,104,'Aluminium',0.028);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(446,104,'Copper',0.0285);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(447,104,'sct::Peek',0.5872);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(448,104,'sct::Glass',0.1961);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(449,104,'sct::Plastic',0.1221);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(450,104,'sct::BeCu',0.0381);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(454,106,'Boron',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(455,106,'Nitrogen',1.0);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(456,107,'Epoxy',0.6925);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(457,107,'BoronNitride',0.3075);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(458,108,'Aluminium',0.0435);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(459,108,'Iron',0.0006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(460,108,'Copper',0.0033);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(461,108,'sct::CN107',0.8631);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(462,108,'sct::Solder',0.0043);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(463,108,'std::Kapton',0.0019);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(464,108,'std::C3F8',0.083);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(465,108,'sct::ThermalGlue',0.0003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(466,109,'Aluminium',0.043);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(467,109,'Iron',0.0006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(468,109,'Copper',0.0032);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(469,109,'sct::CN107',0.8646);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(470,109,'sct::Solder',0.0043);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(471,109,'std::Kapton',0.0019);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(472,109,'std::C3F8',0.0821);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(473,109,'sct::ThermalGlue',0.0003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(474,110,'Aluminium',0.0421);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(475,110,'Iron',0.0006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(476,110,'Copper',0.0031);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(477,110,'sct::CN107',0.8675);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(478,110,'sct::Solder',0.0042);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(479,110,'std::Kapton',0.0018);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(480,110,'std::C3F8',0.0804);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(481,110,'sct::ThermalGlue',0.0003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(482,111,'Aluminium',0.041);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(483,111,'Iron',0.0006);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(484,111,'Copper',0.003);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(485,111,'sct::CN107',0.871);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(486,111,'sct::Solder',0.0041);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(487,111,'std::Kapton',0.0018);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(488,111,'std::C3F8',0.0782);
+INSERT INTO "SCTMATCOMPONENTS_DATA" VALUES(489,111,'sct::ThermalGlue',0.0003);
+DROP TABLE IF EXISTS "SCTMATCOMPONENTS_DATA2TAG";
+CREATE TABLE "SCTMATCOMPONENTS_DATA2TAG" ( "SCTMATCOMPONENTS_TAG_ID" SLONGLONG ,"SCTMATCOMPONENTS_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,0);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,1);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,2);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,3);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,4);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,5);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,6);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,7);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,8);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,11);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,12);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,28);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,29);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,30);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,31);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,36);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106560,38);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,2);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,6);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,11);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,12);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,28);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,29);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,31);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,38);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,70);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,71);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,72);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,73);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,74);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,75);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,76);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,77);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,78);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,79);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,80);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,81);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,82);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,83);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,84);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,85);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,86);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,87);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,88);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,89);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,90);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,91);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,92);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,93);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,94);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,95);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,96);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,97);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,98);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,99);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,100);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,101);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,109);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,110);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,111);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,112);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,113);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,114);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,115);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,116);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,117);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,118);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,119);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,120);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,121);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,122);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,208);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,209);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,210);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,211);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,212);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,213);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,214);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,226);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,227);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,228);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,229);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,230);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,233);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,234);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,235);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,236);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,239);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,240);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,241);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,242);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,243);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,245);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,246);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,249);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,250);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,251);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,252);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,253);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(106782,258);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,2);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,6);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,11);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,12);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,28);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,29);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,31);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,38);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,70);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,71);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,72);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,73);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,74);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,75);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,76);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,77);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,78);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,79);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,80);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,81);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,82);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,83);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,84);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,85);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,86);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,87);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,88);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,89);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,90);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,91);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,92);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,93);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,94);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,95);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,96);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,97);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,98);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,99);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,100);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,101);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,114);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,115);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,116);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,117);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,118);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,119);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,120);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,121);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,122);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,208);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,209);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,210);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,211);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,212);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,213);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,214);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,233);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,234);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,235);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,236);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,239);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,240);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,241);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,242);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,243);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,245);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,246);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,249);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,250);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,251);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,252);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,253);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,258);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,264);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,265);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,266);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,267);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107032,268);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,6);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,11);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,12);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,28);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,29);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,70);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,71);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,72);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,73);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,74);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,75);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,76);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,77);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,78);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,79);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,80);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,81);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,82);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,83);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,84);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,85);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,86);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,87);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,88);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,89);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,90);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,91);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,92);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,258);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107083,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,336);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,337);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,407);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,408);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,409);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,410);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,411);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,412);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,413);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,414);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,415);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,416);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,417);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,418);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,419);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,420);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,421);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,422);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,423);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,424);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,425);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,426);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,427);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,428);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,429);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,430);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,431);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,432);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,433);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,434);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,435);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,436);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,437);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,438);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,439);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,440);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,441);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,442);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,443);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,444);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,445);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,446);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,447);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,448);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,449);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,450);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,458);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,459);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,460);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,461);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,462);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,463);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,464);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,465);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,466);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,467);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,468);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,469);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,470);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,471);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,472);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,473);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,474);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,475);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,476);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,477);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,478);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,479);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,480);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,481);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,482);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,483);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,484);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,485);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,486);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,487);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,488);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,489);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,492);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,493);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,494);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,495);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,496);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,497);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,502);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,503);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,504);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,505);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,506);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,507);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,508);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,509);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,510);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,511);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,512);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,513);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,514);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,515);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,516);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,517);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,518);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,519);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,520);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,521);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,522);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,523);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,524);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,533);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,534);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,535);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,536);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,537);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,538);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,540);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,541);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,542);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,543);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,544);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,545);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,546);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,547);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,548);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,549);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,551);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,552);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,553);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,554);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,558);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,559);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,560);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,561);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,562);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,563);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,571);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,572);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,573);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,574);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,575);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,576);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,577);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,578);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,579);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,580);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,581);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,582);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,583);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,584);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,585);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,586);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,587);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,588);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,589);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,590);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,591);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,592);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,593);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,594);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,595);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,596);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,597);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,598);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,599);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,600);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,601);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,602);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,603);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,605);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,606);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,607);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,608);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,609);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,610);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,611);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,612);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,613);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,614);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,615);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,616);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,617);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,618);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,619);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,620);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,621);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,622);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,623);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,624);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,625);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,626);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,627);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,628);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,629);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,631);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,632);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,633);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,635);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,637);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,638);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,639);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,640);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,641);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,642);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,643);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,644);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,645);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,646);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,648);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,649);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,650);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,662);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,663);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,664);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,665);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,666);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,667);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,668);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,669);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,670);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,671);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,672);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,673);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,674);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,682);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,683);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,686);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,687);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,688);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,689);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,690);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,691);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,692);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,693);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,694);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,695);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,696);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,697);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,698);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,699);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,700);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,701);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,702);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,703);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,704);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,705);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,706);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,707);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,708);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,709);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,710);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,711);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,712);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,713);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,714);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,722);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,723);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,724);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,725);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,726);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,727);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,728);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,729);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,730);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,731);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,732);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,733);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,734);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,735);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,736);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,737);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,738);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,739);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,740);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,741);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,742);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,744);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,745);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,746);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,747);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,748);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,749);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107129,750);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,336);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,337);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,407);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,408);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,409);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,410);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,411);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,412);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,413);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,414);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,415);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,416);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,417);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,418);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,419);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,420);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,421);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,422);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,423);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,424);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,425);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,426);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,427);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,428);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,429);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,430);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,431);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,432);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,433);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,434);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,435);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,436);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,437);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,438);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,439);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,440);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,441);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,442);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,443);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,444);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,445);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,446);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,447);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,448);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,449);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,450);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,458);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,459);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,460);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,461);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,462);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,463);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,464);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,465);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,466);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,467);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,468);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,469);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,470);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,471);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,472);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,473);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,474);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,475);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,476);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,477);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,478);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,479);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,480);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,481);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,482);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,483);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,484);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,485);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,486);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,487);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,488);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,489);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,492);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,493);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,494);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,495);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,496);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,497);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,502);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,503);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,504);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,505);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,506);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,507);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,508);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,509);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,510);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,511);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,512);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,513);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,514);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,515);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,516);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,517);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,518);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,519);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,520);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,521);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,522);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,523);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,524);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,533);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,534);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,535);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,536);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,537);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,538);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,540);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,541);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,542);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,543);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,544);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,545);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,546);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,547);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,548);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,549);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,551);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,552);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,553);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,554);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,558);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,559);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,560);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,561);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,562);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,563);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,571);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,572);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,573);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,574);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,575);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,576);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,577);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,578);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,579);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,580);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,581);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,582);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,583);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,584);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,585);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,586);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,587);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,588);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,589);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,590);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,591);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,592);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,593);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,594);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,595);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,596);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,597);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,598);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,599);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,600);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,601);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,602);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,603);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,615);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,616);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,617);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,618);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,619);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,620);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,621);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,622);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,623);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,624);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,625);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,626);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,627);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,628);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,629);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,631);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,632);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,633);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,641);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,642);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,643);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,644);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,645);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,646);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,648);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,649);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,650);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,662);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,663);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,664);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,665);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,666);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,667);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,668);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,669);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,670);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,671);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,672);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,674);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,682);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,683);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,686);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,687);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,688);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,689);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,690);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,691);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,692);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,693);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,694);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,695);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,696);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,697);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,698);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,699);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,700);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,701);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,729);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,730);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,731);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,732);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,733);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,734);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,735);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,736);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,737);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,738);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,739);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,740);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,741);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,742);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,744);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,745);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,746);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,747);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,748);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,749);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,750);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,751);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,752);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,753);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,754);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,755);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,756);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,757);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,758);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,759);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,760);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,772);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,773);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,774);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,775);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,776);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,777);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,778);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,779);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,780);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,781);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,782);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,783);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,784);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,785);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,786);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,787);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,788);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,789);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,790);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,791);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,792);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,793);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,794);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,795);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,796);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,797);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,798);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,799);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,800);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,801);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,802);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,803);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,804);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,805);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,806);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,807);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,808);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,809);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,810);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,811);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,812);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,813);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,814);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,815);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,816);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,817);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,818);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,819);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,820);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,821);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,822);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,823);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,824);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,825);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,826);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,827);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,828);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,829);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,830);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,831);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,832);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,839);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,840);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,841);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,842);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,843);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,844);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,845);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,846);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,849);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,850);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,851);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,852);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,853);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,854);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,855);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,856);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,857);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,858);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,859);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,860);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,861);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,862);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,863);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,864);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,865);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,866);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,867);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,868);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,869);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,870);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,871);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,872);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,873);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,874);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,875);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,876);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,877);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,878);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,879);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,880);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,881);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,882);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,883);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,884);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,885);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,886);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,887);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,888);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,889);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,890);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,891);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,892);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,893);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,894);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,895);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,896);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,897);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,898);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,899);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,900);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,901);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,902);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,903);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,904);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107337,905);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,336);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,337);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,407);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,408);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,409);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,410);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,411);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,412);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,413);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,414);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,415);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,416);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,417);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,418);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,419);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,420);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,421);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,422);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,423);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,424);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,425);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,426);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,427);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,428);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,429);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,430);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,431);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,432);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,433);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,434);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,435);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,436);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,437);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,438);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,439);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,440);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,441);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,442);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,443);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,444);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,445);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,446);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,447);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,448);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,449);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,450);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,458);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,459);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,460);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,461);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,462);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,463);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,464);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,465);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,466);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,467);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,468);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,469);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,470);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,471);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,472);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,473);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,474);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,475);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,476);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,477);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,478);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,479);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,480);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,481);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,482);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,483);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,484);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,485);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,486);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,487);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,488);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,489);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,492);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,493);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,494);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,495);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,496);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,497);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,502);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,503);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,504);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,505);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,506);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,507);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,508);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,509);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,510);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,511);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,512);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,513);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,514);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,515);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,516);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,517);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,518);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,519);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,520);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,521);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,522);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,523);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,524);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,533);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,534);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,535);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,536);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,537);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,538);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,540);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,541);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,542);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,543);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,544);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,545);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,546);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,547);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,548);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,549);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,551);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,552);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,553);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,554);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,558);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,559);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,560);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,561);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,562);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,563);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,571);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,572);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,573);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,574);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,575);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,576);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,577);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,578);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,579);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,580);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,581);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,582);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,583);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,584);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,585);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,586);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,587);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,588);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,589);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,615);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,616);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,617);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,618);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,619);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,620);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,621);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,622);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,623);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,624);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,625);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,626);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,627);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,628);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,629);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,631);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,632);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,633);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,641);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,642);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,643);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,644);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,645);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,646);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,648);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,649);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,650);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,662);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,663);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,664);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,665);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,666);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,667);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,668);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,669);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,670);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,671);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,672);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,674);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,682);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,683);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,692);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,693);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,694);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,695);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,696);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,697);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,698);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,699);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,700);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,701);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,729);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,730);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,731);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,732);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,733);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,734);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,735);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,736);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,737);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,738);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,739);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,740);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,741);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,742);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,744);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,745);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,746);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,747);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,748);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,749);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,750);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,751);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,752);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,753);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,754);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,755);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,756);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,757);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,758);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,759);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,760);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,772);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,773);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,774);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,775);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,776);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,777);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,778);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,779);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,780);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,781);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,782);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,783);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,784);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,785);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,786);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,787);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,788);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,789);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,790);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,791);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,792);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,793);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,794);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,795);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,796);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,797);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,798);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,799);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,800);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,801);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,802);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,803);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,804);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,805);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,806);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,807);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,808);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,809);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,810);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,811);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,812);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,813);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,814);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,815);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,816);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,817);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,818);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,819);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,820);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,821);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,822);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,823);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,824);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,825);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,826);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,827);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,828);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,829);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,830);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,831);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,832);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,844);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,845);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,846);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,849);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,850);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,851);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,852);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,853);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,854);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,855);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,856);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,857);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,858);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,859);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,860);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,861);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,862);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,863);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,864);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,865);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,866);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,867);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,868);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,869);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,870);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,871);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,872);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,873);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,874);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,875);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,876);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,877);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,878);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,879);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,880);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,881);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,882);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,883);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,884);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,885);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,886);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,887);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,888);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,889);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,890);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,891);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,892);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,893);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,894);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,895);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,896);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,897);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,898);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,899);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,900);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,901);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,902);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,903);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,904);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,905);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,906);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,907);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,908);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,909);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,910);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,911);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,912);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,913);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,914);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,915);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,916);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,917);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,918);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,919);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,920);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,921);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,922);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,923);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,924);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,925);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,926);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,927);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,928);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,929);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,930);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,931);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,932);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,933);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,934);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,935);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107453,936);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,336);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,337);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,407);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,408);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,409);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,410);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,411);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,412);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,413);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,414);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,415);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,416);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,417);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,418);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,419);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,420);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,421);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,422);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,423);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,424);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,425);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,426);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,427);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,428);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,429);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,430);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,431);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,432);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,433);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,434);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,435);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,436);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,437);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,438);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,439);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,440);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,441);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,442);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,443);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,444);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,445);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,446);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,447);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,448);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,449);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,450);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,458);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,459);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,460);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,461);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,462);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,463);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,464);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,465);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,466);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,467);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,468);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,469);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,470);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,471);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,472);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,473);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,474);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,475);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,476);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,477);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,478);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,479);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,480);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,481);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,482);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,483);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,484);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,485);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,486);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,487);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,488);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,489);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,492);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,493);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,494);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,495);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,496);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,497);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,502);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,503);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,504);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,505);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,506);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,507);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,508);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,509);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,510);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,511);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,512);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,513);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,514);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,515);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,516);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,517);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,518);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,519);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,520);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,521);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,522);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,523);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,524);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,533);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,534);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,535);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,536);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,537);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,538);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,540);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,541);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,542);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,543);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,544);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,545);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,546);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,547);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,548);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,549);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,551);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,552);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,553);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,554);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,558);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,559);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,560);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,561);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,562);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,563);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,571);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,572);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,573);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,574);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,575);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,576);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,577);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,578);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,579);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,580);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,581);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,582);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,583);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,584);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,585);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,586);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,587);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,588);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,589);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,615);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,616);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,617);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,618);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,619);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,620);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,621);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,622);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,623);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,624);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,625);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,626);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,627);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,628);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,629);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,631);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,632);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,633);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,641);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,642);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,643);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,644);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,645);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,646);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,648);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,649);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,650);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,662);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,663);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,664);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,665);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,666);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,667);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,668);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,669);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,670);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,671);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,672);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,674);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,682);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,683);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,692);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,693);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,694);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,695);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,696);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,697);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,698);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,699);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,700);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,701);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,729);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,730);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,731);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,732);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,733);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,734);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,735);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,736);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,737);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,738);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,739);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,740);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,741);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,742);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,744);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,745);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,746);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,747);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,748);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,749);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,750);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,751);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,752);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,753);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,754);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,755);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,756);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,757);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,758);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,759);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,760);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,772);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,773);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,774);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,775);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,776);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,777);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,778);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,779);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,780);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,781);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,782);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,783);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,784);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,785);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,786);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,787);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,788);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,789);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,790);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,791);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,792);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,793);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,794);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,795);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,796);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,797);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,798);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,799);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,800);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,801);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,802);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,803);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,804);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,805);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,806);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,807);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,808);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,809);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,810);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,811);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,812);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,813);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,814);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,815);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,816);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,817);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,818);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,819);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,820);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,821);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,822);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,823);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,824);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,825);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,826);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,827);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,828);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,829);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,830);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,831);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,832);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,844);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,845);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,846);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,849);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,850);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,851);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,852);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,853);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,854);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,855);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,856);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,857);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,858);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,859);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,860);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,861);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,862);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,863);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,864);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,865);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,866);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,867);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,868);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,869);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,870);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,871);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,872);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,873);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,874);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,875);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,876);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,877);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,878);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,879);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,880);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,881);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,882);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,883);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,884);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,885);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,886);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,887);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,888);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,889);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,890);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,891);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,892);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,893);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,894);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,895);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,896);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,897);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,898);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,899);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,900);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,901);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,902);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,903);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,904);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,905);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,906);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,907);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,908);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,909);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,910);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,911);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,912);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,913);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,914);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,915);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,916);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,917);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,918);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,919);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,920);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,921);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,922);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,923);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,924);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,925);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,926);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,927);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,928);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,929);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,930);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,931);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,932);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,933);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,934);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,935);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,936);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,937);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,938);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,939);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,940);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,941);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,942);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,943);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,944);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,945);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,946);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,947);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,948);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,949);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,950);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,951);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,952);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,953);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,954);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,955);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,956);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,957);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,958);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,959);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(107778,960);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2000);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2001);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2002);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2003);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2004);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2005);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2006);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2007);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108571,2008);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2005);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2006);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2007);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2008);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2009);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2010);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2011);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2012);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108823,2013);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,9);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,10);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,13);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,14);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,15);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,16);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,17);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,18);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,19);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,20);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,21);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,22);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,23);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,24);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,25);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,26);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,27);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,32);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,33);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,34);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,35);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,37);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,39);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,40);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,41);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,42);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,43);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,44);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,45);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,46);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,47);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,48);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,49);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,50);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,51);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,52);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,53);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,54);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,55);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,56);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,57);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,58);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,59);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,60);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,61);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,62);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,63);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,64);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,65);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,66);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,67);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,68);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,69);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,102);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,103);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,104);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,105);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,106);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,107);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,108);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,123);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,124);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,125);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,126);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,127);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,128);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,129);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,130);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,131);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,132);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,133);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,134);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,135);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,136);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,137);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,138);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,139);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,140);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,141);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,142);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,143);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,144);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,145);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,146);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,147);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,148);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,149);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,150);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,151);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,152);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,153);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,154);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,155);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,156);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,157);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,158);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,159);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,160);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,161);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,162);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,163);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,164);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,165);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,166);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,167);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,168);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,169);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,170);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,171);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,172);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,173);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,174);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,175);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,176);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,177);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,178);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,179);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,180);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,181);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,182);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,183);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,184);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,185);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,186);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,187);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,188);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,189);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,190);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,191);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,192);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,193);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,194);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,195);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,196);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,197);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,198);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,199);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,200);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,201);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,202);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,203);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,204);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,205);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,206);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,207);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,215);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,216);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,217);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,218);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,219);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,220);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,221);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,222);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,223);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,224);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,225);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,231);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,232);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,237);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,238);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,244);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,247);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,248);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,254);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,255);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,256);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,257);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,259);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,260);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,261);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,262);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,263);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,269);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,270);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,271);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,272);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,273);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,274);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,275);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,276);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,277);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,278);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,279);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,280);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,281);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,282);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,283);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,284);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,285);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,286);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,287);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,288);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,289);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,290);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,291);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,292);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,293);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,294);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,295);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,296);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,297);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,298);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,299);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,300);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,301);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,302);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,303);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,304);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,305);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,306);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,307);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,308);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,309);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,310);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,311);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,312);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,313);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,314);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,315);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,316);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,317);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,318);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,319);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,320);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,321);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,322);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,323);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,324);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,325);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,326);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,329);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,330);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,331);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,332);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,333);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,334);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,335);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,336);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,337);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,338);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,339);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,340);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,341);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,342);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,343);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,344);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,345);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,346);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,347);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,348);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,349);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,350);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,351);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,352);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,353);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,354);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,355);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,356);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,357);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,358);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,359);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,360);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,361);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,362);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,407);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,408);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,409);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,410);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,411);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,412);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,413);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,414);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,415);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,416);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,417);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,418);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,419);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,420);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,421);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,422);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,423);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,424);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,425);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,426);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,427);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,428);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,429);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,430);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,431);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,432);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,433);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,434);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,435);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,436);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,437);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,438);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,439);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,440);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,441);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,442);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,443);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,444);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,445);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,446);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,447);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,448);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,449);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,450);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,451);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,452);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,453);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,454);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,455);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,458);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,459);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,460);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,461);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,462);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,463);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,464);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,465);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,466);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,467);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,468);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,469);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,470);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,471);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,472);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,473);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,474);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,475);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,476);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,477);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,478);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,479);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,480);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,481);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,482);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,483);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,484);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,485);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,486);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,487);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,488);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,489);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,490);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,491);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,492);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,493);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,494);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,495);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,496);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,497);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,498);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,499);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,500);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,501);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,502);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,503);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,504);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,505);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,506);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,507);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,508);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,509);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,510);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,511);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,512);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,513);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,514);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,515);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,516);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,517);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,518);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,519);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,520);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,521);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,522);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,523);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,524);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,533);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,534);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,535);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,536);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,537);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,538);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,540);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,541);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,542);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,543);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,544);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,545);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,546);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,547);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,548);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,549);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,551);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,552);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,553);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,554);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,558);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,559);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,560);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,561);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,562);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,563);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,564);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,565);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,566);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,567);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,569);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,571);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,572);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,573);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,574);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,575);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,576);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,577);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,578);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,579);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,580);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,581);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,582);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,583);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,584);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,585);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,586);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,587);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,588);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,589);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,604);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,615);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,616);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,617);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,618);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,619);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,620);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,621);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,622);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,623);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,624);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,625);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,626);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,627);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,628);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,629);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,631);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,632);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,633);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,641);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,642);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,643);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,644);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,645);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,646);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,648);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,649);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,650);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,662);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,663);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,664);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,665);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,666);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,667);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,668);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,669);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,670);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,671);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,672);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,674);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,676);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,677);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,678);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,679);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,680);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,681);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,682);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,683);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,684);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,685);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,692);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,693);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,694);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,695);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,696);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,697);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,698);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,699);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,700);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,701);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,729);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,730);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,731);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,732);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,733);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,734);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,735);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,736);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,737);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,738);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,739);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,740);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,741);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,742);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,744);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,745);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,746);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,747);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,748);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,749);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,750);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,751);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,752);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,753);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,754);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,755);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,756);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,757);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,758);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,759);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,760);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,768);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,769);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,770);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,771);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,772);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,773);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,774);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,775);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,776);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,777);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,778);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,779);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,780);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,781);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,782);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,783);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,784);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,785);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,786);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,787);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,788);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,789);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,790);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,791);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,792);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,793);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,794);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,795);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,796);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,797);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,798);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,799);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,800);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,801);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,802);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,803);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,804);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,805);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,806);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,807);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,808);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,809);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,810);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,811);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,812);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,813);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,814);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,815);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,816);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,817);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,818);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,819);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,820);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,821);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,822);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,823);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,824);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,825);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,826);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,827);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,828);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,829);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,830);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,831);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,832);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,833);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,834);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,835);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,836);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,837);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,838);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,844);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,845);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,846);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,849);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,850);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,851);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,852);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,853);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,854);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,855);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,856);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,857);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,858);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,859);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,860);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,861);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,862);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,863);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,864);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,865);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,866);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,867);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,868);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,869);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,870);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,871);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,872);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,873);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,874);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,875);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,876);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,877);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,878);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,879);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,880);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,881);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,882);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,883);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,884);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,885);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,886);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,887);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,888);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,889);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,890);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,891);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,892);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,893);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,894);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,895);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,896);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,897);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,898);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,899);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,900);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,901);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,902);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,903);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,904);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,905);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,911);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,912);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,913);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,914);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,915);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,916);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,917);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,918);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,919);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,920);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,921);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,922);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,923);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,924);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,925);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,926);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,927);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,928);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,929);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,930);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,931);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,932);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,933);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,934);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,935);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,936);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,937);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,938);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,939);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,940);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,941);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,942);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,943);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,944);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,945);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,946);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,947);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,948);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,949);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,950);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,951);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,952);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,953);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,954);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,955);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,956);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,957);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,958);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,959);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,960);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,961);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,962);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,963);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,964);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,965);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,966);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,967);
+INSERT INTO "SCTMATCOMPONENTS_DATA2TAG" VALUES(108841,968);
+DROP TABLE IF EXISTS "SCTMATERIALS_DATA";
+CREATE TABLE "SCTMATERIALS_DATA" ( "SCTMATERIALS_DATA_ID" SLONGLONG ,"NAME" TEXT ,"DENSITY" DOUBLE , UNIQUE ( "SCTMATERIALS_DATA_ID" ) );
+INSERT INTO "SCTMATERIALS_DATA" VALUES(34,'ModuleConnBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(35,'DiscCoolOutBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(36,'DiscCoolMidBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(37,'DiscCoolInnBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(38,'CoolBlkMHiBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(39,'CoolBlkMLoBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(40,'CoolBlkSHiBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(41,'CoolBlkSLoBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(42,'FSIBHBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(43,'FSIBLBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(44,'FSIFHBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(45,'FSIFLBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(46,'PPF0eBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(47,'PPF0oBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(48,'PPF0cBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(49,'FwdSpineOutBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(50,'FwdSpineMidBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(51,'FwdSpineInnBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(52,'FwdHybridBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(124,'DiscFixBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(188,'FwdCryCool2Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(0,'Hybrid',3.97);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(1,'TPG',2.247);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(2,'CFRP',1.78);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(3,'Bracket',1.48);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(4,'CopperKapton',5.19);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(5,'CoolingBlock',3.25);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(6,'AluminiumKapton',1.7);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(7,'CN107',8.95);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(8,'CoolingPipe',1.83);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(9,'CFiberSupport',0.189);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(10,'Flange',1.6);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(11,'CFiberInterLink',1.6);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(12,'AirexR82',0.08);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(13,'TSC',1.97);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(14,'TSE',0.795);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(15,'TSP',0.569);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(16,'EMI',1.97);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(17,'FwdHybrid',1.59);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(18,'DiscSupport',0.1265);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(19,'CFiberFwdSupportFrame',0.214);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(20,'FwdCoolingPipe',1.52);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(21,'KaptonAl',1.6);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(22,'Foam',0.04377);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(23,'Rubber',2.982);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(77,'PEI',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(78,'Adhesive',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(79,'Dogleg',5.3051);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(122,'FwdRailBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(125,'SpiderBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(128,'EMIJointBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(148,'Brass',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(149,'InterlinkBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(157,'PPB1Tmp',1.8064);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(158,'BrlCryoServTmp',0.7742);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(184,'FSIFlangeBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(185,'FSIFibMaskBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(186,'FSIEndJewelBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(187,'FSIScorpionBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(116,'FwdCoolPipeBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(117,'FwdLMTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(118,'FwdLMTCoolBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(119,'FwdFibresBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(120,'FwdNPipeBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(121,'FwdNPipeBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(123,'FwdSupportBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(138,'CuKaptonEC',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(139,'FwdOTEBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(140,'FwdITEBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(141,'FwdShShieldBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(142,'FwdFrontSupBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(143,'FwdFlangeFOBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(144,'FwdFlangeFIBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(145,'FwdRearSupBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(146,'FwdFlangeROBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(147,'FwdFlangeRIBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(171,'C6F14',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(172,'Polycarbonate',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(173,'Polyester',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(174,'FwdCryoCoolBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(175,'FwdCryoLMTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(176,'FwdCCTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(177,'FwdHEXConnBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(178,'FwdRadHEXBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(179,'FwdRadLMTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(180,'FwdRadDryNBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(181,'FwdSTFTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(182,'FwdRCTBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(64,'Peek',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(65,'BeCu',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(66,'PCB',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(67,'Vectra',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(68,'Torlon',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(69,'Ceramic',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(70,'Grease',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(71,'CuOnAlWire',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(55,'Solder',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(183,'BearingBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(74,'Silicone',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(75,'CoolingBlock',5.0107);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(105,'CoolingPipeBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(127,'EMIBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(137,'HSPBase',1.41104);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(61,'EotiteP102',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(2002,'StaveSupport',0.96);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(24,'BrlHybrid',2.241);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(25,'BrlBaseBoard',2.133);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(26,'PigTail',1.135);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(27,'BrlBracket',3.03);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(28,'Dogleg',6.44);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(29,'AlKapton',1.712);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(30,'Glass',2.51);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(31,'CuKapton',2.94);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(32,'AlNitride',3.3);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(33,'DiscPowerTape',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(115,'PPCoolingBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(126,'EMIJoint',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(53,'OptoHarness',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(54,'Silica',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(56,'FR4',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(57,'Al2O3',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(58,'Araldite',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(59,'Epoxy',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(60,'Plastic',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(114,'PPConnectorBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(62,'AIT',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(63,'Elastosil',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(129,'Airex',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(130,'Techsil',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(131,'AlKapton',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(132,'Pyrogel',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(133,'EPDM',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(134,'TSCylinderBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(135,'TSBulkheadBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(136,'TSEndPanelBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(2000,'StaveSupport',0.9);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(2001,'Moderator',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(80,'CuAu',9.18);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(81,'SupportCyl0',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(82,'SupportCyl1',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(83,'SupportCyl2',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(84,'SupportCyl3',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(85,'Flange0',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(86,'Flange1',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(87,'Flange2',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(88,'Flange3',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(89,'Clamp0',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(90,'Clamp1',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(91,'Clamp2',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(92,'Clamp3',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(156,'FwdOTEFlngBase',0.34);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(159,'HEXInnerBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(160,'HEXMiddleBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(161,'HEXOuterBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(162,'Polyimide',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(163,'PPB1BBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(164,'PPB1ADBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(165,'PPB1A1CBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(166,'PPB1EFEGBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(167,'CabTrayBBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(168,'CabTrayADBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(169,'CabTrayA1CBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(170,'CabTrayEFEGBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(112,'HarnessBase',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(113,'PowerTape',1.4912);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(150,'FwdFrntWingBase',0.33);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(151,'FwdRearWingBase',0.24);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(152,'FwdMechBase',6.54);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(153,'FwdRadServBase',0.815);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(154,'FwdRadServBase',2.107);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(155,'FwdCryoServBase',2.107);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(72,'B2O3',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(73,'Na2O',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(76,'BrlBracket',1.6177);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(93,'SupportCyl0Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(94,'SupportCyl1Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(95,'SupportCyl2Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(96,'SupportCyl3Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(97,'Flange0Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(98,'Flange1Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(99,'Flange2Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(100,'Flange3Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(101,'Clamp0Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(102,'Clamp1Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(103,'Clamp2Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(104,'Clamp3Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(106,'BoronNitride',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(107,'ThermalGlue',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(108,'CoolingEnd0Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(109,'CoolingEnd1Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(110,'CoolingEnd2Base',1.0);
+INSERT INTO "SCTMATERIALS_DATA" VALUES(111,'CoolingEnd3Base',1.0);
+DROP TABLE IF EXISTS "SCTMATERIALS_DATA2TAG";
+CREATE TABLE "SCTMATERIALS_DATA2TAG" ( "SCTMATERIALS_TAG_ID" SLONGLONG ,"SCTMATERIALS_DATA_ID" SLONGLONG  );
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,0);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,1);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,3);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,4);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,5);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,6);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,8);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,16);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,17);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,21);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106559,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,5);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,8);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,16);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,27);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,28);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,29);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(106783,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,5);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,8);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,16);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,27);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,28);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,29);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107089,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,76);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,93);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,94);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,95);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,96);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,97);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,98);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,99);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,100);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,101);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,102);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,103);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,104);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,108);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,109);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,110);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,111);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,112);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,114);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,115);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,116);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,117);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,118);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,119);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,120);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,122);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,123);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,124);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,125);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,127);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,128);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,133);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,134);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,135);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,136);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,137);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,138);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,139);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,140);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,141);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,142);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,143);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,144);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,145);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,146);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,147);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,149);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,150);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,151);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,152);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,153);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,155);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,156);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,157);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107130,158);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,76);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,93);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,94);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,95);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,96);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,97);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,98);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,99);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,100);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,101);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,102);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,103);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,104);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,108);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,109);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,110);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,111);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,112);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,114);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,115);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,116);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,117);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,118);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,119);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,120);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,122);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,123);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,124);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,125);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,127);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,128);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,133);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,134);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,135);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,136);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,137);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,138);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,139);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,140);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,141);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,142);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,143);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,144);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,145);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,146);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,147);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,149);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,150);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,151);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,152);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,153);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,155);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,156);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,157);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,158);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,159);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,160);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,161);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,163);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,164);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,165);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,166);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,167);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,168);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,169);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,170);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,174);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,175);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,176);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,177);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,178);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,179);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,180);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,181);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107336,182);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,76);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,93);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,94);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,95);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,96);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,97);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,98);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,99);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,100);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,101);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,102);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,103);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,104);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,108);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,109);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,110);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,111);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,112);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,114);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,115);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,116);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,117);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,118);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,119);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,120);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,122);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,123);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,124);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,125);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,127);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,128);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,133);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,134);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,135);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,136);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,137);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,138);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,139);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,140);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,141);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,142);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,143);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,144);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,145);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,146);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,147);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,149);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,150);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,151);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,152);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,153);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,155);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,156);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,157);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,158);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,159);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,160);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,161);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,163);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,164);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,165);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,166);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,167);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,168);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,169);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,170);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,174);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,175);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,176);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,177);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,178);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,179);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,180);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,181);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,182);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107461,183);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,76);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,93);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,94);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,95);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,96);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,97);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,98);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,99);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,100);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,101);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,102);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,103);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,104);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,108);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,109);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,110);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,111);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,112);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,114);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,115);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,116);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,117);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,118);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,119);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,120);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,122);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,123);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,124);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,125);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,127);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,128);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,133);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,134);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,135);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,136);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,137);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,138);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,139);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,140);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,141);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,142);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,143);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,144);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,145);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,146);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,147);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,149);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,150);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,151);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,152);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,153);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,155);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,156);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,157);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,158);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,159);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,160);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,161);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,163);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,164);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,165);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,166);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,167);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,168);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,169);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,170);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,174);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,175);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,176);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,177);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,178);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,179);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,180);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,181);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,182);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,183);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,184);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,185);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,186);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(107777,187);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,2000);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108570,2001);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,2001);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108822,2002);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,2);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,7);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,9);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,10);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,11);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,12);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,13);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,14);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,15);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,18);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,19);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,20);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,22);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,23);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,24);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,25);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,26);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,30);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,31);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,32);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,33);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,34);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,35);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,36);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,37);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,38);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,39);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,40);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,41);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,42);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,43);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,44);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,45);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,46);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,47);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,48);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,49);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,50);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,51);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,52);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,53);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,54);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,55);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,56);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,57);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,58);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,59);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,60);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,61);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,62);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,63);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,64);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,65);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,66);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,67);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,68);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,69);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,70);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,71);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,72);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,73);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,74);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,75);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,76);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,77);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,78);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,79);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,80);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,93);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,94);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,95);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,96);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,97);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,98);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,99);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,100);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,101);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,102);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,103);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,104);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,105);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,106);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,107);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,108);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,109);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,110);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,111);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,112);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,113);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,114);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,115);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,116);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,117);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,118);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,119);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,120);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,122);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,123);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,124);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,125);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,127);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,128);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,129);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,130);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,131);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,132);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,133);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,134);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,135);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,136);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,137);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,138);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,139);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,140);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,141);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,142);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,143);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,144);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,145);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,146);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,147);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,148);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,149);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,150);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,151);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,152);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,153);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,155);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,156);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,157);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,158);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,159);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,160);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,161);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,162);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,163);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,164);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,165);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,166);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,167);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,168);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,169);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,170);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,171);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,172);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,173);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,174);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,175);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,176);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,177);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,178);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,179);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,180);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,181);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,182);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,183);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,184);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,185);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,186);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,187);
+INSERT INTO "SCTMATERIALS_DATA2TAG" VALUES(108840,188);
+--
+--
 COMMIT;
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py b/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py
index ff9539259..26510fcbb 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py
@@ -10,4 +10,7 @@ def FaserGeometryCfg (flags):
     from FaserGeoModel.ScintGMConfig import ScintGeometryCfg
     acc.merge(ScintGeometryCfg(flags))
 
+    from FaserGeoModel.SCTGMConfig import SctGeometryCfg
+    acc.merge(SctGeometryCfg(flags))
+
     return acc
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
index 6371517ce..3eea5bf7e 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
@@ -26,6 +26,10 @@ def _setupGeoModel():
         from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
         svcMgr+=GeometryDBSvc("ScintGeometryDBSvc")
 
+    if not hasattr(svcMgr, 'TrackerGeometryDBSvc'):
+        from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
+        svcMgr+=GeometryDBSvc("TrackerGeometryDBSvc")
+
     # from AthenaCommon import CfgGetter
     from VetoGeoModel.VetoGeoModelConf import VetoDetectorTool
     vetoDetectorTool = VetoDetectorTool( DetectorName = "Veto",
@@ -36,8 +40,14 @@ def _setupGeoModel():
 
     geoModelSvc.DetectorTools += [ vetoDetectorTool ]
 
-##        svcMgr.GeoModelSvc.DetectorTools['VetoDetectorTool'].useDynamicAlignFolders = InDetGeometryFlags.useDynamicAlignFolders()
+    from FaserSCT_GeoModel.FaserSCT_GeoModelConf import FaserSCT_DetectorTool
+    faserSCTDetectorTool = FaserSCT_DetectorTool( DetectorName = "SCT",
+                                                  Alignable = True,
+                                                  RDBAccessSvc = "RDBAccessSvc",
+                                                  GeometryDBSvc = "TrackerGeometryDBSvc",
+                                                  GeoDbTagSvc = "GeoDbTagSvc")
 
+    geoModelSvc.DetectorTools += [ faserSCTDetectorTool ]
 
 
     pass
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/SCTGMConfig.py b/DetectorDescription/GeoModel/FaserGeoModel/python/SCTGMConfig.py
new file mode 100644
index 000000000..bee84266c
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/SCTGMConfig.py
@@ -0,0 +1,52 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+
+def SctGeometryCfg (flags):
+    acc = ComponentAccumulator()
+    from FaserSCT_GeoModel.FaserSCT_GeoModelConfig import FaserSCT_GeometryCfg
+    acc.merge(FaserSCT_GeometryCfg( flags ))
+    return acc
+
+
+if __name__ == "__main__":
+  import os
+  from AthenaCommon.Logging import log
+  from AthenaCommon.Constants import DEBUG
+  from AthenaCommon.Configurable import Configurable
+  from CalypsoConfiguration.AllConfigFlags import ConfigFlags
+  from AthenaConfiguration.MainServicesConfig import MainServicesSerialCfg
+  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
+  # Set up logging and new style config
+  log.setLevel(DEBUG)
+  Configurable.configurableRun3Behavior = True
+  ConfigFlags.addFlag("GeoModel.FaserVersion", "Faser-00")
+  ConfigFlags.addFlag("Detector.SimulateVeto", True)
+  ConfigFlags.addFlag("Detector.SimulateSCT", True)
+
+  # from AthenaConfiguration.TestDefaults import defaultTestFiles
+  # Provide MC input
+  # ConfigFlags.Input.Files = defaultTestFiles.HITS
+  ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
+  ConfigFlags.Detector.SimulateVeto   = True
+  ConfigFlags.GeoModel.Align.Dynamic    = False
+  # Provide data input
+  ##from AthenaConfiguration.TestDefaults import defaultTestFiles
+  #
+  ConfigFlags.lock()
+  # Construct ComponentAccumulator
+  acc = MainServicesSerialCfg()
+  acc.merge(PoolReadCfg(ConfigFlags))
+  acc.merge(ScintGeometryCfg(ConfigFlags)) 
+  acc.merge(FaserSCT_GeometryCfg(ConfigFlags)) 
+  #acc.getService("StoreGateSvc").Dump=True
+  acc.getService("ConditionStore").Dump=True
+  acc.printConfig(withDetails=True)
+  f=open('ScintGMCfg2.pkl','w')
+  acc.store(f)
+  f.close()
+  ConfigFlags.dump()
+  # Execute and finish
+  acc.run(maxEvents=3)
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py b/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py
index afcf0ed65..9d85ee3d4 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py
@@ -4,23 +4,6 @@
 
 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
 
-# def InDetServiceMaterialCfg (flags):
-#     from AtlasGeoModel.GeoModelConfig import GeoModelCfg
-#     acc,geoModelSvc = GeoModelCfg( flags )
-#     from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
-#     acc.addService(GeometryDBSvc("InDetGeometryDBSvc"))
-#     from InDetServMatGeoModel.InDetServMatGeoModelConf import InDetServMatTool
-#     servMatTool = InDetServMatTool()
-#     if flags.GeoModel.Run=="RUN4":
-#         from InDetServMatGeoModel.InDetServMatGeoModelConf import InDetServMatBuilderToolSLHC
-#         InDetServMatBuilderToolSLHC = InDetServMatBuilderToolSLHC()
-#         acc.addPublicTool( InDetServMatBuilderToolSLHC )
-#         servMatTool.ServiceBuilderTool = InDetServMatBuilderToolSLHC
-#     geoModelSvc.DetectorTools += [ servMatTool ]
-#     acc.addService(geoModelSvc)
-#     return acc
-
-
 def ScintGeometryCfg (flags):
     acc = ComponentAccumulator()
     from VetoGeoModel.VetoGeoModelConfig import VetoGeometryCfg
@@ -46,14 +29,10 @@ if __name__ == "__main__":
   # Provide MC input
   # ConfigFlags.Input.Files = defaultTestFiles.HITS
   ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
-  # ConfigFlags.Detector.SimulatePixel = True
   ConfigFlags.Detector.SimulateVeto   = True
-  # ConfigFlags.Detector.SimulateTRT   = True
   ConfigFlags.GeoModel.Align.Dynamic    = False
   # Provide data input
   ##from AthenaConfiguration.TestDefaults import defaultTestFiles
-  ##ConfigFlags.Input.Files = defaultTestFiles.AOD
-  ##ConfigFlags.GeoModel.Align.Dynamic    = True
   #
   ConfigFlags.lock()
   # Construct ComponentAccumulator
diff --git a/DetectorDescription/GeoModel/GeoModelFaserUtilities/GeoModelFaserUtilities/DecodeFaserVersionKey.h b/DetectorDescription/GeoModel/GeoModelFaserUtilities/GeoModelFaserUtilities/DecodeFaserVersionKey.h
index 902e683d2..f8ce8195f 100644
--- a/DetectorDescription/GeoModel/GeoModelFaserUtilities/GeoModelFaserUtilities/DecodeFaserVersionKey.h
+++ b/DetectorDescription/GeoModel/GeoModelFaserUtilities/GeoModelFaserUtilities/DecodeFaserVersionKey.h
@@ -20,7 +20,7 @@ class DecodeFaserVersionKey
  public:
   /// Constructor is passed a pointer to GeoModelSvc plus the node
   /// for which you want the tag. 
-  /// Possible nodes are FASER, Scintillator, Tracker, Magnet, Calorimeter.
+  /// Possible nodes are FASER, Scintillator, SCT, Magnet, Calorimeter.
   DecodeFaserVersionKey(const IGeoModelSvc *, const std::string & node);
   // Overloading the constructor to allow adiabatic migration of clients away from the IGeoModelSvc
   DecodeFaserVersionKey(const IGeoDbTagSvc *, const std::string & node);
diff --git a/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx b/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
index 3455ceb3b..3378010fc 100644
--- a/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
+++ b/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
@@ -34,6 +34,7 @@ void DecodeFaserVersionKey::defineTag(const T* svc, const std::string & node)
 {
   std::string nodeOverrideTag;
   std::string scintOverrideTag; // Scint has two levels.
+  std::string trackerOverrideTag;
   if (node == "FASER") {
     nodeOverrideTag = "";
   } else if (node == "Scintillator") {
@@ -49,6 +50,9 @@ void DecodeFaserVersionKey::defineTag(const T* svc, const std::string & node)
     nodeOverrideTag = svc->preshowerVersionOverride();
   } else if (node == "Tracker") {
     nodeOverrideTag  = svc->trackerVersionOverride();
+  } else if (node == "SCT") {
+    nodeOverrideTag = svc->sctVersionOverride();
+    trackerOverrideTag = svc->trackerVersionOverride();
   } else if (node == "Calorimeter") {
     nodeOverrideTag  = svc->caloVersionOverride();
   } else {
@@ -73,6 +77,19 @@ void DecodeFaserVersionKey::defineTag(const T* svc, const std::string & node)
     m_node = "Scintillator";
   }
 
+  // If trackerOverrideTag is specified (and is not just "CUSTOM") then override with the tracker tag.
+  std::string trackerTag;
+  if (!trackerOverrideTag.empty()) {
+    // We dont care about the return value (custom = true/false). We only take notice of the custom 
+    // flag if the override is at the node we have selected. Ie we only look at nodeOverrideTag 
+    // in order to set m_custom. At any rate, we have to remove the CUSTOM string if it is present.
+    getCustomTag(trackerOverrideTag, trackerTag);
+  }
+  if (!trackerTag.empty()) {
+    m_tag = trackerTag;
+    m_node = "Tracker";
+  }
+
 
   // Finally if subsystem tag is overriden then use that.
   std::string outputTag;
diff --git a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
index a43d7f267..f9234a416 100644
--- a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
@@ -33,6 +33,7 @@ class IGeoDbTagSvc : virtual public IInterface {
   virtual const std::string & triggerVersion()                  const =0; 
   virtual const std::string & preshowerVersion()                const =0; 
   virtual const std::string & trackerVersion()                  const =0;
+  virtual const std::string & sctVersion()                  const =0;
   virtual const std::string & caloVersion()                     const =0;
   // virtual const std::string & magFieldVersion()                 const =0;
   // virtual const std::string & cavernInfraVersion()              const =0;
@@ -42,6 +43,7 @@ class IGeoDbTagSvc : virtual public IInterface {
   virtual const std::string & triggerVersionOverride()          const =0;
   virtual const std::string & preshowerVersionOverride()        const =0;
   virtual const std::string & trackerVersionOverride()          const =0;
+  virtual const std::string & sctVersionOverride()          const =0;
   virtual const std::string & caloVersionOverride()             const =0;
   // virtual const std::string & magFieldVersionOverride()         const =0;
   // virtual const std::string & cavernInfraVersionOverride()      const =0;
diff --git a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h
index cbedc7231..cdd1177d4 100644
--- a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h
@@ -31,6 +31,7 @@ public:
     virtual const std::string & triggerVersion()       const =0;
     virtual const std::string & preshowerVersion()     const =0;
     virtual const std::string & trackerVersion()       const =0;
+    virtual const std::string & sctVersion()           const =0;
     virtual const std::string & caloVersion()          const =0;
     // virtual const std::string & magFieldVersion()      const =0;
     // virtual const std::string & cavernInfraVersion()   const =0;
@@ -40,6 +41,7 @@ public:
     virtual const std::string & triggerVersionOverride()   const =0;
     virtual const std::string & preshowerVersionOverride() const =0;
     virtual const std::string & trackerVersionOverride()   const =0;
+    virtual const std::string & sctVersionOverride()       const =0;
     virtual const std::string & caloVersionOverride()      const =0;
     // virtual const std::string & magFieldVersionOverride()    const =0;
     // virtual const std::string & cavernInfraVersionOverride() const =0;
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
index 50b794ec9..f2f84287d 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
@@ -87,6 +87,10 @@ StatusCode GeoDbTagSvc::setupTags()
 		   ? rdbAccessSvc->getChildTag("Tracker", m_FaserVersion, "FASER", "FASERDD")
 		   : m_TrackerVersionOverride);
 
+  m_SCTVersion = (m_SCTVersionOverride.empty()
+      ? rdbAccessSvc->getChildTag("SCT", m_FaserVersion, "Tracker", "FASERDD")
+      : m_SCTVersionOverride);
+
   m_CaloVersion = (m_CaloVersionOverride.empty()
                    ? rdbAccessSvc->getChildTag("Calorimeter", m_FaserVersion,"FASER", "FASERDD")
 		   : m_CaloVersionOverride);
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
index f93c1c431..db053c931 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
@@ -33,6 +33,7 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   void setTriggerVersionOverride(const std::string& tag)           { m_TriggerVersionOverride=tag; }
   void setPreshowerVersionOverride(const std::string& tag)         { m_PreshowerVersionOverride=tag; }
   void setTrackerVersionOverride(const std::string& tag)           { m_TrackerVersionOverride=tag; }
+  void setSCTVersionOverride(const std::string& tag)               { m_SCTVersionOverride=tag; }
   void setCaloVersionOverride(const std::string& tag)              { m_CaloVersionOverride=tag; }
   // void setMagFieldVersionOverride(const std::string& tag)          { m_MagFieldVersionOverride=tag; }
   // void setCavernInfraVersionOverride(const std::string& tag)       { m_CavernInfraVersionOverride=tag; }
@@ -47,6 +48,7 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   const std::string & triggerVersionOverride()           const { return m_TriggerVersionOverride; }
   const std::string & preshowerVersionOverride()         const { return m_PreshowerVersionOverride; }
   const std::string & trackerVersionOverride()           const { return m_TrackerVersionOverride; }
+  const std::string & sctVersionOverride()               const { return m_SCTVersionOverride; }
   const std::string & caloVersionOverride()              const { return m_CaloVersionOverride; }
   // const std::string & magFieldVersionOverride()          const { return m_MagFieldVersionOverride; }
   // const std::string & cavernInfraVersionOverride()       const { return m_CavernInfraVersionOverride; }
@@ -56,6 +58,7 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   const std::string & triggerVersion()                   const { return m_TriggerVersion; }
   const std::string & preshowerVersion()                 const { return m_PreshowerVersion; }
   const std::string & trackerVersion()                   const { return m_TrackerVersion; }
+  const std::string & sctVersion()                       const { return m_SCTVersion; }
   const std::string & caloVersion()                      const { return m_CaloVersion; }
   // const std::string & magFieldVersion()                  const { return m_MagFieldVersion; }
   // const std::string & cavernInfraVersion()               const { return m_CavernInfraVersion; }
@@ -70,6 +73,7 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   std::string m_TriggerVersion;
   std::string m_PreshowerVersion;
   std::string m_TrackerVersion;
+  std::string m_SCTVersion;
   std::string m_CaloVersion;
   // std::string m_MagFieldVersion;
   // std::string m_CavernInfraVersion;
@@ -79,6 +83,7 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   std::string m_TriggerVersionOverride;
   std::string m_PreshowerVersionOverride;
   std::string m_TrackerVersionOverride;
+  std::string m_SCTVersionOverride;
   std::string m_CaloVersionOverride;
   // std::string m_MagFieldVersionOverride;
   // std::string m_CavernInfraVersionOverride;
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
index bd0427a1f..22c78634a 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
@@ -60,6 +60,7 @@ GeoModelSvc::GeoModelSvc(const std::string& name,ISvcLocator* svc)
   declareProperty( "TriggerVersionOverride",      m_TriggerVersionOverride);
   declareProperty( "PreshowerVersionOverride",    m_PreshowerVersionOverride);
   declareProperty( "TrackerVersionOverride",      m_TrackerVersionOverride);
+  declareProperty( "SCTVersionOverride",          m_SCTVersionOverride);
   declareProperty( "CaloVersionOverride",         m_CaloVersionOverride);
   // declareProperty( "MagFieldVersionOverride",     m_MagFieldVersionOverride);
   // declareProperty( "CavernInfraVersionOverride",  m_CavernInfraVersionOverride);
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
index b7b9f3615..c08a61418 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
@@ -77,6 +77,7 @@ private:
     std::string           m_TriggerVersionOverride;
     std::string           m_PreshowerVersionOverride;
     std::string           m_TrackerVersionOverride;
+    std::string           m_SCTVersionOverride;
     std::string           m_CaloVersionOverride;
     // std::string           m_MagFieldVersionOverride;
     // std::string           m_CavernInfraVersionOverride;
@@ -99,6 +100,7 @@ private:
     const std::string & triggerVersionOverride()   const {return m_TriggerVersionOverride  ;}
     const std::string & preshowerVersionOverride() const {return m_PreshowerVersionOverride  ;}
     const std::string & trackerVersionOverride()   const {return m_TrackerVersionOverride  ;}
+    const std::string & sctVersionOverride()       const {return m_SCTVersionOverride  ;}
     const std::string & caloVersionOverride()      const {return m_CaloVersionOverride  ;}
     // const std::string & magFieldVersionOverride()     const {return m_MagFieldVersionOverride  ;}
     // const std::string & cavernInfraVersionOverride()  const {return m_CavernInfraVersionOverride  ;}
@@ -108,6 +110,7 @@ private:
     const std::string & triggerVersion()       const {return m_geoDbTagSvc->triggerVersion(); }
     const std::string & preshowerVersion()     const {return m_geoDbTagSvc->preshowerVersion(); }
     const std::string & trackerVersion()       const {return m_geoDbTagSvc->trackerVersion(); }
+    const std::string & sctVersion()           const {return m_geoDbTagSvc->sctVersion(); }
     const std::string & caloVersion()          const {return m_geoDbTagSvc->caloVersion(); }
     // const std::string & magFieldVersion()      const {return m_geoDbTagSvc->magFieldVersion(); }
     // const std::string & cavernInfraVersion()   const {return m_geoDbTagSvc->cavernInfraVersion(); }
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
index eabd66c0d..00465e955 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
@@ -186,6 +186,20 @@ StatusCode RDBMaterialManager::readMaterialsFromDB(ISvcLocator* pSvcLocator)
     m_scintmaterials = iAccessSvc->getRecordsetPtr("ScintMaterials","ScintMaterials-00", "", "FASERDD");
   }
   
+  // --- SCT materials
+  DecodeFaserVersionKey keySCT(iGeoModel, "SCT");
+  m_sctmatcomponents = iAccessSvc->getRecordsetPtr("SCTMatComponents",keySCT.tag(),keySCT.node(),"FASERDD");
+  if(m_sctmatcomponents->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting SCTMatComponents with default tag" <<endmsg;
+    m_sctmatcomponents = iAccessSvc->getRecordsetPtr("SCTMatComponents","SCTMatComponents-00", "", "FASERDD");
+  }
+  m_sctmaterials = iAccessSvc->getRecordsetPtr("SCTMaterials",keySCT.tag(),keySCT.node(), "FASERDD");
+  if(m_sctmaterials->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting SCTMaterials with default tag" <<endmsg;
+    m_trackermaterials = iAccessSvc->getRecordsetPtr("SCTMaterials","SCTMaterials-00", "", "FASERDD");
+  }
   // --- Tracker materials
   DecodeFaserVersionKey keyTracker(iGeoModel, "Tracker");
   m_trackermatcomponents = iAccessSvc->getRecordsetPtr("TrackerMatComponents",keyTracker.tag(),keyTracker.node(),"FASERDD");
@@ -240,7 +254,7 @@ GeoMaterial* RDBMaterialManager::searchMaterialMap(const std::string & name)
   	
   if (m!=end) {
     if(log.level()==MSG::VERBOSE)
-      log << MSG::VERBOSE << " ***** in searchMaterialMap(): search sucess "  << endmsg;	
+      log << MSG::VERBOSE << " ***** in searchMaterialMap(): search success "  << endmsg;	
     return (*m).second;
   }
   else {
@@ -258,7 +272,7 @@ GeoMaterial* RDBMaterialManager::searchMaterialMap(const std::string & name) con
   std::map< std::string, GeoMaterial * >::const_iterator end = m_materialMap.end();
   if (m!=end) {
     if(log.level()==MSG::VERBOSE)
-      log << MSG::VERBOSE << " ***** in searchMaterialMap(): search sucess "  << endmsg;	
+      log << MSG::VERBOSE << " ***** in searchMaterialMap(): search success "  << endmsg;	
     return (*m).second;
   }
   else {
@@ -413,6 +427,14 @@ GeoMaterial* RDBMaterialManager::getMaterial(const std::string & name) {
       tmp_matcomponents = m_trackermatcomponents;
       data_id = "TRACKERMATERIALS_DATA_ID";
     }
+    else if(name.find("sct",0) == 0)
+    {
+      detector = "sct";
+      tmp_materials = m_sctmaterials;
+      tmp_matcomponents = m_sctmatcomponents;
+      data_id = "SCTMATERIALS_DATA_ID";
+    }
+
   else if(name.find("calo",0) == 0)
     {
       detector = "calo";
@@ -579,6 +601,13 @@ const GeoMaterial*  RDBMaterialManager:: getMaterial(const std::string &name) co
       tmp_matcomponents = m_trackermatcomponents;
       data_id = "TRACKERMATERIALS_DATA_ID";
     }
+  else if(name.find("sct",0) == 0)
+    {
+      detector = "sct";
+      tmp_materials = m_sctmaterials;
+      tmp_matcomponents = m_sctmatcomponents;
+      data_id = "SCTMATERIALS_DATA_ID";
+    }
   else if(name.find("calo",0) == 0)
     {
       detector = "calo";
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
index 14af632fe..ec34b734d 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
@@ -87,6 +87,8 @@ class RDBMaterialManager: public StoredMaterialManager {
   IRDBRecordset_ptr m_scintmatcomponents;
   IRDBRecordset_ptr m_trackermaterials;
   IRDBRecordset_ptr m_trackermatcomponents;
+  IRDBRecordset_ptr m_sctmaterials;
+  IRDBRecordset_ptr m_sctmatcomponents;
   IRDBRecordset_ptr m_calomaterials;
   IRDBRecordset_ptr m_calomatcomponents;
 
diff --git a/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py b/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py
index f80fb77d9..5d5693cfa 100644
--- a/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py
+++ b/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py
@@ -1,5 +1,5 @@
 #
-#  Joboptions for the loading of the of InDetDDMgr
+#  Joboptions for loading 
 #
 
 # DLLs 
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx
index 846a3ce29..3dc2b94a7 100644
--- a/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx
+++ b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx
@@ -845,96 +845,7 @@ IdDictDetDescrCnv::getFileNamesFromTags()
 	  << ", dictionary tag: " << m_caloIdDictTag
 	  << endmsg;
     }
-    else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;
-        
-    // Calo neighbor files:
-    // IRDBRecordset_ptr caloNeighborTable = rdbAccessSvc->getRecordsetPtr("CaloNeighborTable",
-	// 								detectorKey.tag(), 
-	// 								detectorKey.node());
-    // if (caloNeighborTable->size()==0) {
-    //   caloNeighborTable = rdbAccessSvc->getRecordsetPtr("CaloNeighborTable","CaloNeighborTable-00");
-    // }
-    // // Size == 0 if not found
-    // if (caloNeighborTable->size()) {
-    //   const IRDBRecord* neighborTable =  (*caloNeighborTable)[0];
-    //   m_fullAtlasNeighborsName        = neighborTable->getString("FULLATLASNEIGHBORS");
-    //   m_fcal2dNeighborsName           = neighborTable->getString("FCAL2DNEIGHBORS");
-    //   m_fcal3dNeighborsNextName       = neighborTable->getString("FCAL3DNEIGHBORSNEXT");
-    //   m_fcal3dNeighborsPrevName       = neighborTable->getString("FCAL3DNEIGHBORSPREV");
-    //   m_tileNeighborsName             = neighborTable->getString("TILENEIGHBORS");
-    //   log << MSG::DEBUG << " using neighbor files:  " << endmsg;
-    //   log << MSG::DEBUG << "   FullAtlasNeighborsFileName:  " << m_fullAtlasNeighborsName
-	//   << endmsg;
-    //   log << MSG::DEBUG << "   FCAL2DNeighborsFileName:     " << m_fcal2dNeighborsName      
-	//   << endmsg;
-    //   log << MSG::DEBUG << "   FCAL3DNeighborsNextFileName: " << m_fcal3dNeighborsNextName
-	//   << endmsg;
-    //   log << MSG::DEBUG << "   FCAL3DNeighborsPrevFileName: " << m_fcal3dNeighborsPrevName  
-	//   << endmsg;
-    //   log << MSG::DEBUG << "   TileNeighborsFileName:       " << m_tileNeighborsName        
-	//   << endmsg;
-    // }
-    // else log << MSG::ERROR << " no record set found neighbor file " << endmsg;
-    
-    
-    
-    // Get Muon
-    // detectorKey = DecodeVersionKey(geoModelSvc, "MuonSpectrometer");
-    // log << MSG::DEBUG << "From Version Tag: " 
-	// << detectorKey.tag()  << " at Node: " << detectorKey.node() << endmsg;
-    // idDictSet = rdbAccessSvc->getRecordsetPtr("MuonIdentifier",
-	// 				      detectorKey.tag(), 
-	// 				      detectorKey.node());
-    // // Size == 0 if not found
-    // if (idDictSet->size()) {
-    //   idDictTable       = (*idDictSet)[0];
-    //   dictName          = idDictTable->getString("DICT_NAME");
-    //   m_muonIDFileName  = idDictTable->getString("DICT_FILENAME");
-    //   m_muonIdDictTag   = idDictSet->tagName();
-    //   log << MSG::DEBUG << " using Dictionary:  " << dictName  
-	//   << ", file: " <<  m_muonIDFileName 
-	//   << ", dictionary tag: " << m_muonIdDictTag
-	//   << endmsg;
-    //   if (m_muonIDFileName == "") {
-	// log << MSG::ERROR << "MuonIDFileName CANNOT be empty " << endmsg;
-	// return StatusCode::FAILURE;
-    //   }
-    //   else if (m_muonIDFileName == "IdDictMuonSpectrometer.xml") {
-	// log << MSG::ERROR << "MuonIDFileName must NOT be IdDictMuonSpectrometer.xml " 
-	//     << endmsg;
-	// return StatusCode::FAILURE;
-    //   }
-      
-    // }
-    // else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;
-    
-    // Get Forward
-    // detectorKey = DecodeVersionKey(geoModelSvc, "ForwardDetectors");
-    // log << MSG::DEBUG << "From Version Tag: " << detectorKey.tag()
-	// << " at Node: " << detectorKey.node() << endmsg;
-    // idDictSet = rdbAccessSvc->getRecordsetPtr("ForDetIdentifier",
-	// 				      detectorKey.tag(), 
-	// 				      detectorKey.node());
-    // // For older datasets use ForDetIdentifier-00 as fallback
-    // if (0 == idDictSet->size()) {
-    //   idDictSet = rdbAccessSvc->getRecordsetPtr("ForDetIdentifier",
-	// 					"ForDetIdentifier-00");
-    //   log << MSG::DEBUG << " explicitly requesting ForDetIdentifier-00 tag for pre-forward detector data  " 
-	//   << endmsg;
-    // }
-    // // Size == 0 if not found
-    // if (idDictSet->size()) {
-    //   idDictTable          = (*idDictSet)[0];
-    //   dictName             = idDictTable->getString("DICT_NAME");
-    //   m_forwardIDFileName  = idDictTable->getString("DICT_FILENAME");
-    //   m_forwardIdDictTag   = idDictSet->tagName();
-    //   log << MSG::DEBUG << " using Dictionary:  " << dictName  
-	//   << ", file: " <<  m_forwardIDFileName 
-	//   << ", dictionary tag: " << m_forwardIdDictTag
-	//   << endmsg;
-    // }
-    // else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;
-                        
+    else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;                        
 
     log << MSG::DEBUG << "End access to RDB for id dictionary info " << endmsg;
 
@@ -973,18 +884,6 @@ IdDictDetDescrCnv::registerFilesWithParser()
             << m_caloIDFileName
             << endmsg;
     }
-    // if ("" != m_muonIDFileName) {
-    //     m_parser->register_external_entity("MuonSpectrometer", m_muonIDFileName);
-    //     log << MSG::INFO << "Reading MuonSpectrometer IdDict file "
-    //         << m_muonIDFileName
-    //         << endmsg;
-    // }
-    // if ("" != m_forwardIDFileName) {
-    //     m_parser->register_external_entity("ForwardDetectors", m_forwardIDFileName);
-    //     log << MSG::INFO << "Reading ForwardDetectors IdDict file "
-    //         << m_forwardIDFileName
-    //         << endmsg;
-    // }
 
     return StatusCode::SUCCESS ;
 }
diff --git a/Scintillator/ScintDetDescr/ScintGeoModelUtils/src/ExtraMaterial.cxx b/Scintillator/ScintDetDescr/ScintGeoModelUtils/src/ExtraMaterial.cxx
index 9f8a385a1..93756890c 100644
--- a/Scintillator/ScintDetDescr/ScintGeoModelUtils/src/ExtraMaterial.cxx
+++ b/Scintillator/ScintDetDescr/ScintGeoModelUtils/src/ExtraMaterial.cxx
@@ -6,7 +6,6 @@
 #include "ScintGeoModelUtils/GenericTubeMaker.h"
 #include "ScintGeoModelUtils/TubeVolData.h"
 #include "ScintGeoModelUtils/DistortedMaterialManager.h"
-//#include "ScintGeoModelUtils/InDetMaterialManager.h"
 #include "RDBAccessSvc/IRDBRecordset.h"
 #include "RDBAccessSvc/IRDBRecord.h"
 #include "GeoPrimitives/GeoPrimitives.h"
diff --git a/Scintillator/ScintDetDescr/ScintIdentifier/src/VetoID.cxx b/Scintillator/ScintDetDescr/ScintIdentifier/src/VetoID.cxx
index 28c0bf3ae..1d55a6194 100644
--- a/Scintillator/ScintDetDescr/ScintIdentifier/src/VetoID.cxx
+++ b/Scintillator/ScintDetDescr/ScintIdentifier/src/VetoID.cxx
@@ -767,16 +767,6 @@ VetoID::initLevelsFromDict()
         std::cout << " DEBUG pmt      "  << m_pmt_impl.show_to_string() << std::endl; 
     }
     
-//      std::cout << "VetoID::initLevelsFromDict - found levels "       << std::endl;
-//      std::cout << "subdet        "   << m_INDET_INDEX        << std::endl;
-//      std::cout << "part          "   << m_SCT_INDEX          << std::endl;
-//      std::cout << "barrel_endcap "   << m_BARREL_EC_INDEX    << std::endl;
-//      std::cout << "layer or disk "   << m_LAYER_DISK_INDEX   << std::endl;
-//      std::cout << "phi_module    "   << m_PHI_MODULE_INDEX   << std::endl;
-//      std::cout << "eta_module    "   << m_ETA_MODULE_INDEX   << std::endl;
-//      std::cout << "side          "   << m_SIDE_INDEX         << std::endl;
-//      std::cout << "strip         "   << m_STRIP_INDEX        << std::endl;
-
     std::cout << "scint "  << m_scint_impl.decode_index() << " " 
               <<   (std::string)m_scint_impl.ored_field() << " " 
               << std::hex    << m_scint_impl.mask() << " " 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ExtendedAlignableTransform.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ExtendedAlignableTransform.h
index 74076d823..814a5eee2 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ExtendedAlignableTransform.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ExtendedAlignableTransform.h
@@ -54,4 +54,4 @@ namespace ScintDD {
 
 } // end namespace 
 
-#endif // SCINTINDETREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
+#endif // SCINTREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorDesign.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorDesign.h
index 02500895d..556b1667d 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorDesign.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorDesign.h
@@ -12,7 +12,6 @@
 #define SCINTREADOUTGEOMETRY_SCINTDETECTORDESIGN_H
 
 // Input/output classes
-// #include "InDetReadoutGeometry/SiDiodesParameters.h"
 #include "ScintReadoutGeometry/ScintDD_Defs.h"
 #include "CLHEP/Geometry/Point3D.h"
 #include "CLHEP/Geometry/Vector3D.h"
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
index 27ac6a4b9..08d89603b 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElement.h
@@ -173,6 +173,8 @@ namespace ScintDD {
       ///////////////////////////////////////////////////////////////////
     
       //@{
+        const ScintDetectorElement* nextInZ() const;
+        const ScintDetectorElement* prevInZ() const;
       //@}
     
       ///////////////////////////////////////////////////////////////////
@@ -382,6 +384,10 @@ namespace ScintDD {
       //@}
     
       //////////////////////////////////////////////////////////////////////////////////////
+
+      void setNextInZ(const ScintDetectorElement* element);
+      void setPrevInZ(const ScintDetectorElement* element);
+
       //////////////////////////////////////////////////////////////////////////////////////
     
     public:
@@ -439,6 +445,9 @@ namespace ScintDD {
       const ScintDetectorDesign *m_design; // local description of this detector element
       const ScintCommonItems * m_commonItems;
     
+      const ScintDetectorElement* m_prevInZ;
+      const ScintDetectorElement* m_nextInZ;
+
       bool m_isVeto;
       bool m_isTrigger;
       bool m_isPreshower;
@@ -664,6 +673,26 @@ namespace ScintDD {
     {
       return m_commonItems;
     }
+
+    inline const ScintDetectorElement* ScintDetectorElement::prevInZ() const
+    {
+      return m_prevInZ;
+    }
+
+    inline const ScintDetectorElement* ScintDetectorElement::nextInZ() const
+    {
+      return m_nextInZ;
+    }
+
+    inline void ScintDetectorElement::setPrevInZ(const ScintDetectorElement* element)
+    {
+      m_prevInZ = element;
+    }
+
+    inline void ScintDetectorElement::setNextInZ(const ScintDetectorElement* element)
+    {
+      m_nextInZ = element;
+    }
         
 } // namespace ScintDD
 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElementCollection.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElementCollection.h
index 3e3c092bc..896f810d0 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElementCollection.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintDetectorElementCollection.h
@@ -41,4 +41,4 @@ CLASS_DEF( ScintDD::ScintDetectorElementCollection , 1090173979 , 1 )
 #include "AthenaKernel/CondCont.h"
 CONDCONT_DEF( ScintDD::ScintDetectorElementCollection, 1189378543 );
 
-#endif // INDETREADOUTGEOMETRY_SIDETECTORELEMENTCOLLECTION_H
+#endif // SCINTREADOUTGEOMETRY_SCINTDETECTORELEMENTCOLLECTION_H
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintLocalPosition.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintLocalPosition.h
index 69770e0b7..9fe68ef5f 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintLocalPosition.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintLocalPosition.h
@@ -15,7 +15,7 @@
 #include "TrkEventPrimitives/ParamDefs.h"
 #include <cmath>
 
-namespace Trk {
+namespace ScintDD {
   enum ExtraLocalPosParam {distDepth = 2}; // These will be defined in Trk soon.
 }
 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintNumerology.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintNumerology.h
index 05883b0f5..92bf30e73 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintNumerology.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/ScintNumerology.h
@@ -19,7 +19,6 @@ namespace ScintDD {
   /** @class ScintNumerology
   
      Class to extract numerology for Veto, Trigger and Preshower. For example number of stations, plates, pmts, etc.
-     See InnerDetector/InDetExample/InDetDetDescrExample/src/SiReadSiDetectorElements.cxx for example of usage.
 
      @author Grant Gorfine
    */
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/Version.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/Version.h
index 0792d719a..67f9c6a9e 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/Version.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/Version.h
@@ -86,6 +86,6 @@ namespace ScintDD {
       int m_patch;
   };
 
-} //  namespace  InDetDD
+} //  namespace  ScintDD
 
 #endif // SCINTREADOUTGEOMETRY_VERSION 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/VetoDetectorManager.h b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/VetoDetectorManager.h
index 86cc4d527..9c64091a9 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/VetoDetectorManager.h
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/ScintReadoutGeometry/VetoDetectorManager.h
@@ -117,7 +117,7 @@ namespace ScintDD {
                                   const CondAttrListCollection* obj,
                                   GeoVAlignmentStore* alignStore) const override;
 
-      // comply with InDetDetectorManager interface
+      // comply with ScintDetectorManager interface
       bool processSpecialAlignment(const std::string & key,
                                    ScintDD::AlignFolderType alignfolder) const override;
 
@@ -160,7 +160,7 @@ namespace ScintDD {
       
     };
 
-} // namespace InDetDD
+} // namespace ScintDD
 
 #ifndef GAUDI_NEUTRAL
 #include "AthenaKernel/CLASS_DEF.h" 
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
index 84261bf17..7c5c8f2df 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorElement.cxx
@@ -25,10 +25,7 @@
 #include "CLHEP/Units/PhysicalConstants.h" // for M_PI
 #include "CLHEP/Units/SystemOfUnits.h"
 
-// #include "InDetReadoutGeometry/SiCellId.h"
-// #include "InDetReadoutGeometry/SiReadoutCellId.h"
 #include "ScintReadoutGeometry/ScintDetectorDesign.h"
-// #include "InDetReadoutGeometry/StripStereoAnnulusDesign.h"
 
 
 #include "ScintReadoutGeometry/ScintCommonItems.h"
@@ -43,7 +40,7 @@
 namespace ScintDD {
 using Trk::distEta;
 using Trk::distPhi;
-using Trk::distDepth;
+// using Trk::distDepth;
 
 // Constructor with parameters:
 ScintDetectorElement::ScintDetectorElement(const Identifier &id,
@@ -56,6 +53,8 @@ ScintDetectorElement::ScintDetectorElement(const Identifier &id,
   m_idHash(64000),
   m_design(design),
   m_commonItems(commonItems),
+  m_prevInZ(nullptr),
+  m_nextInZ(nullptr),
   m_cacheValid(false),
   m_firstTime(true),
   m_mutex(),
@@ -598,209 +597,6 @@ bool ScintDetectorElement::isPreshower() const
   return m_isPreshower;
 }
 
-// bool ScintDetectorElement::isDBM() const 
-// { 
-//   return m_isDBM;
-// } 
-
-// bool ScintDetectorElement::isBlayer() const
-// {
-//   if (isPixel() && isBarrel()) {
-//     const PixelID* p_pixelId = static_cast<const PixelID *>(getIdHelper());
-//     return (0==p_pixelId->layer_disk(m_id));
-//   } else {
-//     return false;
-//   }
-// } 
-
-// bool ScintDetectorElement::isInnermostPixelLayer() const
-// {
-//   if (isPixel() && isBarrel()) {
-//     const PixelID* p_pixelId = static_cast<const PixelID *>(getIdHelper());
-//     return (0==p_pixelId->layer_disk(m_id));
-//   } else {
-//     return false;
-//   }
-// }  
-
-// bool ScintDetectorElement::isNextToInnermostPixelLayer() const
-// {
-//   if (isPixel() && isBarrel()) {
-//     const PixelID* p_pixelId = static_cast<const PixelID *>(getIdHelper());
-//     return (1==p_pixelId->layer_disk(m_id));
-//   } else {
-//     return false;
-//   }
-// }  
-
-// // compute sin(tilt angle) at center:
-// double ScintDetectorElement::sinTilt() const
-// {
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   // Tilt is defined as the angle between a refVector and the sensor normal.
-//   // In barrel refVector = unit vector radial.
-//   // in endcap it is assumed there is no tilt.
-//   // sinTilt = (refVector cross normal) . z
-
-//   // tilt angle is not defined for the endcap
-//   if (isEndcap()) return 0;
-  
-//   // Angle between normal and radial vector.
-//   // HepGeom::Vector3D<double> refVector(m_center.x(), m_center.y(), 0);
-//   // return (refVector.cross(m_normal)).z()/refVector.mag();
-//   // or the equivalent
-//   return (m_center.x() * m_normal.y() - m_center.y() * m_normal.x()) / m_center.perp();
-// }
-
-//   double ScintDetectorElement::sinTilt(const Amg::Vector2D &localPos) const
-// {
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   // tilt angle is not defined for the endcap
-//   if (isEndcap()) return 0;
-
-//   HepGeom::Point3D<double> point=globalPositionCLHEP(localPos);
-//   return sinTilt(point);
-// }
-
-// double ScintDetectorElement::sinTilt(const HepGeom::Point3D<double> &globalPos) const
-// { 
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   // It is assumed that the global position is already in the plane of the element.
-
-//   // tilt angle is not defined for the endcap
-//   if (isEndcap()) return 0;
-  
-//   // Angle between normal and radial vector.
-//   //HepGeom::Vector3D<double> refVector(globalPos.x(), globalPos.y(), 0);
-//   //return (refVector.cross(m_normal)).z()/refVector.mag();
-//   // or the equivalent
-//   return (globalPos.x() * m_normal.y() - globalPos.y() * m_normal.x()) / globalPos.perp();
-// }
-
-// double ScintDetectorElement::sinStereo() const
-// {
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   // Stereo is the angle between a refVector and a vector along the strip/pixel in eta direction.
-//   // I'm not sure how the sign should be defined. I've defined it here
-//   // with rotation sense respect to normal,
-//   // where normal is away from IP in barrel and in -ve z direction in endcap
-
-//   // In Barrel refVector = unit vector along z axis,
-//   // in endcap refVector = unit vector radial.
-//   //
-//   // sinStereo = (refVector cross stripAxis) . normal
-//   //           = (refVector cross etaAxis) . normal
-//   //           = refVector . (etaAxis cross normal)
-//   //           = refVector . phiAxis  
-//   //
-//   // in Barrel we use
-//   // sinStereo = refVector . phiAxis
-//   //           = phiAxis.z()
-//   //
-//   // in endcap we use
-//   // sinStereo = (refVector cross etaAxis) . normal
-//   //           = -(center cross etaAxis) . zAxis
-//   //           = (etaAxis cross center). z() 
-
-//   double sinStereo;
-//   if (isBarrel()) {
-//     sinStereo = m_phiAxis.z();
-//   } else { // endcap
-//     sinStereo = (m_center.y() * m_etaAxis.x() - m_center.x() * m_etaAxis.y()) / m_center.perp();
-//   }      
-//   return sinStereo;
-// }
-
-//   double ScintDetectorElement::sinStereo(const Amg::Vector2D &localPos) const
-// {
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   HepGeom::Point3D<double> point=globalPositionCLHEP(localPos);
-//   return sinStereo(point);
-// }
-
-// double ScintDetectorElement::sinStereo(const HepGeom::Point3D<double> &globalPos) const
-// {
-//   //
-//   // sinStereo =  (refVector cross stripAxis) . normal
-//   //
-
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (!m_cacheValid) updateCache();
-
-//   double sinStereo;
-//   if (isBarrel()) {
-//     if (m_design->shape() != InDetDD::Trapezoid) {
-//       sinStereo = m_phiAxis.z();
-//     } else { // trapezoid
-//       assert (minWidth() != maxWidth());
-//       double radius = width() * length() / (maxWidth() - minWidth());
-//       HepGeom::Vector3D<double> stripAxis = radius * m_etaAxisCLHEP + globalPos - m_centerCLHEP;
-//       sinStereo = (stripAxis.x() * m_normal.y() - stripAxis.y() * m_normal.x()) / stripAxis.mag();
-//     }
-//   } else { // endcap
-//     if (m_design->shape() != InDetDD::Trapezoid) {
-//       sinStereo = (globalPos.y() * m_etaAxis.x() - globalPos.x() * m_etaAxis.y()) / globalPos.perp();
-//     } else { // trapezoid      
-//       assert (minWidth() != maxWidth());
-//       double radius = width() * length() / (maxWidth() - minWidth());
-//       // Only need projection in xy plane.
-//       double stripAxisX  = globalPos.x() - m_center.x() + m_etaAxis.x()*radius;
-//       double stripAxisY  = globalPos.y() - m_center.y() + m_etaAxis.y()*radius;
-//       double norm  = 1./(radius*sqrt(stripAxisX*stripAxisX + stripAxisY*stripAxisY));
-//       sinStereo  = norm * (stripAxisX * globalPos.y() - stripAxisY * globalPos.x());
-//     }
-//   }
-//   return sinStereo;
-// }
-
-// bool 
-// ScintDetectorElement::isStereo() const 
-// {
-//   std::lock_guard<std::recursive_mutex> lock(m_mutex);
-//   if (m_firstTime) updateCache();
-//   return m_isStereo;
-// }
-
-
-// double 
-// ScintDetectorElement::sinStereoLocal(const Amg::Vector2D &localPos) const
-// {
-//   // The equation below will work for rectangle detectors as well in which 
-//   // case it will return 0. But we return zero immediately as there is no point doing the calculation.
-//   if (m_design->shape() == InDetDD::Box) return 0;
-//   double oneOverRadius = (maxWidth() - minWidth()) /  (width() * length());
-//   double x = localPos[distPhi];
-//   double y = localPos[distEta];
-//   return -x*oneOverRadius / sqrt( (1+y*oneOverRadius)*(1+y*oneOverRadius) + x*oneOverRadius*x*oneOverRadius );
-// }
-
-
-// double 
-// ScintDetectorElement::sinStereoLocal(const HepGeom::Point3D<double> &globalPos) const
-// {
-//   return sinStereoLocal(localPosition(globalPos));
-// }
-
-// // Special method for SCT to retrieve the two ends of a "strip"
-//   std::pair<Amg::Vector3D,Amg::Vector3D> ScintDetectorElement::endsOfStrip(const Amg::Vector2D &position) const
-// {
-//   const std::pair<Amg::Vector2D,Amg::Vector2D> localEnds=
-//     m_design->endsOfStrip(position);
-//   return std::pair<Amg::Vector3D,Amg::Vector3D >(globalPosition(localEnds.first),
-//                                                  globalPosition(localEnds.second));
-// }
-
-
 Trk::Surface & 
 ScintDetectorElement::surface()
 {
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorManager.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorManager.cxx
index 048dcbbe4..a3a2b415e 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorManager.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintDetectorManager.cxx
@@ -28,7 +28,7 @@ namespace ScintDD
         m_design {nullptr}
     {
   // Add default folder
-        addFolder("/Scint/Align");
+        // addFolder("/Scint/Align");
     }
 
     const std::string& ScintDetectorManager::tag() const
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintLocalPosition.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintLocalPosition.cxx
index fd36b55b3..c3576fdca 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintLocalPosition.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/ScintLocalPosition.cxx
@@ -97,4 +97,4 @@ ScintLocalPosition operator/(const ScintLocalPosition &position,const double fac
   return result;
 }
 
-} // namespace InDetDD
+} // namespace ScintDD
diff --git a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoDetectorManager.cxx b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoDetectorManager.cxx
index 3146c8cdd..61d6030d1 100644
--- a/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoDetectorManager.cxx
+++ b/Scintillator/ScintDetDescr/ScintReadoutGeometry/src/VetoDetectorManager.cxx
@@ -135,35 +135,26 @@ namespace ScintDD {
 
   void VetoDetectorManager::initNeighbours()
   {
-    // ScintDetectorElementCollection::iterator iter;
+    ScintDetectorElementCollection::iterator iter;
 
-    // // Loop over all elements and set the neighbours
-    // for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
+    // Loop over all elements and set the neighbours
+    for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
 
-    //   ScintDetectorElement * element = *iter;
-    //   if (element) {
+      ScintDetectorElement * element = *iter;
+      if (element) {
 
-    //     IdentifierHash idHash = element->identifyHash();
-    //     IdentifierHash idHashOther;
+        IdentifierHash idHash = element->identifyHash();
+        IdentifierHash idHashOther;
 
-    //     int result;
-    //     // If no neighbour, result != 0 in which case we leave neighbour as null
-    //     result = m_idHelper->get_next_in_eta(idHash, idHashOther);
-    //     if (result==0) element->setNextInEta(m_elementCollection[idHashOther]);
+        int result;
+        // If no neighbour, result != 0 in which case we leave neighbour as null
+        result = m_idHelper->get_next_in_z(idHash, idHashOther);
+        if (result==0) element->setNextInZ(m_elementCollection[idHashOther]);
 
-    //     result = m_idHelper->get_prev_in_eta(idHash, idHashOther);
-    //     if (result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
-
-    //     result = m_idHelper->get_next_in_phi(idHash, idHashOther);
-    //     if (result==0) element->setNextInPhi(m_elementCollection[idHashOther]);
-
-    //     result = m_idHelper->get_prev_in_phi(idHash, idHashOther);
-    //     if (result==0) element->setPrevInPhi(m_elementCollection[idHashOther]);
-
-    //     result = m_idHelper->get_other_side(idHash, idHashOther);
-    //     if (result==0) element->setOtherSide(m_elementCollection[idHashOther]);
-    //   }
-    // }
+        result = m_idHelper->get_prev_in_z(idHash, idHashOther);
+        if (result==0) element->setPrevInZ(m_elementCollection[idHashOther]);
+      }
+    }
   }
 
   const VetoID* VetoDetectorManager::getIdHelper() const
diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/VetoGeoModel/VetoMaterialManager.h b/Scintillator/ScintDetDescr/VetoGeoModel/VetoGeoModel/VetoMaterialManager.h
index 9fad943ae..1b641b05f 100644
--- a/Scintillator/ScintDetDescr/VetoGeoModel/VetoGeoModel/VetoMaterialManager.h
+++ b/Scintillator/ScintDetDescr/VetoGeoModel/VetoGeoModel/VetoMaterialManager.h
@@ -5,7 +5,7 @@
 #ifndef VETOMATERIALMANAGER_H
 #define VETOMATERIALMANAGER_H
 
-// SCT_MaterialManager. This provides an interface to the InDetMaterialManager which in turn
+// VetoMaterialManager. This provides an interface to the ScintMaterialManager which in turn
 // is an interface to GeoModel Material Manager with some additional functionality.
 #include "ScintGeoModelUtils/ScintMaterialManager.h"
 
diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx
index 6d322cc2b..3f059b7a4 100644
--- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx
+++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDataBase.cxx
@@ -26,13 +26,13 @@ VetoDataBase::VetoDataBase(const VetoGeoModelAthenaComps * athenaComps)
   std::string versionTag  = versionKey.tag();
   std::string versionNode = versionKey.node();
 
-  // Get version tag and node for InnerDetector.
+  // Get version tag and node for Scintillator.
   DecodeFaserVersionKey scintVersionKey(geoDbTag,"Scintillator");
 
   // Access the RDB
   IRDBAccessSvc* rdbSvc = m_athenaComps->rdbAccessSvc();
 
-  // SCT version tag
+  // Veto version tag
   m_vetoVersionTag = rdbSvc->getChildTag("Veto", versionKey.tag(), versionKey.node(), "FASERDD");
 
 
@@ -71,123 +71,12 @@ VetoDataBase::VetoDataBase(const VetoGeoModelAthenaComps * athenaComps)
 //   m_conditions = rdbSvc->getRecordsetPtr("VetoConditions", versionTag, versionNode, "FASERDD");
 //   msg(MSG::DEBUG) << "Table VetoConditions Fetched" << endmsg;
 
-//   //
-//   // SCT Barrel 
-//   //
-//   m_brlSensor = rdbSvc->getRecordsetPtr("SctBrlSensor", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlSensor Fetched" << endmsg;
-
-//   m_brlModule = rdbSvc->getRecordsetPtr("SctBrlModule", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlModule Fetched" << endmsg;
-
-//   m_brlSki = rdbSvc->getRecordsetPtr("SctBrlSki", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlSki Fetched" << endmsg;
-
-//   m_brlSkiZ = rdbSvc->getRecordsetPtr("SctBrlSkiZ", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlSkiZ Fetched" << endmsg;
-
-//   m_brlLayer = rdbSvc->getRecordsetPtr("SctBrlLayer", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlLayer Fetched" << endmsg;
-
-//   m_brlServices = rdbSvc->getRecordsetPtr("SctBrlServices", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlServices Fetched" << endmsg;
-
-//   m_brlServPerLayer = rdbSvc->getRecordsetPtr("SctBrlServPerLayer", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlServPerLayer Fetched" << endmsg;
-
-//   m_brlThermalShield = rdbSvc->getRecordsetPtr("SctBrlThermalShield", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlThermalShield Fetched" << endmsg;
-
   m_stationGeneral = rdbSvc->getRecordsetPtr("VetoStationGeneral", versionTag, versionNode, "FASERDD");
   msg(MSG::DEBUG) << "Table VetoStationGeneral Fetched" << endmsg;
 
   m_plateGeneral = rdbSvc->getRecordsetPtr("VetoPlateGeneral", versionTag, versionNode, "FASERDD");
   msg(MSG::DEBUG) << "Table VetoPlateGeneral Fetched" << endmsg;
 
-//   m_brlFSI = rdbSvc->getRecordsetPtr("SctBrlFSI", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlFSI Fetched" << endmsg;
-
-//   m_brlFSILocation = rdbSvc->getRecordsetPtr("SctBrlFSILocation", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctBrlFSILocation Fetched" << endmsg;
-
-//   m_fwdSensor = rdbSvc->getRecordsetPtr("SctFwdSensor", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdSensor Fetched" << endmsg;
-
-//   m_fwdHybrid = rdbSvc->getRecordsetPtr("SctFwdHybrid", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdHybrid Fetched" << endmsg;
-
-//   m_fwdSpine = rdbSvc->getRecordsetPtr("SctFwdSpine", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdSpine Fetched" << endmsg;
-
-//   m_fwdModule = rdbSvc->getRecordsetPtr("SctFwdModule", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdModule Fetched" << endmsg;
-
-//   m_fwdModuleConnector = rdbSvc->getRecordsetPtr("SctFwdModuleConnector", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdModuleConnector Fetched" << endmsg;
-
-//   //
-//   // SCT Forward
-//   //
-//   m_fwdRing = rdbSvc->getRecordsetPtr("SctFwdRing", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdRing Fetched" << endmsg;
-
-//   m_fwdWheel = rdbSvc->getRecordsetPtr("SctFwdWheel", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdWheel Fetched" << endmsg;
-
-//   m_fwdWheelRingMap = rdbSvc->getRecordsetPtr("SctFwdWheelRingMap", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdWheelRingMap Fetched" << endmsg;
-
-//   m_fwdDiscSupport = rdbSvc->getRecordsetPtr("SctFwdDiscSupport", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdDiscSupport Fetched" << endmsg;
-
-//   m_fwdPatchPanelLoc = rdbSvc->getRecordsetPtr("SctFwdPatchPanelLoc", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdPatchPanelLoc Fetched" << endmsg;
-
-//   m_fwdPatchPanel = rdbSvc->getRecordsetPtr("SctFwdPatchPanel", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdPatchPanel Fetched" << endmsg;
-
-//   m_fwdPPConnector = rdbSvc->getRecordsetPtr("SctFwdPPConnector", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdPPConnector Fetched" << endmsg;
-
-//   m_fwdPPCooling = rdbSvc->getRecordsetPtr("SctFwdPPCooling", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdPPCooling Fetched" << endmsg;
-
-//   m_fwdCoolingBlock = rdbSvc->getRecordsetPtr("SctFwdCoolingBlock", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdCoolingBlock Fetched" << endmsg;
-
-//   m_fwdRingServices = rdbSvc->getRecordsetPtr("SctFwdRingServices", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdRingServices Fetched" << endmsg;
-
-//   m_fwdServices = rdbSvc->getRecordsetPtr("SctFwdServices", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdServices Fetched" << endmsg;
-
-//   m_fwdFSILocation = rdbSvc->getRecordsetPtr("SctFwdFSILocation", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdFSILocation Fetched" << endmsg;
-
-//   m_fwdFSIType = rdbSvc->getRecordsetPtr("SctFwdFSIType", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdFSIType Fetched" << endmsg;
-
-//   m_fwdFSI = rdbSvc->getRecordsetPtr("SctFwdFSI", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdFSI Fetched" << endmsg;
-
-//   m_fwdThermalShield = rdbSvc->getRecordsetPtr("SctFwdThermalShield", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdThermalShield Fetched" << endmsg;
-
-//   m_fwdGeneral = rdbSvc->getRecordsetPtr("SctFwdGeneral", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdGeneral Fetched" << endmsg;
-
-//   m_fwdOptoHarness = rdbSvc->getRecordsetPtr("SctFwdOptoHarness", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdOptoHarness Fetched" << endmsg;
-
-//   m_fwdDiscFixation = rdbSvc->getRecordsetPtr("SctFwdDiscFixation", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdDiscFixation Fetched" << endmsg;
-
-//   m_fwdCylServ = rdbSvc->getRecordsetPtr("SctFwdCylServ", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdCyServ Fetched" << endmsg;
-
-//   m_fwdCylServLoc = rdbSvc->getRecordsetPtr("SctFwdCylServLoc", versionTag, versionNode);
-//   msg(MSG::DEBUG) << "Table SctFwdCylServLoc Fetched" << endmsg;
-
 }
 
 const VetoGeoModelAthenaComps* VetoDataBase::athenaComps() const { return m_athenaComps; }
@@ -202,64 +91,8 @@ IRDBRecordset_ptr VetoDataBase::topLevelTable() const {return m_topLevel;}
 // IRDBRecordset_ptr VetoDataBase::conditionsTable() const {return m_conditions;}
 // const IRDBRecord* VetoDataBase::conditions() const {return (*m_conditions)[0];}
 
-// const IRDBRecord* VetoDataBase::brlSensor() const {return (*m_brlSensor)[0];}
-// const IRDBRecord* VetoDataBase::brlModule() const {return (*m_brlModule)[0];}
-
-// const IRDBRecord* VetoDataBase::brlSki() const {return (*m_brlSki)[0];}
-// const IRDBRecord* VetoDataBase::brlSkiZ(int i) const {return (*m_brlSkiZ)[i];}
-// int VetoDataBase::brlSkiZSize() const {return m_brlSkiZ->size();}
-// const IRDBRecord* VetoDataBase::brlLayer(int i) const {return (*m_brlLayer)[i];}
-// const IRDBRecord* VetoDataBase::brlServices() const {return (*m_brlServices)[0];}
-// const IRDBRecord* VetoDataBase::brlServPerLayer(int i) const {return (*m_brlServPerLayer)[i];}
-// const IRDBRecord* VetoDataBase::brlThermalShield() const {return (*m_brlThermalShield)[0];}
 const IRDBRecord* VetoDataBase::stationGeneral() const {return (*m_stationGeneral)[0];}
 const IRDBRecord* VetoDataBase::plateGeneral() const {return (*m_plateGeneral)[0];}
-// const IRDBRecord* VetoDataBase::brlFSI() const {return (*m_brlFSI)[0];}
-// int VetoDataBase::brlFSISize()  const {return m_brlFSI->size();}
-// const IRDBRecord* VetoDataBase::brlFSILocation(int i) const {return (*m_brlFSILocation)[i];}
-
-// const IRDBRecord* VetoDataBase::fwdSensor(int i) const {return (*m_fwdSensor)[i];}
-// const IRDBRecord* VetoDataBase::fwdHybrid() const {return (*m_fwdHybrid)[0];}
-// const IRDBRecord* VetoDataBase::fwdSpine(int i) const {return (*m_fwdSpine)[i];}
-// const IRDBRecord* VetoDataBase::fwdModule(int i) const {return (*m_fwdModule)[i];}
-// int VetoDataBase::fwdModuleSize() const {return m_fwdModule->size();}
-// IRDBRecordset_ptr VetoDataBase::fwdModuleConnectorTable() const {return m_fwdModuleConnector;}
-// const IRDBRecord* VetoDataBase::fwdModuleConnector() const {return (*m_fwdModuleConnector)[0];}
-
-// const IRDBRecord* VetoDataBase::fwdRing(int i) const {return (*m_fwdRing)[i];}
-// int VetoDataBase::fwdRingSize()  const {return m_fwdRing->size();}
-// const IRDBRecord* VetoDataBase::fwdWheel(int i) const {return (*m_fwdWheel)[i];}
-// const IRDBRecord* VetoDataBase::fwdWheelRingMap(int i) const {return (*m_fwdWheelRingMap)[i];}
-// int VetoDataBase::fwdWheelRingMapSize()  const {return m_fwdWheelRingMap->size();}
-// const IRDBRecord* VetoDataBase::fwdDiscSupport() const {return (*m_fwdDiscSupport)[0];}
-// const IRDBRecord* VetoDataBase::fwdPatchPanelLoc(int i) const {return (*m_fwdPatchPanelLoc)[i];}
-// int VetoDataBase::fwdPatchPanelLocSize()  const {return m_fwdPatchPanelLoc->size();}
-// const IRDBRecord* VetoDataBase::fwdPatchPanel(int i) const {return (*m_fwdPatchPanel)[i];}
-// int VetoDataBase::fwdPatchPanelSize()  const {return m_fwdPatchPanel->size();}
-// const IRDBRecord* VetoDataBase::fwdPPConnector() const {return (*m_fwdPPConnector)[0];}
-// int VetoDataBase::fwdPPConnectorSize()  const {return m_fwdPPConnector->size();}
-// const IRDBRecord* VetoDataBase::fwdPPCooling() const {return (*m_fwdPPCooling)[0];}
-// int VetoDataBase::fwdPPCoolingSize()  const {return m_fwdPPCooling->size();}
-// const IRDBRecord* VetoDataBase::fwdCoolingBlock(int i) const {return (*m_fwdCoolingBlock)[i];}
-// const IRDBRecord* VetoDataBase::fwdRingServices(int i) const {return (*m_fwdRingServices)[i];}
-// const IRDBRecord* VetoDataBase::fwdServices() const {return (*m_fwdServices)[0];}
-// const IRDBRecord* VetoDataBase::fwdFSILocation(int i) const {return (*m_fwdFSILocation)[i];}
-// int VetoDataBase::fwdFSILocationSize()  const {return m_fwdFSILocation->size();}
-// const IRDBRecord* VetoDataBase::fwdFSIType(int i) const {return (*m_fwdFSIType)[i];}
-// int VetoDataBase::fwdFSITypeSize() const {return m_fwdFSIType->size();}
-// const IRDBRecord* VetoDataBase::fwdFSI(int i) const {return (*m_fwdFSI)[i];}
-// int VetoDataBase::fwdFSISize() const {return m_fwdFSI->size();}
-// const IRDBRecord* VetoDataBase::fwdThermalShield(int i) const {return (*m_fwdThermalShield)[i];}
-// int VetoDataBase::fwdThermalShieldSize()  const {return m_fwdThermalShield->size();}
-// const IRDBRecord* VetoDataBase::fwdGeneral() const {return (*m_fwdGeneral)[0];}
-// IRDBRecordset_ptr VetoDataBase::fwdOptoHarnessTable() const {return m_fwdOptoHarness;}
-// const IRDBRecord* VetoDataBase::fwdOptoHarness(int i) const {return (*m_fwdOptoHarness)[i];}
-// const IRDBRecord* VetoDataBase::fwdDiscFixation() const {return (*m_fwdDiscFixation)[0];}
-// IRDBRecordset_ptr VetoDataBase::fwdDiscFixationTable() const {return m_fwdDiscFixation;}
-// const IRDBRecord* VetoDataBase::fwdCylServ(int i) const {return (*m_fwdCylServ)[i];}
-// int VetoDataBase::fwdCylServSize()  const {return m_fwdCylServ->size();}
-// const IRDBRecord* VetoDataBase::fwdCylServLoc(int i) const {return (*m_fwdCylServLoc)[i];}
-// int VetoDataBase::fwdCylServLocSize()  const {return m_fwdCylServLoc->size();}
 
 const std::string & VetoDataBase::versionTag() const {
   return m_vetoVersionTag;
diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx
index 73f99499b..f2d43e879 100644
--- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx
+++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoDetectorFactory.cxx
@@ -214,109 +214,6 @@ void VetoDetectorFactory::create(GeoPhysVol *world)
     m_detectorManager->addAlignableTransform(1, id.getPlateId(), stationB_Transform, stationB_PV);
   }
 
-//   //
-//   // The Barrel
-//   //  
-//   if (barrelPresent) {
-   
-//     msg(MSG::DEBUG) << "Building the SCT Barrel." << endmsg;
-
-//     m_detectorManager->numerology().addBarrel(0);
-
-//     // Create the SCT Barrel
-//     SCT_Barrel sctBarrel("SCT_Barrel", m_detectorManager, m_geometryManager, m_materials);
-  
-//     SCT_Identifier id{m_geometryManager->athenaComps()->getIdHelper()};
-//     id.setBarrelEC(0);
-//     GeoVPhysVol * barrelPV = sctBarrel.build(id);
-//     GeoAlignableTransform * barrelTransform = new GeoAlignableTransform(sctTransform * sctGeneral->partTransform(barrelLabel));
-
-//     //indet->add(new GeoNameTag("SCT_Barrel"));
-//     // The name tag here is what is used by the GeoModel viewer.
-//     GeoNameTag *topLevelNameTag = new GeoNameTag("SCT");
-//     indet->add(topLevelNameTag);
-//     indet->add(new GeoIdentifierTag(0));
-//     indet->add(barrelTransform);
-//     indet->add(barrelPV);
-//     m_detectorManager->addTreeTop(barrelPV);
-
-//     // Store alignable transform
-//     m_detectorManager->addAlignableTransform(3, id.getWaferId(), barrelTransform, barrelPV);
-    
-//   }
-
-//   //
-//   // The Positive Z Endcap (EndcapA)
-//   //  
-//   if (forwardPlusPresent) {
-
-//     msg(MSG::DEBUG) << "Building the SCT Endcap A (positive z)." << endmsg;
-
-//     m_detectorManager->numerology().addEndcap(2);
-
-//     // Create the Forward
-//     SCT_Forward sctForwardPlus("SCT_ForwardA", +2, m_detectorManager, m_geometryManager, m_materials);
-    
-//     SCT_Identifier idFwdPlus{m_geometryManager->athenaComps()->getIdHelper()};
-//     idFwdPlus.setBarrelEC(2);
-//     GeoVPhysVol * forwardPlusPV = sctForwardPlus.build(idFwdPlus);
-//     GeoTrf::Transform3D fwdTransformPlus(sctTransform 
-//                                           * sctGeneral->partTransform(forwardPlusLabel) 
-//                                           * GeoTrf::TranslateZ3D(sctForwardPlus.zCenter()));
-//     GeoAlignableTransform * fwdGeoTransformPlus = new GeoAlignableTransform(fwdTransformPlus);
-    
-//     //indet->add(new GeoNameTag("SCT_ForwardPlus"));
-//     // The name tag here is what is used by the GeoModel viewer.
-//     GeoNameTag *topLevelNameTag = new GeoNameTag("SCT");
-//     indet->add(topLevelNameTag);
-//     indet->add(new GeoIdentifierTag(2));
-//     indet->add(fwdGeoTransformPlus);
-//     indet->add(forwardPlusPV);
-//     m_detectorManager->addTreeTop(forwardPlusPV);
-
-//     // Store alignable transform
-//     m_detectorManager->addAlignableTransform(3, idFwdPlus.getWaferId(), fwdGeoTransformPlus, forwardPlusPV);
-//   }
-  
-//   //
-//   // The Negative Z Endcap (EndcapC)
-//   //  
-
-//   if (forwardMinusPresent) {
-
-//     msg(MSG::DEBUG) << "Building the SCT Endcap C (negative z)." << endmsg;
-
-//     m_detectorManager->numerology().addEndcap(-2);
-    
-//     SCT_Forward sctForwardMinus("SCT_ForwardC", -2, m_detectorManager, m_geometryManager, m_materials);
-
-//     SCT_Identifier idFwdMinus{m_geometryManager->athenaComps()->getIdHelper()};
-//     idFwdMinus.setBarrelEC(-2);
-//     GeoVPhysVol * forwardMinusPV = sctForwardMinus.build(idFwdMinus);
-
-//     GeoTrf::Transform3D rot;
-//     rot = GeoTrf::RotateY3D(180 * Gaudi::Units::degree);
-  
-//     GeoTrf::Transform3D fwdTransformMinus(sctTransform  
-//                                            * sctGeneral->partTransform(forwardMinusLabel)  
-//                                            * rot  
-//                                            * GeoTrf::TranslateZ3D(sctForwardMinus.zCenter()));
-//     GeoAlignableTransform * fwdGeoTransformMinus = new GeoAlignableTransform(fwdTransformMinus);
-
-//     //indet->add(new GeoNameTag("SCT_ForwardMinus"));
-//     // The name tag here is what is used by the GeoModel viewer.
-//     GeoNameTag *topLevelNameTag = new GeoNameTag("SCT");
-//     indet->add(topLevelNameTag);
-//     indet->add(new GeoIdentifierTag(-2));
-//     indet->add(fwdGeoTransformMinus);
-//     indet->add(forwardMinusPV);
-//     m_detectorManager->addTreeTop(forwardMinusPV);
-
-
-//     // Store alignable transform
-//     m_detectorManager->addAlignableTransform(3, idFwdMinus.getWaferId(), fwdGeoTransformMinus, forwardMinusPV);
-//   }  
-
   // Set the neighbours
   m_detectorManager->initNeighbours();
 
@@ -340,76 +237,15 @@ void VetoDetectorFactory::create(GeoPhysVol *world)
   if (!m_useDynamicAlignFolders){
 
     m_detectorManager->addAlignFolderType(ScintDD::static_run1);
-    m_detectorManager->addFolder("/Scint/Align");
-    m_detectorManager->addChannel("/Scint/Align/Scint",3,ScintDD::global);
-    m_detectorManager->addChannel("/Scint/Align/Veto",2,ScintDD::global);
-    
-    // if (barrelPresent) {
-    //   m_detectorManager->addChannel("/Indet/Align/SCTB1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTB2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTB3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTB4",1,InDetDD::local);
-    // }
-    // if (forwardPlusPresent) {
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA4",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA5",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA6",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA7",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA8",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEA9",1,InDetDD::local);
-    // }
-    // if  (forwardMinusPresent) {
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC4",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC5",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC6",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC7",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC8",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/Align/SCTEC9",1,InDetDD::local);
-    // }
+    // m_detectorManager->addFolder("/Scint/Align");
   }
-  
   else {
     m_detectorManager->addAlignFolderType(ScintDD::timedependent_run2);
-    m_detectorManager->addGlobalFolder("/Scint/AlignL1/Scint");
-    m_detectorManager->addGlobalFolder("/Scint/AlignL2/Veto");
-    m_detectorManager->addChannel("/Scint/AlignL1/Scint",3,ScintDD::global);
-    m_detectorManager->addChannel("/Scint/AlignL2/Veto",2,ScintDD::global);
-    m_detectorManager->addFolder("/Scint/AlignL3");
-
-    // if (barrelPresent) {
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTB1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTB2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTB3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTB4",1,InDetDD::local);
-    // }
-    // if (forwardPlusPresent) {
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA4",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA5",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA6",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA7",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA8",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEA9",1,InDetDD::local);
-    // }
-    // if  (forwardMinusPresent) {
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC1",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC2",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC3",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC4",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC5",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC6",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC7",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC8",1,InDetDD::local);
-    //   m_detectorManager->addChannel("/Indet/AlignL3/SCTEC9",1,InDetDD::local);
-    // }
+    // m_detectorManager->addGlobalFolder("/Scint/AlignL1/Scint");
+    // m_detectorManager->addGlobalFolder("/Scint/AlignL2/Veto");
+    // m_detectorManager->addChannel("/Scint/AlignL1/Scint",3,ScintDD::global);
+    // m_detectorManager->addChannel("/Scint/AlignL2/Veto",2,ScintDD::global);
+    // m_detectorManager->addFolder("/Scint/AlignL3");
   }
 
   // Return precision to its original value
diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoPlate.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoPlate.cxx
index 96cd5edaa..457336c34 100644
--- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoPlate.cxx
+++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoPlate.cxx
@@ -75,59 +75,10 @@ VetoPlate::makeDesign()
 
   const VetoPlateParameters * parameters = m_geometryManager->plateParameters();
   
-//   double stripPitch      = parameters->sensorStripPitch();
-//   double stripLength     = parameters->sensorStripLength();
-//   int crystals           = parameters->sensorNumWafers();
-//   double distCenterToCenter =  parameters->sensorDistCenterToCenter();
-
-  //int cells              = parameters->sensorNumReadoutStrips();
-  //int diodes             = parameters->sensorNumStrips();
-  //int shift              = parameters->sensorStripShift(); 
-
-  // For consistency with older version we keep shift = 0.
-//   int cells              = parameters->sensorNumReadoutStrips();
-//   int diodes             = cells;
-//   int shift              = 0; 
-
-//   double totalDeadLength = distCenterToCenter - stripLength;
-    
-//   double xEtaStripPatternCenter = 0;
-//   double xPhiStripPatternCenter = 0;
-
-//   // Readout direction is in same direction as local phi direction
-//   bool swapStripReadout = false;
-
-//   // The readout side is at the +ve depth direction
-//   int readoutSide = +1;
-
-//   m_design = new SCT_BarrelModuleSideDesign(m_thickness,
-//                                             crystals,
-//                                             diodes,
-//                                             cells,
-//                                             shift,
-//                                             swapStripReadout,
-//                                             InDetDD::holes,
-//                                             stripPitch,
-//                                             stripLength,
-//                                             xEtaStripPatternCenter,
-//                                             xPhiStripPatternCenter,
-//                                             totalDeadLength,
-//                                             readoutSide);
     m_design = new ScintDetectorDesign(m_thickness, 
                                        m_length, 
                                        m_width,
                                        parameters->platePmts());
-  //
-  // Flags to signal if axis can be swapped.
-  // For rectangular detector these are all true.
-  // This is the default and no action is required. 
-  // Can force axes not to be swapped by setting to false.
-  // 
-  // bool phiSyGaudi::Units::mmetric = true;
-  // bool etaSyGaudi::Units::mmetric = true; 
-  // bool depthSyGaudi::Units::mmetric = true;
-  // m_design->setSyGaudi::Units::mmetry(phiSyGaudi::Units::mmetric, etaSyGaudi::Units::mmetric, depthSyGaudi::Units::mmetric,
-  //
 }
 
 
diff --git a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoStation.cxx b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoStation.cxx
index 2e99328b6..c15e5aa41 100644
--- a/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoStation.cxx
+++ b/Scintillator/ScintDetDescr/VetoGeoModel/src/VetoStation.cxx
@@ -72,9 +72,6 @@ VetoStation::preBuild()
   const GeoBox* stationEnvelopeShape = new GeoBox(0.5 * m_width, 0.5 * m_length, 0.5 * m_thickness);
   GeoLogVol* stationLog = new GeoLogVol(getName(), stationEnvelopeShape, m_materials->gasMaterial());
   return stationLog;
-//   const GeoTube * barrelEnvelopeShape = new GeoTube(m_innerRadius, m_outerRadius, 0.5 * m_length);
-//   GeoLogVol * barrelLog = new GeoLogVol(getName(), barrelEnvelopeShape, m_materials->gasMaterial());
-//   return barrelLog;
 }
 
 GeoVPhysVol * 
@@ -83,25 +80,6 @@ VetoStation::build(VetoIdentifier id)
 
   GeoFullPhysVol * station = new GeoFullPhysVol(m_logVolume);
 
-  id.setPlate(0); // temporary to suppress warning
-
-  // There is only one type of plate. So we create it just the once.
-//   VetoPlate plate("Plate", m_detectorManager, m_geometryManager, m_materials);
-
-
-
-  // Create the interlinks
-//   VetoInterLink interLink("InterLink", m_detectorManager, m_geometryManager, m_materials);
-
-  // Calculte the length of the layer cylinder. This is the barrel length less the thermal 
-  // shield and interlink width.
-  // This is only used for 'OldGeometry". In new geometry, layer length is set internally,
-  // and is equal to support cylinder length
-//   double layerLength = m_length - 2*m_thermalShieldEndWallThickness - 2*interLink.length();
-
-//   // We reduce to allow some alignment clearance
-//   layerLength -= 2*m_zClearance;
-
   double activeDepth = m_thickness - m_safety/2;
   double plateThickness = m_plate->thickness();
   for (int iPlate = 0; iPlate < m_numPlates; iPlate++)
@@ -116,187 +94,7 @@ VetoStation::build(VetoIdentifier id)
     GeoVPhysVol* platePV = m_plate->build(id);
     station->add(platePV);
     m_detectorManager->addAlignableTransform(0, id.getPlateId(), transform, platePV);
-  }
-
-//   for (int iLayer = 0; iLayer < m_numLayers; iLayer++) {
-
-//     // Create the layers
-
-//     layerLength = 0.;
-//     VetoLayer layer("Layer"+intToString(iLayer), iLayer, &module, m_detectorManager, m_geometryManager, m_materials);
-//     barrel->add(new GeoNameTag("Layer#"+intToString(iLayer)));
-//     barrel->add(new GeoIdentifierTag(iLayer)); // Identifier layer= iLayer
-//     id.setLayerDisk(iLayer); 
-//     GeoAlignableTransform * transform = new GeoAlignableTransform(GeoTrf::Transform3D::Identity());
-//     barrel->add(transform);
-//     GeoVPhysVol * layerPV = layer.build(id);
-//     barrel->add(layerPV);
-//     // Store alignable transform
-//     m_detectorManager->addAlignableTransform(2, id.getWaferId(), transform, layerPV);
-//     layerLength = std::max(layerLength,layer.length());
-//   }
-
-//   // Build and place the interlinks
-//   double interLinkZPos = 0.;
-//   interLinkZPos = 0.5 * layerLength + m_zClearance + 0.5 * interLink.length();
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+interLinkZPos)));
-//   barrel->add(interLink.getVolume());
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-interLinkZPos)));
-//   barrel->add(interLink.getVolume());
-
-//   // Build and place the cooling spiders
-//   double spiderZPos = 0.;
-//   VetoSpider spider("Spider", m_detectorManager, m_geometryManager, m_materials);
-//   spiderZPos =  interLinkZPos + 0.5*interLink.length() + 0.5*spider.length();
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+spiderZPos)));
-//   barrel->add(spider.getVolume());
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-spiderZPos)));
-//   barrel->add(spider.getVolume());
-
-//   // Build and place the thermal shield.
-//   buildThermalShield(barrel);
-
-//   // Build and place the EMI shield (inner thermal shield).
-//   buildEMIShield(barrel);
-
-//   // Build and place SCT to Pixel attachment
-//   VetoPixelAttachment pixelAttachment("AttachmentPixelToSCT", m_detectorManager, m_geometryManager, m_materials);
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(+pixelAttachment.zPosition()))); // +ve z
-//   barrel->add(pixelAttachment.getVolume());
-//   barrel->add(new GeoTransform(GeoTrf::TranslateZ3D(-pixelAttachment.zPosition()))); // -ve z
-//   barrel->add(pixelAttachment.getVolume());
-
-  // Extra Material
-//   Unclear whether the geometrical assumptions are valid for a box shape  (likely NOT)
-//   ScintDD::ExtraMaterial xMat(m_geometryManager->distortedMatManager());
-//   xMat.add(station, "VetoStation");
-  
+  }  
   return station;
-  
 }
 
-// void VetoStation::buildThermalShield(GeoFullPhysVol * parent) const
-// {
- 
-//   // The thermal shield is now in 3 parts:
-//   // (a) outer cylinder
-//   // (b) bulkheads
-//   // (c) end panels
-//   // The inner cylinder is called 'EMI shield' for backwards compatibility
-
-//   const VetoStationParameters * parameters = m_geometryManager->barrelParameters();
-
-//   double cylinderOuterRadius   = parameters->thermalShieldOuterRadius();
-//   double cylinderInnerRadius   = parameters->thermalShieldInnerRadius();
-//   double cylinderLength        = parameters->cylinderLength();
-//   double bulkheadInnerRadius   = parameters->thermalShieldBulkheadInnerRadius();
-//   double bulkheadOuterRadius   = parameters->thermalShieldBulkheadOuterRadius();
-//   double bulkheadThickness     = parameters->thermalShieldEndCapCylThickness();
-//   double endPanelInnerRadius   = parameters->thermalShieldEndPanelInnerRadius();
-//   double endPanelOuterRadius   = parameters->thermalShieldEndPanelOuterRadius();
-//   double endPanelThickness     = parameters->thermalShieldEndCapThickness();
-//   double endPanelZMax          = parameters->thermalShieldEndZMax();
-  
-//   std::string cylinderMaterialName = parameters->thermalShieldMaterialCyl();
-//   std::string bulkheadMaterialName = parameters->thermalShieldMaterialOuterSect();
-//   std::string endPanelMaterialName = parameters->thermalShieldMaterialInnerSect();
-
-
-//   // The outer cylinder part of thermal shield.
-//   const GeoTube * cylinderShape  = new GeoTube(cylinderInnerRadius, cylinderOuterRadius, 0.5*cylinderLength);
-//   const GeoMaterial* cylinderMaterial = m_materials->getMaterialForVolume(cylinderMaterialName,cylinderShape->volume());
-//   const GeoLogVol  * cylinderLog = new GeoLogVol("ThShieldOuterCyl", cylinderShape, cylinderMaterial);
-//   GeoPhysVol * cylinder = new GeoPhysVol(cylinderLog);
-//   parent->add(cylinder);
-
-//   // The bulkheads
-//   const GeoTube * bulkheadShape  = new GeoTube(bulkheadInnerRadius, bulkheadOuterRadius, 0.5*bulkheadThickness);
-//   const GeoMaterial* bulkheadMaterial = m_materials->getMaterialForVolume(bulkheadMaterialName,bulkheadShape->volume());
-//   const GeoLogVol  * bulkheadLog = new GeoLogVol("ThShieldBulkhead", bulkheadShape, bulkheadMaterial);
-//   GeoPhysVol * bulkhead = new GeoPhysVol(bulkheadLog);
-//   GeoTransform * bulkheadPosPlus  =  new GeoTransform(GeoTrf::TranslateZ3D(+(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
-//   GeoTransform * bulkheadPosMinus =  new GeoTransform(GeoTrf::TranslateZ3D(-(endPanelZMax-endPanelThickness-0.5*bulkheadThickness)));
-//   parent->add(bulkheadPosPlus);
-//   parent->add(bulkhead);
-//   parent->add(bulkheadPosMinus);
-//   parent->add(bulkhead);
-
-//   // The end panels
-//   const GeoTube * endPanelShape  = new GeoTube(endPanelInnerRadius, endPanelOuterRadius,  0.5*endPanelThickness);
-//   const GeoMaterial* endPanelMaterial = m_materials->getMaterialForVolume(endPanelMaterialName,endPanelShape->volume());
-//   const GeoLogVol  * endPanelLog = new GeoLogVol("ThShieldEndPanel", endPanelShape, endPanelMaterial);
-//   GeoPhysVol * endPanel = new GeoPhysVol(endPanelLog);
-//   GeoTransform * endPanelPosPlus  =  new GeoTransform(GeoTrf::TranslateZ3D(+(endPanelZMax-0.5*endPanelThickness)));
-//   GeoTransform * endPanelPosMinus =  new GeoTransform(GeoTrf::TranslateZ3D(-(endPanelZMax-0.5*endPanelThickness)));
-//   parent->add(endPanelPosPlus);
-//   parent->add(endPanel);
-//   parent->add(endPanelPosMinus);
-//   parent->add(endPanel);
-
-// }
-
-// void VetoStation::buildEMIShield(GeoFullPhysVol * parent) const
-// {
-  
-//   const VetoStationParameters * parameters = m_geometryManager->barrelParameters();
-
-//   // Parameters of cylinder 
-//   double innerRadius       = parameters->emiShieldInnerRadius();
-//   double deltaR            = parameters->emiShieldDeltaR();
-//   double outerRadius       = innerRadius + deltaR;
-//   double length            = 2 * parameters->emiShieldZMax();
-//   std::string materialName = parameters->emiShieldMaterial();
-
-//   // Parameters of Electrical Shield Joint
-//   double jointDeltaR = 0;
-//   double jointRPhi = 0;
-//   std::string jointMaterialName;
-//   if(!m_isOldGeometry) {
-//     jointDeltaR            = parameters->emiJointDeltaR();
-//     jointRPhi              = parameters->emiJointRPhi();
-//     jointMaterialName = parameters->emiJointMaterial();
-//   }
-
-//   // Parameters of Pixel Attachment - needed for cut-out
-//   double pixelAttachmentLength  = parameters->pixelAttachmentDeltaZ();
-//   double pixelAttachmentZpos    = parameters->pixelAttachmentZMin() + 0.5 * pixelAttachmentLength; 
-
-//   // Build cylinder (with cut-outs)
-//   const GeoShape * emiShieldShape  = 0;
-//   const GeoMaterial * material;
-//   const GeoTube * emiShieldTube  = new GeoTube(innerRadius, outerRadius,  0.5*length);
-//   if (m_isOldGeometry) {
-//     emiShieldShape = emiShieldTube;
-//     material = m_materials->getMaterial(materialName);
-//   } else {
-//     const GeoTube* cutOut = new GeoTube(innerRadius, outerRadius, 0.5*pixelAttachmentLength);
-//     const GeoShape* emiTemp = (GeoShape*)&(emiShieldTube->subtract(*cutOut << GeoTrf::TranslateZ3D(pixelAttachmentZpos)));
-//     emiShieldShape = (GeoShape*)&emiTemp->subtract(*cutOut << GeoTrf::TranslateZ3D(-pixelAttachmentZpos));
-//     double emiVolume = emiShieldTube->volume() - 2. * cutOut->volume();
-//     material = m_materials->getMaterialForVolume(materialName, emiVolume);
-//   }
-//   const GeoLogVol  * emiShieldLog = new GeoLogVol("EMIShield", emiShieldShape, material);
-//   GeoPhysVol * emiShield = new GeoPhysVol(emiShieldLog);
-//   parent->add(emiShield);
-
-//   // Build electrical shield joints (with cut-outs)
-//   if (!m_isOldGeometry) {
-//     double dphi = jointRPhi / outerRadius;
-//     const GeoTubs* emiJointTubs = new GeoTubs(outerRadius, outerRadius+jointDeltaR, 0.5*length,
-//                                               -0.5 * dphi * Gaudi::Units::radian, dphi * Gaudi::Units::radian);
-//     const GeoTubs* jointCutOut = new GeoTubs(outerRadius, outerRadius+jointDeltaR, 0.5*pixelAttachmentLength,
-//                                              -0.5 * dphi * Gaudi::Units::radian, dphi * Gaudi::Units::radian);
-//     const GeoShape* jointTemp = (GeoShape*)&(emiJointTubs->subtract(*jointCutOut << GeoTrf::TranslateZ3D(pixelAttachmentZpos)));
-//     const GeoShape* emiJointShape = (GeoShape*)&jointTemp->subtract(*jointCutOut << GeoTrf::TranslateZ3D(-pixelAttachmentZpos));
-//     double jointVolume = emiJointTubs->volume() - 2. * jointCutOut->volume();
-//     const GeoMaterial * jointMaterial = m_materials->getMaterialForVolume(jointMaterialName, jointVolume);
-//     const GeoLogVol  * emiJointLog = new GeoLogVol("EMIShieldJoint", emiJointShape, jointMaterial);
-//     GeoPhysVol * emiJoint = new GeoPhysVol(emiJointLog);
-//     // Place 3 copies
-//     for (int i=0; i<3; i++) {
-//       double angle = (90. + i * 120.) * Gaudi::Units::degree;
-//       parent->add(new GeoTransform(GeoTrf::RotateZ3D(angle)));
-//       parent->add(emiJoint);
-//     }
-//   }
-// }
diff --git a/Scintillator/ScintDetDescrCnv/ScintIdCnv/src/VetoIDDetDescrCnv.h b/Scintillator/ScintDetDescrCnv/ScintIdCnv/src/VetoIDDetDescrCnv.h
index 49c09c78f..8d7cb70d1 100644
--- a/Scintillator/ScintDetDescrCnv/ScintIdCnv/src/VetoIDDetDescrCnv.h
+++ b/Scintillator/ScintDetDescrCnv/ScintIdCnv/src/VetoIDDetDescrCnv.h
@@ -50,13 +50,13 @@ private:
     /// The helper - only will create it once
     VetoID*       m_vetoId;
 
-    /// File to be read for InDet ids
+    /// File to be read for Scint ids
     std::string   m_scintIDFileName;
 
-    /// Tag of RDB record for InDet ids
+    /// Tag of RDB record for Scint ids
     std::string   m_scintIdDictTag;
 
-    /// Internal InDet id tag
+    /// Internal Scint id tag
     std::string   m_scintIDTag;
 
     /// Whether or not 
diff --git a/Scintillator/ScintEventCnv/ScintSimEventTPCnv/ScintSimEventTPCnv/ScintSimEventTPCnvDict.h b/Scintillator/ScintEventCnv/ScintSimEventTPCnv/ScintSimEventTPCnv/ScintSimEventTPCnvDict.h
index b18bdb772..f0042a97e 100644
--- a/Scintillator/ScintEventCnv/ScintSimEventTPCnv/ScintSimEventTPCnv/ScintSimEventTPCnvDict.h
+++ b/Scintillator/ScintEventCnv/ScintSimEventTPCnv/ScintSimEventTPCnv/ScintSimEventTPCnvDict.h
@@ -17,4 +17,4 @@
 #include "ScintSimEventTPCnv/ScintHits/ScintHitCollection_p1.h"
 #include "ScintSimEventTPCnv/ScintHits/ScintHit_p1.h"
 
-#endif // SCINTEVENTTPCNV_INDETSIMEVENTTPCNVDICT_H
+#endif // SCINTEVENTTPCNV_SCINTSIMEVENTTPCNVDICT_H
diff --git a/Simulation/G4Faser/G4FaserApp/test/runG4.py b/Simulation/G4Faser/G4FaserApp/test/runG4.py
index 998084c53..5a27b8c68 100644
--- a/Simulation/G4Faser/G4FaserApp/test/runG4.py
+++ b/Simulation/G4Faser/G4FaserApp/test/runG4.py
@@ -64,6 +64,8 @@ if __name__ == "__main__":
 #
     ConfigFlags.Detector.SimulateVeto   = True
     ConfigFlags.Detector.GeometryVeto   = True
+    ConfigFlags.Detector.SimulateSCT   = True
+    ConfigFlags.Detector.GeometrySCT   = True
     ConfigFlags.GeoModel.Align.Dynamic  = False
     ConfigFlags.Sim.ReleaseGeoModel     = False
 #
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/CMakeLists.txt b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/CMakeLists.txt
new file mode 100644
index 000000000..1258b9536
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/CMakeLists.txt
@@ -0,0 +1,47 @@
+################################################################################
+# Package: FaserSCT_GeoModel
+################################################################################
+
+# Declare the package name:
+atlas_subdir( FaserSCT_GeoModel )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaKernel
+                          Database/RDBAccessSvc
+                          DetectorDescription/GeoModel/GeoModelFaserUtilities
+                          DetectorDescription/GeoModel/GeoModelUtilities
+			              DetectorDescription/GeoPrimitives
+                          GaudiKernel
+                          Tracker/TrackerDetDescr/TrackerGeoModelUtils
+                          Tracker/TrackerDetDescr/TrackerReadoutGeometry
+                          PRIVATE
+                          Control/SGTools
+                          Control/StoreGate
+                          Database/AthenaPOOL/AthenaPoolUtilities
+                          DetectorDescription/DetDescrCond/DetDescrConditions
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          DetectorDescription/GeometryDBSvc
+                          DetectorDescription/Identifier
+                          Tracker/TrackerDetDescr/TrackerIdentifier )
+
+# External dependencies:
+find_package( Boost COMPONENTS filesystem thread system )
+find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( Eigen )
+find_package( GeoModel )
+
+# Component(s) in the package:
+atlas_add_component( FaserSCT_GeoModel
+		     src/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelFaserUtilities GeoModelUtilities GaudiKernel TrackerGeoModelUtils TrackerReadoutGeometry SGTools StoreGateLib SGtests AthenaPoolUtilities DetDescrConditions Identifier TrackerIdentifier )
+
+atlas_add_test( FaserSCT_GMConfig_test
+                SCRIPT test/FaserSCT_GMConfig_test.py
+                PROPERTIES TIMEOUT 300 )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+atlas_install_scripts( test/*.py )
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/ATLAS_CHECK_THREAD_SAFETY b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 000000000..31adb4093
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+Tracker/TrackerDetDescr/SCT_GeoModel
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/FaserSCT_DetectorTool.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/FaserSCT_DetectorTool.h
new file mode 100644
index 000000000..4b63e9d92
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/FaserSCT_DetectorTool.h
@@ -0,0 +1,58 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_DETECTORTOOL_H
+#define FASERSCT_GEOMODEL_SCT_DETECTORTOOL_H
+
+#include "GeoModelUtilities/GeoModelTool.h"
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h" 
+
+#include "GeometryDBSvc/IGeometryDBSvc.h"
+#include "GeoModelInterfaces/IGeoDbTagSvc.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+#include "GaudiKernel/ServiceHandle.h"
+
+#include <string>
+
+namespace TrackerDD {
+  class SCT_DetectorManager;
+}
+
+class FaserSCT_DetectorTool : public GeoModelTool {
+
+public:
+  // Standard Constructor
+  FaserSCT_DetectorTool(const std::string& type, const std::string& name, const IInterface* parent);
+
+  virtual StatusCode create() override final;
+  virtual StatusCode clear() override final;
+
+  // Register callback function on ConDB object
+  virtual StatusCode registerCallback() override final;
+
+  // Callback function itself
+  virtual StatusCode align(IOVSVC_CALLBACK_ARGS) override;
+
+private:
+  StringProperty m_detectorName{this, "DetectorName", "SCT"};
+  BooleanProperty m_alignable{this, "Alignable", true};
+  BooleanProperty m_useDynamicAlignFolders{this, "useDynamicAlignFolders", false};
+  bool m_cosmic;
+  
+  const TrackerDD::SCT_DetectorManager* m_manager;
+  
+  SCT_GeoModelAthenaComps m_athenaComps;
+
+  ServiceHandle< IGeoDbTagSvc > m_geoDbTagSvc;
+  ServiceHandle< IRDBAccessSvc > m_rdbAccessSvc;
+  ServiceHandle< IGeometryDBSvc > m_geometryDBSvc;
+
+  StringProperty m_run1Folder{this, "Run1Folder", "/Indet/Align"};
+  StringProperty m_run2L1Folder{this, "Run2L1Folder", "/Indet/AlignL1/ID"};
+  StringProperty m_run2L2Folder{this, "Run2L2Folder", "/Indet/AlignL2/SCT"};
+  StringProperty m_run2L3Folder{this, "Run2L3Folder", "/Indet/AlignL3"};
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_DETECTORTOOL_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Barrel.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Barrel.h
new file mode 100644
index 000000000..2a4f370cd
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Barrel.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_BARREL_H
+#define FASERSCT_GEOMODEL_SCT_BARREL_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+class GeoVPhysVol;
+class GeoFullPhysVol;
+class GeoLogVol;
+class SCT_Identifier;
+class SCT_Layer;
+
+class SCT_Barrel : public SCT_UniqueComponentFactory
+{
+
+public:
+  SCT_Barrel(const std::string & name,
+             TrackerDD::SCT_DetectorManager* detectorManager,
+             const SCT_GeometryManager* geometryManager,
+             SCT_MaterialManager* materials);
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+
+public:
+  int    numLayers()   const { return m_numLayers; }
+  double layerPitch()  const { return m_layerPitch; }
+  double width() const {return m_width;}
+  double height() const {return m_height;}
+  double thickness()      const {return m_thickness;}
+ 
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+
+  SCT_Layer* m_layer;
+
+  int    m_numLayers;
+  double m_layerPitch;
+
+  double m_width;
+  double m_height;
+  double m_thickness;
+
+  double m_safety;
+
+};
+
+#endif // SCT_GEOMODEL_SCT_BARREL_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelModuleParameters.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelModuleParameters.h
new file mode 100644
index 000000000..9c04ab397
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelModuleParameters.h
@@ -0,0 +1,68 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_BarrelModuleParameters_H
+#define FASERSCT_GeoModel_SCT_BarrelModuleParameters_H
+
+#include <string>
+
+class SCT_DataBase;
+
+class SCT_BarrelModuleParameters {
+
+public:
+
+  // Constructor 
+  SCT_BarrelModuleParameters(SCT_DataBase* rdb);
+
+  // Sensors
+  double sensorThickness() const;
+  double sensorWidth() const;
+  double sensorLength() const;
+  int sensorNumWafers() const;
+  std::string sensorMaterial() const;
+  double sensorDistCenterToCenter() const;
+  double sensorStripLength() const; 
+  double sensorStripPitch() const; 
+  int sensorNumStrips() const;
+  int sensorNumReadoutStrips() const;
+  int sensorStripShift() const;
+
+  // BaseBoard
+  double baseBoardThickness() const;
+  double baseBoardWidth() const;
+  double baseBoardLength() const;
+  std::string baseBoardMaterial() const;
+  double baseBoardOffsetY() const;
+  double baseBoardOffsetZ() const;
+ 
+  // Hybrid
+  double hybridThickness() const;
+  double hybridWidth() const;
+  double hybridLength() const;
+  std::string hybridMaterial() const;
+  double hybridOffsetX() const;
+  double hybridOffsetZ() const;
+  
+  // Pigtail
+  double pigtailThickness() const;
+  double pigtailWidth() const;
+  double pigtailLength() const;
+  std::string pigtailMaterial() const;
+
+  // Module
+  int    moduleStereoUpperSign() const;
+  int    moduleUpperSideNumber() const;
+  double moduleStereoAngle() const; 
+  double moduleSensorToSensorGap() const;
+  
+
+private:
+  
+  SCT_DataBase * m_rdb;
+
+};
+
+
+#endif // FASERSCT_GeoModel_SCT_BarrelModuleParameters_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelParameters.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelParameters.h
new file mode 100644
index 000000000..0c94262c0
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BarrelParameters.h
@@ -0,0 +1,32 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FaserSCT_GeoModel_SCT_BarrelParameters_H
+#define FaserSCT_GeoModel_SCT_BarrelParameters_H
+
+#include <string>
+
+class SCT_DataBase;
+
+class SCT_BarrelParameters {
+
+public:
+
+  // Constructor 
+  SCT_BarrelParameters(SCT_DataBase* rdb);
+
+  int modulesPerRow() const;
+  int rowsPerLayer() const;
+
+
+  // Barrel General
+  int    numLayers() const;
+  double layerPitch() const;
+ private:
+  SCT_DataBase * m_rdb;
+
+};
+
+
+#endif // FaserSCT_GeoModel_SCT_BarrelParameters_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BaseBoard.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BaseBoard.h
new file mode 100644
index 000000000..2b4437960
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_BaseBoard.h
@@ -0,0 +1,49 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_BaseBoard_H
+#define FASERSCT_GEOMODEL_SCT_BaseBoard_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+
+class SCT_BaseBoard: public SCT_SharedComponentFactory
+{
+public:
+  SCT_BaseBoard(const std::string & name,
+                TrackerDD::SCT_DetectorManager* detectorManager,
+                const SCT_GeometryManager* geometryManager,
+                SCT_MaterialManager* materials);
+
+public:
+  const GeoMaterial * material() const {return m_material;}
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+
+  //double baseBoardOffsetX() const {return m_baseBoardOffsetX;} // Thu 16th Jun 2005 D.Naito removed.
+  //double baseBoardOffsetY() const {return m_baseBoardOffsetY;} // Thu 16th Jun 2005 D.Naito removed.
+  //double baseBoardOffsetZ() const {return m_baseBoardOffsetZ;} // Thu 16th Jun 2005 D.Naito removed.
+
+private:
+  void getParameters();
+  virtual GeoVPhysVol * build();
+  
+  const GeoMaterial * m_material;
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+  //double m_baseBoardOffsetX; // Thu 16th Jun 2005 D.Naito removed.
+  //double m_baseBoardOffsetY; // Thu 16th Jun 2005 D.Naito removed.
+  //double m_baseBoardOffsetZ; // Thu 16th Jun 2005 D.Naito removed.
+  double m_safety;
+
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_BaseBoard_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_ComponentFactory.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_ComponentFactory.h
new file mode 100644
index 000000000..01aa0e276
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_ComponentFactory.h
@@ -0,0 +1,89 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_COMPONENTFACTORY_H
+#define FASERSCT_GEOMODEL_SCT_COMPONENTFACTORY_H
+
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include <string>
+
+namespace TrackerDD{class SCT_DetectorManager;}
+class SCT_GeometryManager;
+class SCT_MaterialManager;
+
+class GeoLogVol;
+class GeoVPhysVol;
+
+
+class SCT_ComponentFactory
+{
+
+public:
+  SCT_ComponentFactory(const std::string & name,
+                       TrackerDD::SCT_DetectorManager* detectorManager,
+                       const SCT_GeometryManager* geometryManager,
+                       SCT_MaterialManager* materials);
+
+  const std::string & getName() const {return m_name;}
+
+  // utility function to covert int to string
+  std::string intToString(int i) const;
+
+protected: 
+  TrackerDD::SCT_DetectorManager* m_detectorManager;
+  const SCT_GeometryManager* m_geometryManager;
+  SCT_MaterialManager* m_materials;
+
+  double epsilon() const;
+  virtual ~SCT_ComponentFactory();
+
+private:
+  std::string m_name;
+  static const double s_epsilon;
+
+};
+
+
+class SCT_SharedComponentFactory : public SCT_ComponentFactory
+{
+
+public:
+  SCT_SharedComponentFactory(const std::string & name,
+                             TrackerDD::SCT_DetectorManager* detectorManager,
+                             const SCT_GeometryManager* geometryManager,
+                             SCT_MaterialManager* materials=nullptr) :
+    SCT_ComponentFactory(name, detectorManager, geometryManager, materials),
+    m_physVolume(nullptr)
+  {};
+  
+  GeoVPhysVol * getVolume() {return  m_physVolume;}
+
+protected:
+  GeoVPhysVol * m_physVolume;
+  virtual GeoVPhysVol * build() = 0;
+
+};
+
+class SCT_UniqueComponentFactory : public SCT_ComponentFactory
+{
+
+public:
+  SCT_UniqueComponentFactory(const std::string & name,
+                             TrackerDD::SCT_DetectorManager* detectorManager,
+                             const SCT_GeometryManager* geometryManager,
+                             SCT_MaterialManager* materials=nullptr) :
+    SCT_ComponentFactory(name, detectorManager, geometryManager, materials),
+    m_logVolume{nullptr}
+  {};
+
+  virtual GeoVPhysVol * build(SCT_Identifier id) = 0;
+
+protected:
+  const GeoLogVol * m_logVolume;
+
+  virtual const GeoLogVol * preBuild() = 0;
+
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_COMPONENTFACTORY_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DataBase.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DataBase.h
new file mode 100644
index 000000000..da77f9ad1
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DataBase.h
@@ -0,0 +1,151 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_DataBase_H
+#define FASERSCT_GeoModel_SCT_DataBase_H
+
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h"
+#include <string>
+
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+class IRDBRecord;
+
+
+class SCT_DataBase
+{
+
+  
+public:
+
+  SCT_DataBase(const SCT_GeoModelAthenaComps* athenaComps);
+
+  const SCT_GeoModelAthenaComps* athenaComps() const;
+
+  IRDBRecordset_ptr weightTable() const;
+  IRDBRecordset_ptr scalingTable() const;
+  IRDBRecordset_ptr topLevelTable() const;
+
+  // IRDBRecordset_ptr conditionsTable() const;
+  // const IRDBRecord* conditions() const;
+
+  const IRDBRecord* brlSensor() const;
+  const IRDBRecord* brlModule() const;
+
+  // const IRDBRecord* brlSki() const;
+  // const IRDBRecord* brlSkiZ(int i) const;
+  // int brlSkiZSize() const;
+  // const IRDBRecord* brlLayer(int i) const;
+  // const IRDBRecord* brlServices() const;
+  // const IRDBRecord* brlServPerLayer(int i) const;
+  // const IRDBRecord* brlThermalShield() const;
+  const IRDBRecord* brlGeneral() const;
+  // const IRDBRecord* brlFSI() const;
+  // int brlFSISize() const;
+  // const IRDBRecord* brlFSILocation(int i) const;
+
+  // const IRDBRecord* fwdSensor(int i) const;
+  // const IRDBRecord* fwdHybrid() const;
+  // const IRDBRecord* fwdSpine(int i) const;
+  // const IRDBRecord* fwdModule(int i) const;
+  // int fwdModuleSize() const;
+  // IRDBRecordset_ptr fwdModuleConnectorTable() const;
+  // const IRDBRecord* fwdModuleConnector() const;
+
+  // const IRDBRecord* fwdRing(int i) const;
+  // int fwdRingSize()  const;
+  // const IRDBRecord* fwdWheel(int i) const;
+  // const IRDBRecord* fwdWheelRingMap(int i) const;
+  // int fwdWheelRingMapSize() const;
+  // const IRDBRecord* fwdDiscSupport() const;
+  // const IRDBRecord* fwdPatchPanelLoc(int i) const;
+  // int fwdPatchPanelLocSize() const;
+  // const IRDBRecord* fwdPatchPanel(int i) const;
+  // int fwdPatchPanelSize() const;
+  // const IRDBRecord* fwdPPConnector() const;
+  // int fwdPPConnectorSize() const;
+  // const IRDBRecord* fwdPPCooling() const;
+  // int fwdPPCoolingSize() const;
+  // const IRDBRecord* fwdCoolingBlock(int i) const;
+  // const IRDBRecord* fwdRingServices(int i) const;
+  // const IRDBRecord* fwdServices() const;
+  // const IRDBRecord* fwdFSILocation(int i) const;
+  // int fwdFSILocationSize()  const;
+  // const IRDBRecord* fwdFSIType(int i) const;
+  // int fwdFSITypeSize() const;
+  // const IRDBRecord* fwdFSI(int i) const;
+  // int fwdFSISize() const;
+  // const IRDBRecord* fwdThermalShield(int i) const;
+  // int fwdThermalShieldSize()  const;
+  // const IRDBRecord* fwdGeneral() const;
+  // IRDBRecordset_ptr fwdOptoHarnessTable() const;
+  // const IRDBRecord* fwdOptoHarness(int i) const;
+  // IRDBRecordset_ptr fwdDiscFixationTable() const;
+  // const IRDBRecord* fwdDiscFixation() const;
+  // const IRDBRecord* fwdCylServ(int i) const;
+  // int fwdCylServSize() const;
+  // const IRDBRecord* fwdCylServLoc(int i) const;
+  // int fwdCylServLocSize() const;
+
+  // Return the SCT version tag.
+  const std::string & versionTag() const;
+
+  MsgStream& msg (MSG::Level lvl) const;
+
+private:
+  
+  SCT_DataBase(const SCT_DataBase &);
+  SCT_DataBase& operator= (const SCT_DataBase &);
+
+private:
+
+  const SCT_GeoModelAthenaComps* m_athenaComps;
+
+  std::string m_sctVersionTag;
+
+  IRDBRecordset_ptr m_weightTable;
+  IRDBRecordset_ptr m_scalingTable;
+  IRDBRecordset_ptr m_topLevel;
+  // IRDBRecordset_ptr m_conditions;
+
+  IRDBRecordset_ptr m_brlSensor;
+  IRDBRecordset_ptr m_brlModule;
+  // IRDBRecordset_ptr m_brlSki;
+  // IRDBRecordset_ptr m_brlSkiZ;
+  // IRDBRecordset_ptr m_brlLayer;
+  // IRDBRecordset_ptr m_brlServices;
+  // IRDBRecordset_ptr m_brlServPerLayer;
+  // IRDBRecordset_ptr m_brlThermalShield;
+  IRDBRecordset_ptr m_brlGeneral;
+  // IRDBRecordset_ptr m_brlFSI;
+  // IRDBRecordset_ptr m_brlFSILocation;
+  // IRDBRecordset_ptr m_fwdSensor;
+  // IRDBRecordset_ptr m_fwdHybrid;
+  // IRDBRecordset_ptr m_fwdSpine;
+  // IRDBRecordset_ptr m_fwdModule;
+  // IRDBRecordset_ptr m_fwdModuleConnector;
+  // IRDBRecordset_ptr m_fwdRing;
+  // IRDBRecordset_ptr m_fwdWheel;
+  // IRDBRecordset_ptr m_fwdWheelRingMap;
+  // IRDBRecordset_ptr m_fwdDiscSupport;
+  // IRDBRecordset_ptr m_fwdPatchPanelLoc;
+  // IRDBRecordset_ptr m_fwdPatchPanel;
+  // IRDBRecordset_ptr m_fwdPPConnector;
+  // IRDBRecordset_ptr m_fwdPPCooling;
+  // IRDBRecordset_ptr m_fwdCoolingBlock;
+  // IRDBRecordset_ptr m_fwdRingServices;
+  // IRDBRecordset_ptr m_fwdServices;
+  // IRDBRecordset_ptr m_fwdFSILocation;
+  // IRDBRecordset_ptr m_fwdFSIType;
+  // IRDBRecordset_ptr m_fwdFSI;
+  // IRDBRecordset_ptr m_fwdThermalShield;
+  // IRDBRecordset_ptr m_fwdGeneral;
+  // IRDBRecordset_ptr m_fwdOptoHarness;
+  // IRDBRecordset_ptr m_fwdDiscFixation;
+  // IRDBRecordset_ptr m_fwdCylServ;
+  // IRDBRecordset_ptr m_fwdCylServLoc;
+
+
+};
+
+#endif //FASERSCT_GeoModel_SCT_DataBase_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DetectorFactory.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DetectorFactory.h
new file mode 100644
index 000000000..52b9a644f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_DetectorFactory.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_DETECTORFACTORY_H 
+#define FASERSCT_GEOMODEL_SCT_DETECTORFACTORY_H 
+ 
+#include "TrackerGeoModelUtils/TrackerDetectorFactoryBase.h" 
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+
+class GeoPhysVol;
+class SCT_DataBase;
+class SCT_GeometryManager;
+class SCT_GeoModelAthenaComps;
+class SCT_MaterialManager;
+class SCT_Options;
+
+class SCT_DetectorFactory : public TrackerDD::DetectorFactoryBase  
+{ 
+  
+ public: 
+  // Constructor
+  SCT_DetectorFactory(const SCT_GeoModelAthenaComps * athenaComps, 
+		      const SCT_Options & options); 
+
+  // Destructor
+  virtual ~SCT_DetectorFactory(); 
+
+  // Creation of geometry:
+  virtual void create(GeoPhysVol *world);   
+
+  // Access to the results: 
+  virtual const TrackerDD::SCT_DetectorManager * getDetectorManager() const; 
+
+ private: 
+  // Copy and assignments operations illegal and so are made private
+  SCT_DetectorFactory(const SCT_DetectorFactory &right); 
+  const SCT_DetectorFactory & operator=(const SCT_DetectorFactory &right); 
+
+  TrackerDD::SCT_DetectorManager *m_detectorManager;
+  SCT_GeometryManager *m_geometryManager;
+  SCT_DataBase* m_db;
+  SCT_MaterialManager* m_materials;
+  bool m_useDynamicAlignFolders;
+
+}; 
+ 
+#endif 
+ 
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeneralParameters.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeneralParameters.h
new file mode 100644
index 000000000..63323d5b1
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeneralParameters.h
@@ -0,0 +1,45 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_GeneralParameters_H
+#define FASERSCT_GeoModel_SCT_GeneralParameters_H
+
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include <map>
+#include <string>
+
+class SCT_DataBase;
+class TopLevelPlacements;
+
+class SCT_GeneralParameters {
+
+public:
+
+  SCT_GeneralParameters(SCT_DataBase* rdb);
+  ~SCT_GeneralParameters();
+  //Explicitly disallow copy, assignment to appease coverity
+  SCT_GeneralParameters(const SCT_GeneralParameters &) = delete;
+  SCT_GeneralParameters & operator=(const SCT_GeneralParameters &) = delete;
+
+  // General
+  double safety() const;
+
+  //Default conditions.
+  // double temperature() const;
+  // double biasVoltage() const;
+  // double depletionVoltage() const;
+
+  const GeoTrf::Transform3D & partTransform(const std::string & partName) const; 
+  bool partPresent(const std::string & partName) const;
+  
+private:
+
+  SCT_DataBase * m_rdb;
+  TopLevelPlacements * m_placements;
+    
+};
+
+
+#endif // FASERSCT_GeoModel_SCT_GeneralParameters_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h
new file mode 100644
index 000000000..8d29e38dc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_GeoModelAthenaComps_H
+#define FASERSCT_GeoModel_SCT_GeoModelAthenaComps_H
+
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+
+class FaserSCT_ID;
+
+
+/// Class to hold various Athena components
+class SCT_GeoModelAthenaComps : public TrackerDD::AthenaComps {
+
+public:
+
+  SCT_GeoModelAthenaComps();
+
+  void setIdHelper(const FaserSCT_ID* idHelper);
+
+  const FaserSCT_ID* getIdHelper() const;
+
+private:
+  const FaserSCT_ID* m_idHelper;
+
+};
+
+#endif // FASERSCT_GeoModel_SCT_GeoModelAthenaComps_H
+
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeometryManager.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeometryManager.h
new file mode 100644
index 000000000..fbe0c7937
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_GeometryManager.h
@@ -0,0 +1,65 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_GeometryManager_H
+#define FASERSCT_GeoModel_SCT_GeometryManager_H
+
+#include "FaserSCT_GeoModel/SCT_Options.h"
+
+#include <memory>
+
+namespace TrackerDD {
+  class SiCommonItems;
+  class DistortedMaterialManager;
+}
+class SCT_BarrelParameters;
+class SCT_BarrelModuleParameters;
+class SCT_DataBase;
+class SCT_GeneralParameters;
+class SCT_GeoModelAthenaComps;
+
+class SCT_GeometryManager {
+
+public:
+
+  // Constructor 
+  SCT_GeometryManager(SCT_DataBase* rdb);
+
+  // Destructor 
+  ~SCT_GeometryManager();
+
+  // Access to run time options
+  const SCT_Options & options() const;
+  void setOptions(const SCT_Options & options);
+
+  // Access to athena components
+  const SCT_GeoModelAthenaComps * athenaComps() const;
+
+  // To be passed to detector element.
+  const TrackerDD::SiCommonItems * commonItems() const;
+
+  const SCT_BarrelParameters          * barrelParameters() const;
+  const SCT_BarrelModuleParameters    * barrelModuleParameters() const;
+  const SCT_GeneralParameters         * generalParameters() const;
+  const TrackerDD::DistortedMaterialManager  * distortedMatManager() const;
+
+  SCT_GeometryManager& operator=(const SCT_GeometryManager& right);
+  SCT_GeometryManager(const SCT_GeometryManager& right);
+
+private:
+
+  SCT_Options m_options;
+  const SCT_GeoModelAthenaComps * m_athenaComps;
+  TrackerDD::SiCommonItems * m_commonItems;
+  SCT_DataBase* m_rdb;
+ 
+  std::unique_ptr<SCT_BarrelParameters> m_barrelParameters;
+  std::unique_ptr<SCT_BarrelModuleParameters> m_barrelModuleParameters;
+  std::unique_ptr<SCT_GeneralParameters> m_generalParameters;
+  std::unique_ptr<TrackerDD::DistortedMaterialManager> m_distortedMatManager;
+
+};
+
+
+#endif // SCT_GeoModel_SCT_GeometryManager_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Hybrid.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Hybrid.h
new file mode 100644
index 000000000..92ad19c92
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Hybrid.h
@@ -0,0 +1,41 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_Hybrid_H
+#define FASERSCT_GEOMODEL_SCT_Hybrid_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+
+class SCT_Hybrid: public SCT_SharedComponentFactory
+
+{
+public:
+  SCT_Hybrid(const std::string & name,
+             TrackerDD::SCT_DetectorManager* detectorManager,
+             const SCT_GeometryManager* geometryManager,
+             SCT_MaterialManager* materials);
+
+public:
+  const GeoMaterial * material() const {return m_material;}
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+  
+private:
+  void getParameters();
+  virtual GeoVPhysVol * build();
+  
+  const GeoMaterial * m_material;
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_Hybrid_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Identifier.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Identifier.h
new file mode 100644
index 000000000..8cb02a19d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Identifier.h
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_IDENTIFIER_H
+#define FASERSCT_GEOMODEL_SCT_IDENTIFIER_H
+
+class Identifier;
+class FaserSCT_ID;
+
+class SCT_Identifier
+{
+public:
+
+  SCT_Identifier(const FaserSCT_ID* idHelper,
+                 int station = 0,
+		             int layer = 0, 
+		             int phiModule = 0,
+		             int etaModule = 0,
+		             int side = 0)
+    : m_idHelper{idHelper},
+      m_station{station},
+      m_layer{layer},
+      m_phiModule{phiModule},
+      m_etaModule{etaModule},
+      m_side{side}
+  {};
+
+
+  void setStation(int i) {m_station = i;}
+  int  getStation() const {return m_station;}
+
+  void setLayer(int i) {m_layer = i;}
+  int  getLayer() const {return m_layer;}
+
+  void setEtaModule(int i) {m_etaModule = i;}
+  int  getEtaModule() const {return m_etaModule;}
+
+  void setPhiModule(int i) {m_phiModule = i;}
+  int  getPhiModule() const {return m_phiModule;}
+
+  void setSide(int i) {m_side = i;}
+  int  getSide() const {return m_side;}
+
+  Identifier getWaferId();
+
+  // For debugging purposes.
+  void print();
+
+private:
+  const FaserSCT_ID* m_idHelper;
+  int m_station;
+  int m_layer;
+  int m_phiModule;
+  int m_etaModule;
+  int m_side;
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_IDENTIFIER_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_InnerSide.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_InnerSide.h
new file mode 100644
index 000000000..8aa896f3a
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_InnerSide.h
@@ -0,0 +1,89 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// 13rd Mar 2005 D.Naito
+// 28th Mar 2005 S.Mima
+// Wed 15th Jun 2005 D.Naito modified.
+//
+#ifndef FASERSCT_GEOMODEL_SCT_INNERSIDE_H
+#define FASERSCT_GEOMODEL_SCT_INNERSIDE_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+class GeoLogVol;
+class GeoTransform;
+class SCT_Identifier;
+class SCT_Hybrid;
+class SCT_Sensor;
+
+class SCT_InnerSide: public SCT_UniqueComponentFactory
+
+{
+public:
+
+  SCT_InnerSide(const std::string & name,
+                TrackerDD::SCT_DetectorManager* detectorManager,
+                const SCT_GeometryManager* geometryManager,
+                SCT_MaterialManager* materials);
+  
+  //explicitly disallow copy, assign, to appease coverity
+  SCT_InnerSide(const SCT_InnerSide &) = delete;
+  SCT_InnerSide & operator=(const SCT_InnerSide &) = delete;
+
+  ~SCT_InnerSide();  
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+  
+public:
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+
+  const GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  const GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
+  // *** End of modified lines. ------------------ (00)*********************************
+
+
+  const SCT_Hybrid       * hybrid() const {return m_hybrid;}
+  const SCT_Sensor       * sensor() const {return m_sensor;}
+
+  double hybridOffsetX() const {return m_hybridOffsetX;}
+  //double hybridOffsetY() const {return m_hybridOffsetY;} // 16:30 Wed 15th Jun 2005 D.Naito removed.
+  double hybridOffsetZ() const {return m_hybridOffsetZ;}
+
+
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+  double m_hybridOffsetX;
+  //double m_hybridOffsetY; // 16:30 Wed 15th Jun 2005 D.Naito removed.
+  double m_hybridOffsetZ;
+  double m_safety;
+
+  SCT_Hybrid       * m_hybrid;
+  SCT_Sensor       * m_sensor;
+
+  GeoTransform * m_hybridPos;
+  GeoTransform * m_sensorPos;
+
+  // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (02)*********************************
+  // *** -->>                                      (02)*********************************
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
+  // *** End of modified lines. ------------------ (02)*********************************
+
+};
+
+#endif // SCT_GEOMODEL_SCT_INNERSIDE_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Layer.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Layer.h
new file mode 100644
index 000000000..f9e291800
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Layer.h
@@ -0,0 +1,67 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// CPW 17/8/06
+// Version using new model of services from A. Tricoli
+// 
+#ifndef FASERSCT_GEOMODEL_SCT_LAYER_H
+#define FASERSCT_GEOMODEL_SCT_LAYER_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+class GeoLogVol;
+class SCT_Ski;
+class SCT_Module;
+class SCT_Identifier;
+
+class SCT_Layer: public SCT_UniqueComponentFactory
+{
+public:
+  SCT_Layer(const std::string & name,
+            TrackerDD::SCT_DetectorManager* detectorManager,
+            const SCT_GeometryManager* geometryManager,
+            SCT_MaterialManager* materials);
+
+  ~SCT_Layer();
+  //Explicitly disallow copy, assign to appease coverity
+  SCT_Layer(const SCT_Layer &) = delete;
+  SCT_Layer & operator=(const SCT_Layer &) = delete;
+
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+
+
+public:
+  
+  double width()  const   {return m_width;}         // x dimension of layer
+  double height() const   {return m_height;}        // y dimension of layer
+  double thickness() const   {return m_thickness;}  // z dimension of layer
+
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+
+  void activeEnvelopeExtent(double & dx, double & dy, double & dz);
+
+  // Layer number
+  double m_safety;
+  
+  double m_width;
+  double m_height;
+  double m_thickness;
+  double m_activeWidth;
+  double m_activeHeight;
+  double m_activeThickness;
+
+  int    m_rowsPerLayer;
+
+  SCT_Ski*      m_ski;
+  const GeoLogVol*    m_logVolume;
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_LAYER_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_MaterialManager.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_MaterialManager.h
new file mode 100644
index 000000000..1eca20f62
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_MaterialManager.h
@@ -0,0 +1,48 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_MATERIALMANAGER_H
+#define FASERSCT_MATERIALMANAGER_H
+
+// SCT_MaterialManager. This provides an interface to the TrackerMaterialManager which in turn
+// is an interface to GeoModel Material Manager with some additional functionality.
+#include "TrackerGeoModelUtils/TrackerMaterialManager.h"
+
+#include <memory>
+#include <string>
+
+class GeoMaterial;
+class GeoElement;
+class TrackerMaterialManager;
+class SCT_DataBase;
+
+class SCT_MaterialManager
+{
+
+public:
+
+  SCT_MaterialManager(SCT_DataBase* db);
+
+  const GeoMaterial* getMaterial(const std::string & materialName) const;
+  const GeoElement* getElement(const std::string & elementName) const;
+
+  const GeoMaterial* getMaterial(const std::string & originalMaterial, 
+				 double density,  
+				 const std::string & newName = "");
+  const GeoMaterial *getMaterialForVolume(const std::string & materialName, double volume);
+
+  // Default gas material
+  const GeoMaterial* gasMaterial() const;
+
+private:
+  void loadMaterials();
+  void addMaterial(GeoMaterial* material);
+
+  std::unique_ptr<TrackerMaterialManager> m_materialManager;
+  const GeoMaterial* m_gasMaterial;
+
+};
+
+
+#endif // FASERSCT_MATERIALMANAGER_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Module.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Module.h
new file mode 100644
index 000000000..6be41e1de
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Module.h
@@ -0,0 +1,111 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef SCT_GEOMODEL_SCT_MODULE_H
+#define SCT_GEOMODEL_SCT_MODULE_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+class GeoLogVol;
+
+class SCT_InnerSide;
+class SCT_OuterSide;
+class SCT_BaseBoard;
+
+class SCT_Module: public SCT_UniqueComponentFactory
+
+{
+public:
+
+  SCT_Module(const std::string & name,
+             TrackerDD::SCT_DetectorManager* detectorManager,
+             const SCT_GeometryManager* geometryManager,
+             SCT_MaterialManager* materials);
+
+  ~SCT_Module(); 
+  //Explicitly disallow copy, assign to appease coverity
+  SCT_Module(const SCT_Module &) = delete;
+  SCT_Module & operator=(const SCT_Module &) = delete;
+  
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+  
+public:
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+
+  double env1Thickness() const {return m_env1Thickness;}
+  double env1Width()     const {return m_env1Width;}
+  double env1Length()    const {return m_env1Length;}
+  double env2Thickness() const {return m_env2Thickness;}
+  double env2Width()     const {return m_env2Width;}
+  double env2Length()    const {return m_env2Length;}
+
+  const GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  const GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
+
+  double sensorGap()    const {return m_sensorGap;}
+  double stereoInner()  const {return m_stereoInner;}
+  double stereoOuter()  const {return m_stereoOuter;}
+  double stereoAngle()  const {return m_stereoAngle;}
+  
+  double activeWidth()     const {return m_activeWidth;}
+
+  double baseBoardOffsetY() const {return m_baseBoardOffsetY;}
+  double baseBoardOffsetZ() const {return m_baseBoardOffsetZ;}
+
+  const SCT_InnerSide * innerSide() const {return m_innerSide;}
+  const SCT_OuterSide * outerSide() const {return m_outerSide;}
+  const SCT_BaseBoard * baseBoard() const {return m_baseBoard;}
+
+ 
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+  
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+  double m_env1Thickness;
+  double m_env1Width;
+  double m_env1Length;
+  double m_env2Thickness;
+  double m_env2Width;
+  double m_env2Length;
+
+  double m_activeWidth;
+
+  double m_baseBoardOffsetY;
+  double m_baseBoardOffsetZ;
+
+  double m_sensorGap;
+  double m_stereoInner;
+  double m_stereoOuter;
+  double m_stereoAngle;
+  //int  m_stereoSign;
+  int    m_upperSide;
+  double m_safety;
+
+  SCT_InnerSide * m_innerSide;
+  SCT_OuterSide * m_outerSide;
+  SCT_BaseBoard * m_baseBoard;
+  //const SCT_Sensor          * m_sensor; // 14:00 Thu 14th Jul 2005 D.Naito removed.
+
+  GeoTrf::Transform3D * m_innerSidePos;
+  GeoTrf::Transform3D * m_outerSidePos;
+  GeoTrf::Translate3D * m_baseBoardPos; // 6th Apr 2005 S.Mima
+
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
+
+};
+
+#endif // SCT_GEOMODEL_SCT_MODULE_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Options.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Options.h
new file mode 100644
index 000000000..d0433a2c6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Options.h
@@ -0,0 +1,44 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GeoModel_SCT_Options_H
+#define FASERSCT_GeoModel_SCT_Options_H
+
+// Class for any run time options.
+
+
+class SCT_Options
+{
+
+public:
+  SCT_Options();
+  bool g3Compatible() const; 
+  bool versionDC1() const;
+  bool versionDC2() const;
+  bool alignable() const;
+  bool alignAtModuleLevel() const;
+
+  void setG3Compatible(bool flag = true);
+  void setDC1Geometry();
+  void setDC2Geometry();
+  void setAlignable(bool flag = true);
+  void setAlignAtModuleLevel(bool flag = true);
+
+  //dynamic alignment folders
+  void setDynamicAlignFolders(const bool flag = true);
+  bool dynamicAlignFolders() const;
+
+private:
+
+  bool m_g3Compatible;
+  bool m_dc1Geometry;
+  bool m_dc2Geometry;
+  bool m_alignable;
+  bool m_alignModule;
+  bool m_dynAlignFolders;   //controls which set of alignment folders is used
+
+};
+
+
+#endif // FASERSCT_GeoModel_SCT_Options_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_OuterSide.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_OuterSide.h
new file mode 100644
index 000000000..307d4bdae
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_OuterSide.h
@@ -0,0 +1,78 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_OUTERSIDE_H
+#define FASERSCT_GEOMODEL_SCT_OUTERSIDE_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+class GeoLogVol;
+class GeoTransform;
+
+class SCT_Identifier;
+class SCT_Hybrid;
+class SCT_Pigtail;
+class SCT_Sensor;
+
+class SCT_OuterSide: public SCT_UniqueComponentFactory
+
+{
+public:
+
+  SCT_OuterSide(const std::string & name,
+                TrackerDD::SCT_DetectorManager* detectorManager,
+                const SCT_GeometryManager* geometryManager,
+                SCT_MaterialManager* materials);
+
+  ~SCT_OuterSide(); 
+  //Explicitly disallow copy, assign to appease coverity
+  SCT_OuterSide(const SCT_OuterSide &) = delete;
+  SCT_OuterSide & operator=(const SCT_OuterSide &) = delete;
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+  
+public:
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+
+  const GeoTrf::Vector3D * env1RefPointVector() const {return m_env1RefPointVector;}
+  const GeoTrf::Vector3D * env2RefPointVector() const {return m_env2RefPointVector;}
+
+  const SCT_Hybrid       * hybrid() const {return m_hybrid;}
+  const SCT_Pigtail      * pigtail()      const {return m_pigtail;}
+  const SCT_Sensor             * sensor()       const {return m_sensor;}
+
+  double hybridOffsetX() const {return m_hybridOffsetX;}
+  double hybridOffsetZ() const {return m_hybridOffsetZ;}
+
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+  double m_hybridOffsetX;
+  double m_hybridOffsetZ;
+  double m_safety;
+
+  SCT_Hybrid  * m_hybrid;
+  SCT_Pigtail * m_pigtail;
+  SCT_Sensor        * m_sensor;
+
+  GeoTransform * m_hybridPos;
+  GeoTransform * m_pigtailPos;
+  GeoTransform * m_sensorPos;
+  GeoTrf::Vector3D * m_env1RefPointVector;
+  GeoTrf::Vector3D * m_env2RefPointVector;
+
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_OUTERSIDE_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Pigtail.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Pigtail.h
new file mode 100644
index 000000000..1dd60af16
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Pigtail.h
@@ -0,0 +1,41 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_Pigtail_H
+#define FASERSCT_GEOMODEL_SCT_Pigtail_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+
+class SCT_Pigtail: public SCT_SharedComponentFactory
+
+{
+public:
+  SCT_Pigtail(const std::string & name,
+              TrackerDD::SCT_DetectorManager* detectorManager,
+              const SCT_GeometryManager* geometryManager,
+              SCT_MaterialManager* materials);
+
+public:
+  const GeoMaterial * material() const {return m_material;}
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+  
+private:
+  void getParameters();
+  virtual GeoVPhysVol * build();
+  
+  const GeoMaterial * m_material;
+  double m_thickness;
+  double m_width;
+  double m_length;
+
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_Pigtail_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Sensor.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Sensor.h
new file mode 100644
index 000000000..ce8e62487
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Sensor.h
@@ -0,0 +1,48 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef FASERSCT_GEOMODEL_SCT_SENSOR_H
+#define FASERSCT_GEOMODEL_SCT_SENSOR_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <atomic>
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+namespace TrackerDD{class SiDetectorDesign;}
+
+class SCT_Sensor: public SCT_UniqueComponentFactory
+{
+public:
+  SCT_Sensor(const std::string & name,
+             TrackerDD::SCT_DetectorManager* detectorManager,
+             const SCT_GeometryManager* geometryManager,
+             SCT_MaterialManager* materials);
+
+public:
+  const GeoMaterial * material() const {return m_material;} 
+  double thickness() const {return m_thickness;}
+  double width()     const {return m_width;}
+  double length()    const {return m_length;}
+
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+  
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+  void makeDesign(); 
+ 
+  const GeoMaterial * m_material;
+  double m_thickness;
+  double m_width;
+  double m_length;
+  
+  TrackerDD::SiDetectorDesign * m_design;
+
+  mutable std::atomic_bool m_noElementWarning;
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_SENSOR_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Ski.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Ski.h
new file mode 100644
index 000000000..35c2b8195
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/FaserSCT_GeoModel/SCT_Ski.h
@@ -0,0 +1,66 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// CPW 17/8/06
+// Version using new model of services from A. Tricoli
+// 
+#ifndef FASERSCT_GEOMODEL_SCT_SKI_H
+#define FASERSCT_GEOMODEL_SCT_SKI_H
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+
+#include <string>
+
+class GeoMaterial;
+class GeoVPhysVol;
+class GeoLogVol;
+class SCT_Module;
+class SCT_Identifier;
+
+class SCT_Ski: public SCT_UniqueComponentFactory
+{
+public:
+  SCT_Ski(const std::string & name,
+          TrackerDD::SCT_DetectorManager* detectorManager,
+          const SCT_GeometryManager* geometryManager,
+          SCT_MaterialManager* materials);
+
+  ~SCT_Ski();
+  //Explicitly disallow copy, assign to appease coverity
+  SCT_Ski(const SCT_Ski &) = delete;
+  SCT_Ski & operator=(const SCT_Ski &) = delete;
+
+  virtual GeoVPhysVol * build(SCT_Identifier id);
+
+
+public:
+  
+  double width()  const      { return m_width; }         // y dimension of ski
+  double length() const      { return m_length; }        // z dimension of ski
+  double thickness() const   { return m_thickness; }  // x dimension of ski
+
+private:
+  void getParameters();
+  virtual const GeoLogVol * preBuild();
+
+  void activeEnvelopeExtent(double & dx, double & dy, double & dz);
+
+  // Layer number
+  double m_safety;
+  
+  double m_width;
+  double m_length;
+  double m_thickness;
+  double m_activeWidth;
+  double m_activeThickness;
+  double m_activeLength;
+
+  int    m_modulesPerRow;
+
+  SCT_Module*        m_module;
+  const GeoLogVol*         m_logVolume;
+};
+
+#endif // FASERSCT_GEOMODEL_SCT_SKI_H
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/README b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/README
new file mode 100644
index 000000000..72da3d328
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/README
@@ -0,0 +1,16 @@
+Package:      offline/Tracker/TrackerDetDescr/SCT_GeoModel  
+
+Responsible:  Pat Ward <cpw1@hep.phy.cam.ac.uk>
+
+Description:  GeoModel description of the SCT. Creates the raw geometry and
+              readout elements.
+
+Inputs:       Detector Description, Identifiers
+
+Outputs:      Geometry, Detector Elements.
+
+Dependencies: Geometry Database, Identifiers, Detector Description.
+
+JobOptions:   
+
+Last modified: December 11, 2008 by Pat Ward
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/doc/packagedoc.h b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/doc/packagedoc.h
new file mode 100644
index 000000000..79faf688d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/doc/packagedoc.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+
+@page SCT_GeoModel_page SCT_GeoModel Package
+
+@authors Grant Gorfine
+
+@section SCT_GeoModel_SCT_GeoModelIntro Introduction
+
+This package contains the factories for building the GeoModel Detector
+Description of the SCT. It builds both the material geometry  using the
+GeoModelKernel and  the readout geometry using classes in
+InDetReadoutGeometry.
+
+The creation of the geometry is initiated by the DetectorTool
+(SCT_DetectorTool) which is called from GeoModelSvc. The DetectorTool
+calls a top level factory (eg SCT_DetectorFactory) which starts the
+building process.
+
+The version of geometry is controlled by the Detector Description tag which 
+can be specified at various levels (ATLAS, InnerDetector or SCT node).  
+
+See https://uimon.cern.ch/twiki/bin/view/Atlas/InDetGeometryVersions for current versions supported.
+
+See the InDetDetDescrExample package for examples of how to load the geometry 
+and access detector elements.
+
+@section SCT_GeoModel_SCT_GeoModelClassOverview Class Overview
+  
+The package contains several helper factories which build the different components of the SCT.
+Some of the other classes are described here:
+
+ - SCT_DetectorTool: Tool called by GeoModelSvc to start the building process
+ - SCT_DetectorFactory: Top level factory for SCT. It in turn calls the component factories.
+ - SCT_DetectorFactoryCosmic: Top level factory for building SCT barrel for Cosmic run in SR1 building. 
+ - SCT_ComponentFactory: %Base class for all component factories.
+ - SCT_GeometryManager: General manager. 
+ - SCT_Identifier: Helper class for building up the ATLAS Identifier
+ - SCT_DataBase: Access the Detector Description database
+ - SCT_xxxParameters: Interfaces for primary numbers. 
+ - SCT_MaterialManager: Interface to the material manager.
+ - SCT_Options: Class to contain various building options.
+ - SCT_DefaultConditions: Class to store default conditions data.
+
+
+
+*/
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfig.py b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfig.py
new file mode 100644
index 000000000..ad3cc8477
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfig.py
@@ -0,0 +1,46 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon import CfgMgr
+
+def getFaserSCT_DetectorTool(name="FaserSCT_DetectorTool", **kwargs):
+    kwargs.setdefault("DetectorName",     "SCT")
+    kwargs.setdefault("Alignable",        True)
+    kwargs.setdefault("RDBAccessSvc",     "RDBAccessSvc")
+    kwargs.setdefault("GeometryDBSvc",    "TrackerGeometryDBSvc")
+    kwargs.setdefault("GeoDbTagSvc",      "GeoDbTagSvc")
+    return CfgMgr.FaserSCT_DetectorTool(name, **kwargs)
+
+
+from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
+
+def FaserSCT_GeometryCfg( flags ):
+    from FaserGeoModel.GeoModelConfig import GeoModelCfg
+    acc = GeoModelCfg( flags )
+    geoModelSvc=acc.getPrimary()
+    from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
+    acc.addService(GeometryDBSvc("TrackerGeometryDBSvc"))
+    from FaserSCT_GeoModel.FaserSCT_GeoModelConf import FaserSCT_DetectorTool
+    sctDetectorTool = FaserSCT_DetectorTool()
+
+    sctDetectorTool.useDynamicAlignFolders = flags.GeoModel.Align.Dynamic
+    geoModelSvc.DetectorTools += [ sctDetectorTool ]
+    
+    # if flags.GeoModel.Align.Dynamic:
+    #     acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL1/ID","/Indet/AlignL1/ID",className="CondAttrListCollection"))
+    #     acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL2/SCT","/Indet/AlignL2/SCT",className="CondAttrListCollection"))
+    #     acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/AlignL3","/Indet/AlignL3",className="AlignableTransformContainer"))
+    # else:
+    #     if (not flags.Detector.SimulateSCT) or flags.Detector.OverlaySCT:
+    #         acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/Align","/Indet/Align",className="AlignableTransformContainer"))
+    #     else:
+    #         acc.merge(addFoldersSplitOnline(flags,"INDET","/Indet/Onl/Align","/Indet/Align"))
+    # if flags.Common.Project is not "AthSimulation": # Protection for AthSimulation builds
+    #     if (not flags.Detector.SimulateSCT) or flags.Detector.OverlaySCT:
+    #         from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_AlignCondAlg
+    #         sctAlignCondAlg = SCT_AlignCondAlg(name = "SCT_AlignCondAlg",
+    #                                            UseDynamicAlignFolders = flags.GeoModel.Align.Dynamic)
+    #         acc.addCondAlgo(sctAlignCondAlg)
+    #         from SCT_ConditionsAlgorithms.SCT_ConditionsAlgorithmsConf import SCT_DetectorElementCondAlg
+    #         sctDetectorElementCondAlg = SCT_DetectorElementCondAlg(name = "SCT_DetectorElementCondAlg")
+    #         acc.addCondAlgo(sctDetectorElementCondAlg)
+    return acc
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfigDb.py b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfigDb.py
new file mode 100644
index 000000000..585ac9672
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/python/FaserSCT_GeoModelConfigDb.py
@@ -0,0 +1,6 @@
+# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon.CfgGetter import addAlgorithm,addTool
+# add tools and algorithms to the ConfiguredFactory, see:
+# https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/ConfiguredFactory
+addTool("FaserSCT_GeoModel.FaserSCT_GeoModelConfig.FasergetSCT_DetectorTool","FaserSCT_DetectorTool")
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx
new file mode 100644
index 000000000..d459b373f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/FaserSCT_DetectorTool.cxx
@@ -0,0 +1,236 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/FaserSCT_DetectorTool.h"
+
+#include "FaserSCT_GeoModel/SCT_DetectorFactory.h" 
+#include "FaserSCT_GeoModel/SCT_DataBase.h" 
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h" 
+#include "FaserSCT_GeoModel/SCT_Options.h" 
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h" 
+#include "DetDescrConditions/AlignableTransformContainer.h"
+
+#include "GeoModelUtilities/GeoModelExperiment.h"
+#include "GeoModelFaserUtilities/DecodeFaserVersionKey.h"
+#include "StoreGate/DataHandle.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+
+#include "AthenaKernel/ClassID_traits.h"
+#include "SGTools/DataProxy.h"
+
+using TrackerDD::SCT_DetectorManager;
+using TrackerDD::SiDetectorManager;
+
+//
+// Constructor
+//
+FaserSCT_DetectorTool::FaserSCT_DetectorTool(const std::string& type,
+                                   const std::string& name, 
+                                   const IInterface* parent)
+  : GeoModelTool(type, name, parent),
+  m_cosmic{false},
+  m_manager{nullptr},
+  m_geoDbTagSvc{"GeoDbTagSvc", name},
+  m_rdbAccessSvc{"RDBAccessSvc", name},
+  m_geometryDBSvc{"TrackerGeometryDBSvc", name}
+{
+  // Get parameter values from jobOptions file
+  declareProperty("GeoDbTagSvc", m_geoDbTagSvc);
+  declareProperty("RDBAccessSvc", m_rdbAccessSvc);
+  declareProperty("GeometryDBSvc", m_geometryDBSvc);
+}
+
+//
+// Create the Geometry via the factory corresponding to this tool
+//
+
+StatusCode
+FaserSCT_DetectorTool::create()
+{ 
+  // Get the detector configuration.
+  ATH_CHECK(m_geoDbTagSvc.retrieve());
+  
+  DecodeFaserVersionKey versionKey{&*m_geoDbTagSvc, "SCT"};
+  // Issue error if AUTO.
+  if (versionKey.tag() == "AUTO") {
+    ATH_MSG_ERROR("AUTO Faser version. Please select a version.");
+  }
+  ATH_MSG_INFO("Building SCT with Version Tag: " << versionKey.tag() << " at Node: " << versionKey.node());
+
+  ATH_CHECK(m_rdbAccessSvc.retrieve());
+  // Print the SCT version tag:
+  std::string sctVersionTag{m_rdbAccessSvc->getChildTag("SCT", versionKey.tag(), versionKey.node(),"FASERDD")};
+  ATH_MSG_INFO("SCT Version: " << sctVersionTag <<  "  Package Version: " << PACKAGE_VERSION);
+  // Check if version is empty. If so, then the SCT cannot be built. This may or may not be intentional. We
+  // just issue an INFO message. 
+  if (sctVersionTag.empty()) {
+    ATH_MSG_INFO("No SCT Version. SCT will not be built.");
+  } else {
+    std::string versionName;
+    if (versionKey.custom()) {
+      ATH_MSG_WARNING("SCT_DetectorTool:  Detector Information coming from a custom configuration!!");
+    } else {
+      ATH_MSG_DEBUG("SCT_DetectorTool:  Detector Information coming from the database and job options IGNORED.");
+      ATH_MSG_DEBUG("Keys for SCT Switches are "  << versionKey.tag()  << "  " << versionKey.node());
+
+      IRDBRecordset_ptr switchSet{m_rdbAccessSvc->getRecordsetPtr("SctSwitches", versionKey.tag(), versionKey.node(), "FASERDD")};
+      const IRDBRecord* switches{(*switchSet)[0]};
+      m_detectorName.setValue(switches->getString("DETECTORNAME"));
+
+      m_cosmic = false;
+      if (not switches->isFieldNull("COSMICLAYOUT")) {
+        m_cosmic = switches->getInt("COSMICLAYOUT");
+      }
+      if (not switches->isFieldNull("VERSIONNAME")) {
+        versionName = switches->getString("VERSIONNAME");
+      } 
+    }
+
+    ATH_MSG_DEBUG("Creating the SCT");
+    ATH_MSG_DEBUG("SCT Geometry Options: ");
+    ATH_MSG_DEBUG(" Alignable:             " << (m_alignable.value() ? "true" : "false"));
+    ATH_MSG_DEBUG(" CosmicLayout:          " << (m_cosmic ? "true" : "false"));
+    ATH_MSG_DEBUG(" VersionName:           " << versionName);
+
+    SCT_Options options;
+    options.setAlignable(m_alignable.value());
+    options.setDynamicAlignFolders(m_useDynamicAlignFolders.value());
+    m_manager = nullptr;
+
+    // 
+    // Locate the top level experiment node 
+    // 
+    GeoModelExperiment* theExpt{nullptr};
+    ATH_CHECK(detStore()->retrieve(theExpt, "FASER"));
+      
+    // Retrieve the Geometry DB Interface
+    ATH_CHECK(m_geometryDBSvc.retrieve());
+
+    // Pass athena services to factory, etc
+    m_athenaComps.setDetStore(detStore().operator->());
+    m_athenaComps.setGeoDbTagSvc(&*m_geoDbTagSvc);
+    m_athenaComps.setGeometryDBSvc(&*m_geometryDBSvc);
+    m_athenaComps.setRDBAccessSvc(&*m_rdbAccessSvc);
+    const FaserSCT_ID* idHelper{nullptr};
+    ATH_CHECK(detStore()->retrieve(idHelper, "FaserSCT_ID"));
+    m_athenaComps.setIdHelper(idHelper);
+
+    //
+    // This strange way of casting is to avoid an
+    // utterly brain damaged compiler warning.
+    //
+    GeoPhysVol* world{&*theExpt->getPhysVol()};
+      
+    SCT_DetectorFactory theSCT{&m_athenaComps, options};
+    theSCT.create(world);
+    m_manager = theSCT.getDetectorManager();
+    
+    if (m_manager==nullptr) {
+      ATH_MSG_FATAL("SCT_DetectorManager not created");
+      return StatusCode::FAILURE;
+    }
+      
+    // Get the manager from the factory and store it in the detector store.
+    //   m_detector is non constant so I can not set it to a const pointer.
+    //   m_detector = theSCT.getDetectorManager();
+      
+    ATH_MSG_DEBUG("Registering SCT_DetectorManager. ");
+    ATH_CHECK(detStore()->record(m_manager, m_manager->getName()));
+    theExpt->addManager(m_manager);
+    
+    // Create a symLink to the SiDetectorManager base class
+    const SiDetectorManager* siDetManager{m_manager};
+    ATH_CHECK(detStore()->symLink(m_manager, siDetManager));
+  }
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode 
+FaserSCT_DetectorTool::clear()
+{
+  SG::DataProxy* proxy{detStore()->proxy(ClassID_traits<SCT_DetectorManager>::ID(), m_manager->getName())};
+  if (proxy) {
+    proxy->reset();
+    m_manager = nullptr;
+  }
+  return StatusCode::SUCCESS;
+}
+
+StatusCode 
+FaserSCT_DetectorTool::registerCallback ATLAS_NOT_THREAD_SAFE ()
+{
+  StatusCode sc{StatusCode::FAILURE, true};
+  if (m_alignable.value()) {
+    if (m_useDynamicAlignFolders.value()) {
+
+      if (detStore()->contains<CondAttrListCollection>(m_run2L1Folder.value())) {
+        ATH_MSG_DEBUG("Registering callback on global Container with folder " << m_run2L1Folder.value());
+        const DataHandle<CondAttrListCollection> calc;
+        ATH_CHECK(detStore()->regFcn(&IGeoModelTool::align, dynamic_cast<IGeoModelTool*>(this), calc, m_run2L1Folder.value()));
+        sc = StatusCode::SUCCESS;
+      } else {
+        ATH_MSG_WARNING("Unable to register callback on global Container with folder " << m_run2L1Folder.value());
+        return StatusCode::FAILURE;
+      }
+
+      if (detStore()->contains<CondAttrListCollection>(m_run2L2Folder.value())) {
+        ATH_MSG_DEBUG("Registering callback on global Container with folder " << m_run2L2Folder.value());
+        const DataHandle<CondAttrListCollection> calc;
+        ATH_CHECK(detStore()->regFcn(&IGeoModelTool::align, dynamic_cast<IGeoModelTool*>(this), calc, m_run2L2Folder.value()));
+        sc = StatusCode::SUCCESS;
+      } else {
+        ATH_MSG_WARNING("Unable to register callback on global Container with folder " << m_run2L2Folder.value());
+        return StatusCode::FAILURE;
+      }
+
+      if (detStore()->contains<AlignableTransformContainer>(m_run2L3Folder.value())) {
+        ATH_MSG_DEBUG("Registering callback on AlignableTransformContainer with folder " << m_run2L3Folder.value());
+        const DataHandle<AlignableTransformContainer> atc;
+        ATH_CHECK(detStore()->regFcn(&IGeoModelTool::align, dynamic_cast<IGeoModelTool*>(this), atc, m_run2L3Folder.value()));
+        sc = StatusCode::SUCCESS;
+      } else {
+        ATH_MSG_WARNING("Unable to register callback on AlignableTransformContainer with folder " << m_run2L3Folder.value());
+        return StatusCode::FAILURE;
+      }
+      
+    } else {
+
+      if (detStore()->contains<AlignableTransformContainer>(m_run1Folder.value())) {
+        ATH_MSG_DEBUG("Registering callback on AlignableTransformContainer with folder " << m_run1Folder.value());
+        const DataHandle<AlignableTransformContainer> atc;
+        ATH_CHECK(detStore()->regFcn(&IGeoModelTool::align, dynamic_cast<IGeoModelTool*>(this), atc, m_run1Folder.value()));
+        sc = StatusCode::SUCCESS;
+      } else {
+        ATH_MSG_WARNING("Unable to register callback on AlignableTransformContainer with folder "
+                        << m_run1Folder.value() << ", Alignment disabled (only if no Run2 scheme is loaded)!");
+        return StatusCode::FAILURE;
+      }
+    }
+
+  } else {
+    ATH_MSG_INFO("Alignment disabled. No callback registered");
+    // We return failure otherwise it will try and register
+    // a GeoModelSvc callback associated with this callback. 
+    return StatusCode::FAILURE;
+  }
+  return sc;
+}
+  
+StatusCode 
+FaserSCT_DetectorTool::align(IOVSVC_CALLBACK_ARGS_P(I, keys))
+{
+  if (m_manager==nullptr) { 
+    ATH_MSG_FATAL("Manager does not exist");
+    return StatusCode::FAILURE;
+  }    
+  if (m_alignable.value()) {
+    return m_manager->align(I, keys);
+  } else {
+    ATH_MSG_DEBUG("Alignment disabled. No alignments applied");
+    return StatusCode::SUCCESS;
+  }
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Barrel.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Barrel.cxx
new file mode 100644
index 000000000..f5d23f80f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Barrel.cxx
@@ -0,0 +1,118 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Barrel.h"
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+
+#include "FaserSCT_GeoModel/SCT_Layer.h"
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "TrackerGeoModelUtils/ExtraMaterial.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoTubs.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoShapeShift.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <iostream>
+
+SCT_Barrel::SCT_Barrel(const std::string & name,
+                       TrackerDD::SCT_DetectorManager* detectorManager,
+                       const SCT_GeometryManager* geometryManager,
+                       SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials)
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+
+void
+SCT_Barrel::getParameters()
+{
+  const SCT_GeneralParameters* generalParameters = m_geometryManager->generalParameters();
+  m_safety = generalParameters->safety();
+
+  const SCT_BarrelParameters * parameters = m_geometryManager->barrelParameters();
+  
+  m_numLayers  = parameters->numLayers(); 
+  m_layerPitch = parameters->layerPitch();
+  int modulesPerRow = parameters->modulesPerRow();
+  int rowsPerLayer  = parameters->rowsPerLayer();
+  std::cout << "Retrieved parameters: " << m_numLayers << " "<<  m_layerPitch << " " << modulesPerRow << " " << rowsPerLayer << std::endl;
+  // Set numerology
+  std::cout << "Setting num layers" << std::endl;
+  // Set numerology
+  m_detectorManager->numerology().setNumLayers(m_numLayers);
+  std::cout << "Setting modules per layer" << std::endl;
+  for (int i = 0; i < m_numLayers; i++)
+  {
+    m_detectorManager->numerology().setNumEtaModulesForLayer(i, modulesPerRow);
+    m_detectorManager->numerology().setNumPhiModulesForLayer(i, rowsPerLayer);
+  }
+}
+
+const GeoLogVol * 
+SCT_Barrel::preBuild()
+{
+  std::cout << "Instantiating Layer" << std::endl;
+  m_layer = new SCT_Layer("Layer", m_detectorManager, m_geometryManager, m_materials);
+  m_width = m_layer->width() + m_safety;
+  m_height = m_layer->height() + m_safety;
+  m_thickness = m_layer->thickness() * m_numLayers + m_layerPitch * (m_numLayers - 1) + m_safety;
+
+  // Create the barrel volume
+  // Tube envelope containing the barrel.
+  const GeoBox* stationEnvelopeShape = new GeoBox(0.5 * m_width, 0.5 * m_height, 0.5 * m_thickness);
+  GeoLogVol* stationLog = new GeoLogVol(getName(), stationEnvelopeShape, m_materials->gasMaterial());
+  return stationLog;
+}
+
+GeoVPhysVol * 
+SCT_Barrel::build(SCT_Identifier id)
+{
+
+  GeoFullPhysVol * barrel = new GeoFullPhysVol(m_logVolume);
+
+  double activeDepth = m_thickness - m_safety/2;
+
+  double layerThickness = m_layer->thickness();
+  for (int iLayer = 0; iLayer < m_numLayers; iLayer++) {
+    // Create the layers
+    barrel->add(new GeoNameTag("Layer#"+intToString(iLayer)));
+    barrel->add(new GeoIdentifierTag(iLayer)); // Identifier layer= iLayer
+    id.setLayer(iLayer); 
+    GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::Translate3D(0.0, 
+                                                                                     0.0,
+                                                                                     (layerThickness - activeDepth)/2 + iLayer * m_layerPitch) );
+    barrel->add(transform);
+    GeoVPhysVol * layerPV = m_layer->build(id);
+    barrel->add(layerPV);
+    // Store alignable transform
+    m_detectorManager->addAlignableTransform(2, id.getWaferId(), transform, layerPV);
+  }
+
+  // Extra Material
+  TrackerDD::ExtraMaterial xMat(m_geometryManager->distortedMatManager());
+  xMat.add(barrel, "SCTBarrel");
+  
+  return barrel;
+  
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelModuleParameters.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
new file mode 100644
index 000000000..39bb7ca80
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelModuleParameters.cxx
@@ -0,0 +1,238 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+
+#include "RDBAccessSvc/IRDBRecord.h"
+
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <cmath>
+
+using std::abs;
+
+SCT_BarrelModuleParameters::SCT_BarrelModuleParameters(SCT_DataBase* rdb)
+{
+  m_rdb = rdb;
+}
+
+//
+// Barrel Sensors
+//
+double 
+SCT_BarrelModuleParameters::sensorThickness() const 
+{
+  return m_rdb->brlSensor()->getDouble("THICKNESS") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::sensorWidth() const 
+{
+  return m_rdb->brlSensor()->getDouble("WIDTH") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::sensorLength() const 
+{
+  return m_rdb->brlSensor()->getDouble("WAFERLENGTH") * Gaudi::Units::mm;
+}
+
+int
+SCT_BarrelModuleParameters::sensorNumWafers() const 
+{
+  return m_rdb->brlSensor()->getInt("NUMWAFERS");
+}
+
+std::string
+SCT_BarrelModuleParameters::sensorMaterial() const 
+{
+  return m_rdb->brlSensor()->getString("MATERIAL");
+}
+
+double
+SCT_BarrelModuleParameters::sensorDistCenterToCenter() const 
+{
+  return 2 * m_rdb->brlSensor()->getDouble("CENTERTOFIDUCIAL") * Gaudi::Units::mm 
+    + m_rdb->brlSensor()->getDouble("FIDUCIALSEP") * Gaudi::Units::mm;
+}
+
+double
+SCT_BarrelModuleParameters::sensorStripLength() const
+{
+  return 2 * m_rdb->brlSensor()->getDouble("ACTIVEHALFLENGTH") * Gaudi::Units::mm;
+}
+
+double
+SCT_BarrelModuleParameters::sensorStripPitch() const
+{
+  return m_rdb->brlSensor()->getDouble("STRIPPITCH") * Gaudi::Units::mm;
+}
+
+int 
+SCT_BarrelModuleParameters::sensorNumStrips() const
+{
+   return m_rdb->brlSensor()->getInt("NUMSTRIPS");
+}
+
+
+int
+SCT_BarrelModuleParameters::sensorNumReadoutStrips() const
+{
+  return m_rdb->brlSensor()->getInt("NUMREADOUTSTRIPS");
+}
+
+int
+SCT_BarrelModuleParameters::sensorStripShift() const
+{
+  return m_rdb->brlSensor()->getInt("STRIPSHIFT");
+}
+
+
+
+//
+// Barrel BaseBoard
+//
+double 
+SCT_BarrelModuleParameters::baseBoardThickness() const 
+{
+  return m_rdb->brlModule()->getDouble("BASEBOARDTHICKNESS") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::baseBoardWidth() const 
+{
+  return m_rdb->brlModule()->getDouble("BASEBOARDWIDTH") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::baseBoardLength() const 
+{
+  return m_rdb->brlModule()->getDouble("BASEBOARDLENGTH") * Gaudi::Units::mm;
+}
+
+std::string
+SCT_BarrelModuleParameters::baseBoardMaterial() const 
+{
+  return m_rdb->brlModule()->getString("BASEBOARDMATERIAL");
+}
+
+double 
+SCT_BarrelModuleParameters::baseBoardOffsetY() const 
+{
+  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETY") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::baseBoardOffsetZ() const 
+{
+  return m_rdb->brlModule()->getDouble("BASEBOARDOFFSETZ") * Gaudi::Units::mm;
+}
+
+//
+// Barrel Hybrid
+//
+double 
+SCT_BarrelModuleParameters::hybridThickness() const 
+{
+  return m_rdb->brlModule()->getDouble("HYBRIDTHICKNESS") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::hybridWidth() const 
+{
+  return m_rdb->brlModule()->getDouble("HYBRIDWIDTH") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::hybridLength() const 
+{
+  return m_rdb->brlModule()->getDouble("HYBRIDLENGTH") * Gaudi::Units::mm;
+}
+
+std::string
+SCT_BarrelModuleParameters::hybridMaterial() const 
+{
+  return m_rdb->brlModule()->getString("HYBRIDMATERIAL");
+}
+
+double 
+SCT_BarrelModuleParameters::hybridOffsetX() const 
+{
+  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETX") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::hybridOffsetZ() const 
+{
+  return m_rdb->brlModule()->getDouble("HYBRIDOFFSETZ") * Gaudi::Units::mm;
+}
+
+//
+// Barrel Pigtail
+//
+double 
+SCT_BarrelModuleParameters::pigtailThickness() const 
+{
+  return m_rdb->brlModule()->getDouble("PIGTAILTHICKNESS") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::pigtailWidth() const 
+{
+  return m_rdb->brlModule()->getDouble("PIGTAILWIDTH") * Gaudi::Units::mm;
+}
+
+double 
+SCT_BarrelModuleParameters::pigtailLength() const 
+{
+  return m_rdb->brlModule()->getDouble("PIGTAILLENGTH") * Gaudi::Units::mm;
+}
+
+std::string
+SCT_BarrelModuleParameters::pigtailMaterial() const 
+{
+  return m_rdb->brlModule()->getString("PIGTAILMATERIAL");
+}
+
+
+
+//
+// Barrel Module
+//
+int 
+SCT_BarrelModuleParameters::moduleStereoUpperSign() const
+{
+  return m_rdb->brlModule()->getInt("STEREOUPPERSIGN");
+}
+
+int 
+SCT_BarrelModuleParameters::moduleUpperSideNumber() const
+{
+  // Old geometries have lower module side = 0 and upper = 1
+  if (m_rdb->brlModule()->isFieldNull("SIDEUPPER")) {
+    return 1;
+  }
+  return m_rdb->brlModule()->getInt("SIDEUPPER");
+}
+
+
+double 
+SCT_BarrelModuleParameters::moduleStereoAngle() const
+{
+  return m_rdb->brlModule()->getDouble("STEREOANGLE") * Gaudi::Units::milliradian;
+}
+
+
+double 
+SCT_BarrelModuleParameters::moduleSensorToSensorGap() const
+{
+  return m_rdb->brlModule()->getDouble("SENSORTOSENSORGAP") * Gaudi::Units::mm;
+}
+
+
+
+
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelParameters.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelParameters.cxx
new file mode 100644
index 000000000..4798f4b50
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BarrelParameters.cxx
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_BarrelParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <cmath>
+
+
+SCT_BarrelParameters::SCT_BarrelParameters(SCT_DataBase* rdb)
+{
+  m_rdb = rdb;
+}
+
+
+//
+// Barrel Layer
+//
+
+  int
+  SCT_BarrelParameters::modulesPerRow() const
+  {
+    return m_rdb->brlGeneral()->getInt("MODULESPERROW");
+  }
+
+  int
+  SCT_BarrelParameters::rowsPerLayer() const
+  {
+    return m_rdb->brlGeneral()->getInt("ROWSPERLAYER");
+  }
+//
+// Barrel General
+//
+int
+SCT_BarrelParameters::numLayers() const
+{
+  return m_rdb->brlGeneral()->getInt("NUMLAYERS"); 
+}
+
+double
+SCT_BarrelParameters::layerPitch() const
+{
+  return m_rdb->brlGeneral()->getDouble("LAYERPITCH");
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BaseBoard.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BaseBoard.cxx
new file mode 100644
index 000000000..3a65563db
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_BaseBoard.cxx
@@ -0,0 +1,56 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_BaseBoard.h"
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+
+SCT_BaseBoard::SCT_BaseBoard(const std::string & name,
+                             TrackerDD::SCT_DetectorManager* detectorManager,
+                             const SCT_GeometryManager* geometryManager,
+                             SCT_MaterialManager* materials)
+  : SCT_SharedComponentFactory(name, detectorManager, geometryManager, materials)
+{
+  getParameters();
+  m_physVolume = build();
+}
+
+void
+SCT_BaseBoard::getParameters() 
+{
+  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+
+  m_material  = m_materials->getMaterial(parameters->baseBoardMaterial());
+  m_safety    = generalParameters->safety();
+  m_thickness = parameters->baseBoardThickness();
+  m_width     = parameters->baseBoardWidth();
+  m_length    = parameters->baseBoardLength();
+
+}
+
+GeoVPhysVol * 
+SCT_BaseBoard::build()
+{
+  // Make BaseBoard. Just a simple box.
+  const GeoBox * simpleBaseBoardShape = new GeoBox(0.5*m_thickness,
+                                                   0.5*m_width,
+                                                   0.5*m_length);
+
+  const GeoLogVol * simpleBaseBoardLog = 
+    new GeoLogVol(getName(), simpleBaseBoardShape, m_material);
+
+  GeoPhysVol * simpleBaseBoard = new GeoPhysVol(simpleBaseBoardLog);
+
+  return simpleBaseBoard;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_ComponentFactory.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_ComponentFactory.cxx
new file mode 100644
index 000000000..1ecd5d372
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_ComponentFactory.cxx
@@ -0,0 +1,40 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_ComponentFactory.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <sstream>
+#include <string>
+
+using TrackerDD::SCT_DetectorManager;
+
+const double SCT_ComponentFactory::s_epsilon = 1.0e-6 * Gaudi::Units::mm;
+
+SCT_ComponentFactory::SCT_ComponentFactory(const std::string & name,
+                                           TrackerDD::SCT_DetectorManager* detectorManager,
+                                           const SCT_GeometryManager* geometryManager,
+                                           SCT_MaterialManager* materials)
+  : m_detectorManager(detectorManager), 
+    m_geometryManager(geometryManager),
+    m_materials(materials),
+    m_name(name)
+{}
+
+SCT_ComponentFactory::~SCT_ComponentFactory() 
+{}
+
+std::string 
+SCT_ComponentFactory::intToString(int i) const
+{
+  std::ostringstream str;
+  str << i;
+  return str.str();
+}
+
+double
+SCT_ComponentFactory::epsilon() const
+{
+  return s_epsilon;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DataBase.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DataBase.cxx
new file mode 100644
index 000000000..badca6d6a
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DataBase.cxx
@@ -0,0 +1,112 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+
+#include "GeoModelInterfaces/IGeoDbTagSvc.h"
+#include "GeoModelFaserUtilities/DecodeFaserVersionKey.h"
+
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h"
+
+#include <iostream>
+
+SCT_DataBase::SCT_DataBase(const SCT_GeoModelAthenaComps * athenaComps)
+{
+  m_athenaComps = athenaComps;
+
+  IGeoDbTagSvc * geoDbTag = m_athenaComps->geoDbTagSvc();
+
+  // Get version tag and node for SCT
+  DecodeFaserVersionKey versionKey(geoDbTag,"SCT");
+  std::string versionTag  = versionKey.tag();
+  std::string versionNode = versionKey.node();
+
+  // Get version tag and node for Tracker.
+  DecodeFaserVersionKey trackerVersionKey(geoDbTag,"Tracker");
+
+  // Access the RDB
+  IRDBAccessSvc* rdbSvc = m_athenaComps->rdbAccessSvc();
+
+  // SCT version tag
+  m_sctVersionTag = rdbSvc->getChildTag("SCT", versionKey.tag(), versionKey.node(), "FASERDD");
+
+
+/////////////////////////////////////////////////////////
+//
+// Gets the structures
+//
+/////////////////////////////////////////////////////////
+
+    msg(MSG::INFO) << "Retrieving Record Sets from database ..." << endmsg;
+    msg(MSG::DEBUG) << " Using version tag: " << versionTag << endmsg;
+    msg(MSG::DEBUG) << "           at node: " << versionNode << endmsg;
+    msg(MSG::DEBUG) << " SCT Version:       " << m_sctVersionTag << endmsg;
+
+  // ATLS - not sure I use it.
+  // General atlas parameters
+
+  //
+  // SCT General
+  //
+
+  // SCT TopLevel
+  m_topLevel = rdbSvc->getRecordsetPtr("SctTopLevel", versionTag, versionNode, "FASERDD");
+  msg(MSG::DEBUG) << "Table SctTopLevel Fetched" << endmsg;
+
+  // Weight Table
+  m_weightTable = rdbSvc->getRecordsetPtr("SctWeights", versionTag, versionNode, "FASERDD");
+  msg(MSG::DEBUG) << "Table SctWeights Fetched" << endmsg;
+
+  // // Extra Scaling Table. This is used for extra material studies. For nominal material the table should be empty.
+  // // NB this is at Tracker level node.
+  m_scalingTable = rdbSvc->getRecordsetPtr("SctMatScaling", trackerVersionKey.tag(), trackerVersionKey.node(), "FASERDD");
+  msg(MSG::DEBUG) << "Table SctMatScaling Fetched" << endmsg;
+
+  // // Default conditions
+  // m_conditions = rdbSvc->getRecordsetPtr("SctConditions", versionTag, versionNode, "FASERDD");
+  // msg(MSG::DEBUG) << "Table SctConditions Fetched" << endmsg;
+
+  //
+  // SCT Barrel 
+  //
+  m_brlSensor = rdbSvc->getRecordsetPtr("SctBrlSensor", versionTag, versionNode, "FASERDD");
+  msg(MSG::DEBUG) << "Table SctBrlSensor Fetched" << endmsg;
+
+  m_brlModule = rdbSvc->getRecordsetPtr("SctBrlModule", versionTag, versionNode, "FASERDD");
+  msg(MSG::DEBUG) << "Table SctBrlModule Fetched" << endmsg;
+
+  m_brlGeneral = rdbSvc->getRecordsetPtr("SctFaserGeneral", versionTag, versionNode, "FASERDD");
+  msg(MSG::DEBUG) << "Table SctBrlGeneral Fetched" << endmsg;
+
+}
+
+const SCT_GeoModelAthenaComps* SCT_DataBase::athenaComps() const { return m_athenaComps; }
+
+IRDBRecordset_ptr SCT_DataBase::weightTable() const {return m_weightTable;}
+
+IRDBRecordset_ptr SCT_DataBase::scalingTable() const {return m_scalingTable;}
+
+//const IRDBRecord* SCT_DataBase::atls() const {return *m_atls)[0];}  
+IRDBRecordset_ptr SCT_DataBase::topLevelTable() const {return m_topLevel;}
+
+// IRDBRecordset_ptr SCT_DataBase::conditionsTable() const {return m_conditions;}
+// const IRDBRecord* SCT_DataBase::conditions() const {return (*m_conditions)[0];}
+
+const IRDBRecord* SCT_DataBase::brlSensor() const {return (*m_brlSensor)[0];}
+const IRDBRecord* SCT_DataBase::brlModule() const {return (*m_brlModule)[0];}
+
+const IRDBRecord* SCT_DataBase::brlGeneral() const {return (*m_brlGeneral)[0];}
+
+const std::string & SCT_DataBase::versionTag() const {
+  return m_sctVersionTag;
+}
+
+MsgStream&  SCT_DataBase::msg (MSG::Level lvl) const 
+{ 
+  return m_athenaComps->msg(lvl); 
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DetectorFactory.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DetectorFactory.cxx
new file mode 100644
index 000000000..a61998839
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_DetectorFactory.cxx
@@ -0,0 +1,188 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// SCT_DetectorFactory: This is the top level node 
+//
+
+
+#include "FaserSCT_GeoModel/SCT_DetectorFactory.h" 
+
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h" 
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "TrackerReadoutGeometry/Version.h" 
+#include "TrackerReadoutGeometry/SiCommonItems.h" 
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "TrackerReadoutGeometry/SCT_ModuleSideDesign.h" 
+
+#include "FaserSCT_GeoModel/SCT_Barrel.h"
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h"
+
+//
+// GeoModel include files:
+//
+#include "GeoModelKernel/GeoMaterial.h"  
+#include "GeoModelKernel/GeoTube.h"  
+#include "GeoModelKernel/GeoLogVol.h"  
+#include "GeoModelKernel/GeoNameTag.h"  
+#include "GeoModelKernel/GeoIdentifierTag.h"  
+#include "GeoModelKernel/GeoPhysVol.h"  
+#include "GeoModelKernel/GeoVPhysVol.h"  
+#include "GeoModelKernel/GeoTransform.h"  
+#include "GeoModelKernel/GeoAlignableTransform.h"  
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelInterfaces/StoredMaterialManager.h"
+#include "GeoModelInterfaces/IGeoDbTagSvc.h"
+#include "GeoModelFaserUtilities/DecodeFaserVersionKey.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "AthenaPoolUtilities/CondAttrListCollection.h"
+#include "DetDescrConditions/AlignableTransformContainer.h"
+#
+#include "StoreGate/StoreGateSvc.h"
+#include "GaudiKernel/ISvcLocator.h"
+
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+
+
+#include <iostream> 
+#include <iomanip> 
+#include <string>
+ 
+using TrackerDD::SCT_DetectorManager; 
+using TrackerDD::SiCommonItems; 
+
+SCT_DetectorFactory::SCT_DetectorFactory(const SCT_GeoModelAthenaComps * athenaComps,
+					 const SCT_Options & options)
+  : TrackerDD::DetectorFactoryBase(athenaComps),
+    m_useDynamicAlignFolders(false)
+{ 
+  
+  // Create the detector manager
+  m_detectorManager = new SCT_DetectorManager(detStore());
+
+  // Create the database
+  m_db = new SCT_DataBase{athenaComps};
+
+  // Create the material manager
+  m_materials = new SCT_MaterialManager{m_db};
+
+  // Create the geometry manager.
+  m_geometryManager = new SCT_GeometryManager{m_db};
+  m_geometryManager->setOptions(options);
+
+  m_useDynamicAlignFolders = options.dynamicAlignFolders();
+ 
+  // Set Version information
+  // Get the geometry tag
+  DecodeFaserVersionKey versionKey(geoDbTagSvc(),"SCT");
+  IRDBRecordset_ptr switchSet
+    = rdbAccessSvc()->getRecordsetPtr("SctSwitches", versionKey.tag(), versionKey.node(), "FASERDD");
+  const IRDBRecord    *switches   = (*switchSet)[0];
+  
+  std::string layout = "Final";
+  std::string description;
+  if (!switches->isFieldNull("LAYOUT")) {
+    layout = switches->getString("LAYOUT");
+  }
+  if (!switches->isFieldNull("DESCRIPTION")) {
+    description = switches->getString("DESCRIPTION");
+  }
+
+  std::string versionTag = rdbAccessSvc()->getChildTag("SCT", versionKey.tag(), versionKey.node(),"FASERDD");
+  std::string versionName = switches->getString("VERSIONNAME");
+  int versionMajorNumber = 3;
+  int versionMinorNumber = 6;
+  int versionPatchNumber = 0;
+  TrackerDD::Version version(versionTag,
+                           versionName, 
+                           layout, 
+                           description, 
+                           versionMajorNumber,
+                           versionMinorNumber,
+                           versionPatchNumber);
+  m_detectorManager->setVersion(version);
+
+} 
+ 
+ 
+SCT_DetectorFactory::~SCT_DetectorFactory() 
+{ 
+  // NB the detector manager (m_detectorManager)is stored in the detector store by the
+  // Tool and so we don't delete it.
+  delete m_db;
+  delete m_materials;
+  delete m_geometryManager;
+} 
+
+void SCT_DetectorFactory::create(GeoPhysVol *world) 
+{ 
+
+  msg(MSG::INFO) << "Building SCT Detector." << endmsg;
+  msg(MSG::INFO) << " " << m_detectorManager->getVersion().fullDescription() << endmsg;
+
+  // Change precision.
+  int oldPrecision = std::cout.precision(6);
+
+  // The tree tops get added to world. We name it "tracker" though.
+  GeoPhysVol *tracker = world;
+
+  msg(MSG::ALWAYS) << "Retrieving general parameters" << endmsg;
+  const SCT_GeneralParameters * sctGeneral = m_geometryManager->generalParameters();
+
+  msg(MSG::ALWAYS) << "Retrieving part transform for SCT" << endmsg;
+  GeoTrf::Transform3D sctTransform = sctGeneral->partTransform("SCT");
+  msg(MSG::ALWAYS) << "Instantiating station object" << endmsg;
+  SCT_Barrel station("Station", m_detectorManager, m_geometryManager, m_materials);
+
+  msg(MSG::ALWAYS) << "Beginning loop over stations" << endmsg;
+  std::vector<std::string> partNames {"StationA", "StationB", "StationC"};
+  for (int iStation = -1; iStation <= 1; iStation++)
+  {
+    if (sctGeneral->partPresent(partNames[iStation+1]))
+    {
+      msg(MSG::ALWAYS) << "Found part " << partNames[iStation+1] << endmsg;
+      m_detectorManager->numerology().addBarrel(iStation);
+      SCT_Identifier id{m_geometryManager->athenaComps()->getIdHelper()};
+      id.setStation(iStation);
+      tracker->add(new GeoNameTag("SCT"));
+      tracker->add(new GeoIdentifierTag(iStation));
+      GeoAlignableTransform* stationTransform = new GeoAlignableTransform(sctTransform * sctGeneral->partTransform(partNames[iStation+1]));
+      tracker->add(stationTransform);
+      GeoVPhysVol* stationPhys = station.build(id);
+      tracker->add(stationPhys);
+      m_detectorManager->addTreeTop(stationPhys);
+      m_detectorManager->addAlignableTransform(3, id.getWaferId(), stationTransform, stationPhys);
+    }
+  }
+
+  // Set the neighbours
+  m_detectorManager->initNeighbours();
+
+  // Set maximum number of strips in numerology.
+  for (int iDesign = 0;  iDesign <  m_detectorManager->numDesigns(); iDesign++) {
+    m_detectorManager->numerology().setMaxNumPhiCells(m_detectorManager->getSCT_Design(iDesign)->cells());
+  }
+
+  // Return precision to its original value
+  std::cout.precision(oldPrecision);
+
+} 
+ 
+
+const SCT_DetectorManager * SCT_DetectorFactory::getDetectorManager() const
+{
+  return m_detectorManager;
+}
+ 
+
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeneralParameters.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeneralParameters.cxx
new file mode 100644
index 000000000..b20eebbca
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeneralParameters.cxx
@@ -0,0 +1,88 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "GaudiKernel/SystemOfUnits.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "TrackerGeoModelUtils/TopLevelPlacements.h"
+
+const double SCT_SAFETY = 0.01 * Gaudi::Units::mm; // Used in some places to make envelopes slightly larger to ensure
+                                     // no overlaps due to rounding errors.
+
+
+SCT_GeneralParameters::SCT_GeneralParameters(SCT_DataBase* rdb)
+{
+  m_rdb = rdb;
+  m_placements = new TopLevelPlacements(m_rdb->topLevelTable());
+}
+
+
+SCT_GeneralParameters::~SCT_GeneralParameters()
+{
+  delete m_placements;
+}
+
+
+const GeoTrf::Transform3D & 
+SCT_GeneralParameters::partTransform(const std::string & partName) const 
+{
+  return m_placements->transform(partName);
+}
+
+
+bool 
+SCT_GeneralParameters::partPresent(const std::string & partName) const
+{
+  return m_placements->present(partName);
+}
+
+
+
+//
+// General
+//
+double 
+SCT_GeneralParameters::safety() const
+{
+  return SCT_SAFETY;
+}
+
+// Default Conditions. Values should be come form conditions data base. These values provide
+// default vlaues if nothing from the conditions database is provided.
+
+
+// double 
+// SCT_GeneralParameters::temperature() const
+// {
+//   if (m_rdb->conditionsTable()->size() == 0) {
+//     return 266.15 * Gaudi::Units::kelvin; // -7 C
+//   }
+//   return (m_rdb->conditions()->getDouble("TEMPERATURE") + 273.15) * Gaudi::Units::kelvin;
+// }
+
+
+// double 
+// SCT_GeneralParameters::biasVoltage() const
+// {
+//   if (m_rdb->conditionsTable()->size() == 0) {
+//     return 100 * Gaudi::Units::volt;
+//   }
+//   return m_rdb->conditions()->getDouble("BIASVOLT") * Gaudi::Units::volt;
+// }
+
+// double 
+// SCT_GeneralParameters::depletionVoltage() const
+// {
+//   if (m_rdb->conditionsTable()->size() == 0) {
+//     return 20 * Gaudi::Units::volt;
+//   }
+//   return m_rdb->conditions()->getDouble("DEPLETIONVOLT") * Gaudi::Units::volt;
+// }
+
+
+
+  
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeoModelAthenaComps.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeoModelAthenaComps.cxx
new file mode 100644
index 000000000..e03d2f8e0
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeoModelAthenaComps.cxx
@@ -0,0 +1,23 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h"
+
+SCT_GeoModelAthenaComps::SCT_GeoModelAthenaComps()
+  : TrackerDD::AthenaComps("SCT_GeoModel"),
+    m_idHelper(0)
+{}
+ 
+void 
+SCT_GeoModelAthenaComps::setIdHelper(const FaserSCT_ID* idHelper)
+{
+  m_idHelper = idHelper;
+}
+
+const FaserSCT_ID* 
+SCT_GeoModelAthenaComps::getIdHelper() const
+{
+  return m_idHelper;
+}
+
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeometryManager.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeometryManager.cxx
new file mode 100644
index 000000000..1a3852a64
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_GeometryManager.cxx
@@ -0,0 +1,112 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+
+#include "TrackerGeoModelUtils/DistortedMaterialManager.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "TrackerReadoutGeometry/SiCommonItems.h"
+#include "FaserSCT_GeoModel/SCT_BarrelParameters.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeoModelAthenaComps.h"
+
+SCT_GeometryManager::SCT_GeometryManager(SCT_DataBase* rdb)
+  : m_athenaComps{rdb->athenaComps()},
+    m_rdb{rdb}
+{
+  // This class uses reference counting. Should not be delete'd in destructor.
+  m_commonItems = new TrackerDD::SiCommonItems(m_athenaComps->getIdHelper());
+
+  m_barrelParameters = std::make_unique<SCT_BarrelParameters>(m_rdb);
+  m_barrelModuleParameters = std::make_unique<SCT_BarrelModuleParameters>(m_rdb);
+  m_generalParameters = std::make_unique<SCT_GeneralParameters>(m_rdb);
+  m_distortedMatManager = std::make_unique<TrackerDD::DistortedMaterialManager>();
+}
+
+SCT_GeometryManager::~SCT_GeometryManager()
+{
+}
+
+//
+// Access to run time options.
+//
+const SCT_Options & 
+SCT_GeometryManager::options() const
+{
+  return m_options;
+}
+
+void
+SCT_GeometryManager::setOptions(const SCT_Options & options)
+{
+  m_options = options;
+}
+
+const SCT_GeoModelAthenaComps *
+SCT_GeometryManager::athenaComps() const 
+{
+  return m_athenaComps;
+}
+  
+//
+// SiCommonItems which are passed to SiDetectorElements.
+//
+
+const TrackerDD::SiCommonItems *
+SCT_GeometryManager::commonItems() const
+{
+  return m_commonItems;
+}
+
+const SCT_BarrelParameters * 
+SCT_GeometryManager::barrelParameters() const
+{    
+  return m_barrelParameters.get();
+}
+
+const SCT_BarrelModuleParameters * 
+SCT_GeometryManager::barrelModuleParameters() const
+{    
+  return m_barrelModuleParameters.get();
+}
+
+const SCT_GeneralParameters * 
+SCT_GeometryManager::generalParameters() const
+{    
+  return m_generalParameters.get();
+}
+
+const TrackerDD::DistortedMaterialManager * 
+SCT_GeometryManager::distortedMatManager() const
+{    
+  return m_distortedMatManager.get();
+}
+
+SCT_GeometryManager&
+SCT_GeometryManager::operator=(const SCT_GeometryManager& right) {
+  if (this != &right) {
+    m_options = right.m_options;
+    m_athenaComps = right.m_athenaComps;
+    m_commonItems = right.m_commonItems;
+    m_rdb = right.m_rdb;
+    m_barrelParameters.reset(new SCT_BarrelParameters(m_rdb));
+    m_barrelModuleParameters.reset(new SCT_BarrelModuleParameters(m_rdb));
+    m_generalParameters.reset(new SCT_GeneralParameters(m_rdb));
+    m_distortedMatManager.reset(new TrackerDD::DistortedMaterialManager());
+  }
+  return *this;
+}
+
+SCT_GeometryManager::SCT_GeometryManager(const SCT_GeometryManager& right) {
+  m_options = right.m_options;
+  m_athenaComps = right.m_athenaComps;
+  m_commonItems = right.m_commonItems;
+  m_rdb = right.m_rdb;
+  m_barrelParameters.reset(new SCT_BarrelParameters(m_rdb));
+  m_barrelModuleParameters.reset(new SCT_BarrelModuleParameters(m_rdb));
+  m_generalParameters.reset(new SCT_GeneralParameters(m_rdb));
+  m_distortedMatManager.reset(new TrackerDD::DistortedMaterialManager());
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Hybrid.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Hybrid.cxx
new file mode 100644
index 000000000..d8f78c0a6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Hybrid.cxx
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Hybrid.h"
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/Units.h"
+
+SCT_Hybrid::SCT_Hybrid(const std::string & name,
+                       TrackerDD::SCT_DetectorManager* detectorManager,
+                       const SCT_GeometryManager* geometryManage,
+                       SCT_MaterialManager* materials)
+  : SCT_SharedComponentFactory(name, detectorManager, geometryManage, materials)
+{
+  getParameters();
+  m_physVolume = build();
+}
+
+void
+SCT_Hybrid::getParameters() 
+{
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+  m_material  = m_materials->getMaterial(parameters->hybridMaterial());
+  m_thickness = parameters->hybridThickness();
+  m_length    = parameters->hybridLength();
+  m_width     = parameters->hybridWidth();
+}
+
+GeoVPhysVol * 
+SCT_Hybrid::build()
+{
+  // Build the . Just a simple box.
+  const GeoBox * simpleHybridShape = new GeoBox(0.5*m_thickness,
+                                                0.5*m_width,
+                                                0.5*m_length);
+  const GeoLogVol * simpleHybridLog = 
+    new GeoLogVol(getName(), simpleHybridShape, m_material);
+  GeoPhysVol * simpleHybrid = new GeoPhysVol(simpleHybridLog);
+
+  return simpleHybrid;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Identifier.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Identifier.cxx
new file mode 100644
index 000000000..bfe91e182
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Identifier.cxx
@@ -0,0 +1,26 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "Identifier/Identifier.h"
+
+#include <cassert>
+#include <iostream>
+
+Identifier 
+SCT_Identifier::getWaferId() 
+{
+  assert (m_idHelper);
+  return m_idHelper->wafer_id(m_station, m_layer, m_phiModule, m_etaModule, m_side);
+}
+
+void SCT_Identifier::print()
+{
+  std::cout << "2/1/" << m_station << "/" 
+            << m_layer << "/" 
+            << m_phiModule << "/"
+            << m_etaModule << "/"
+            << m_side << std::endl;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_InnerSide.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_InnerSide.cxx
new file mode 100644
index 000000000..4905997d4
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_InnerSide.cxx
@@ -0,0 +1,199 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// 13rd Mar 2005 D.Naito
+// 28th Mar 2005 S.Mima
+// Wed 15th Jun 2005 D.Naito modified.
+//
+#include "FaserSCT_GeoModel/SCT_InnerSide.h"
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+
+//  module parts.
+#include "FaserSCT_GeoModel/SCT_Sensor.h"
+#include "FaserSCT_GeoModel/SCT_Hybrid.h"
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <cmath>
+
+SCT_InnerSide::SCT_InnerSide(const std::string & name,
+                             TrackerDD::SCT_DetectorManager* detectorManager,
+                             const SCT_GeometryManager* geometryManager,
+                             SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials),
+    m_hybrid(0),
+    m_sensor(0)
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+
+SCT_InnerSide::~SCT_InnerSide()
+{
+  delete m_hybrid;
+  delete m_sensor;
+  delete m_env1RefPointVector;
+  delete m_env2RefPointVector;
+  if (m_hybridPos) m_hybridPos->unref();
+  if (m_sensorPos) m_sensorPos->unref();
+}
+
+
+void
+SCT_InnerSide::getParameters()
+{
+  const SCT_BarrelModuleParameters       * parameters = m_geometryManager->barrelModuleParameters();
+  const SCT_GeneralParameters     * generalParameters = m_geometryManager->generalParameters();
+
+  m_safety           = generalParameters->safety();
+  m_hybridOffsetZ    = parameters->hybridOffsetZ();
+  m_hybridOffsetX    = parameters->hybridOffsetX();
+}
+
+
+const GeoLogVol * 
+SCT_InnerSide::preBuild()
+{
+  // Create child components
+  m_sensor             = new SCT_Sensor("BRLSensor", m_detectorManager, m_geometryManager, m_materials);
+  m_hybrid             = new SCT_Hybrid("Hybrid", m_detectorManager, m_geometryManager, m_materials);
+
+  //
+  // Define constants for convenience.
+  // t_XXX: thickness of XXX.
+  // w_XXX: width of XXX.
+  // l_XXX: length of XXX.
+  //
+  const double t_hybrid = m_hybrid->thickness();
+  const double w_hybrid = m_hybrid->width();
+  const double l_hybrid = m_hybrid->length();
+
+  const double t_sensor = m_sensor->thickness();
+  const double w_sensor = m_sensor->width();
+  const double l_sensor = m_sensor->length();
+
+  //   
+  // Calculate a few things.
+  //
+  const double sensorPosX = 0.0;
+  const double sensorPosY = 0.0;
+  const double sensorPosZ = 0.0;
+
+  const double hybridPosX = m_hybridOffsetX;
+  const double hybridPosY = 0.0;
+  const double hybridPosZ = m_hybridOffsetZ;
+
+  //
+  // ise : InnerSideEnvelope
+  // Reference: sct_module_geometry.ps
+  //
+  // 28th Mar S.Mima modified
+  // Wed 15th Jun 2005 D.Naito modified.
+  const double w_ise1 = w_sensor + m_safety;
+  const double t_ise1 = t_sensor + m_safety;
+  const double l_ise1 = l_sensor + m_safety;
+
+  const double t_ise2 = t_hybrid + m_safety;
+  const double w_ise2 = w_hybrid + m_safety;
+  const double l_ise2 = l_hybrid + m_safety;
+
+  const double ise2PosX = hybridPosX;
+  const double ise2PosY = hybridPosY;
+  const double ise2PosZ = hybridPosZ;
+
+  // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (00)*********************************
+  // *** -->>                                      (00)*********************************
+  m_env1RefPointVector = new GeoTrf::Vector3D(0.0, 0.0, 0.0);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-ise2PosX, -ise2PosY, -ise2PosZ);
+  // *** End of modified lines. ------------------ (00)*********************************
+
+  m_hybridPos             = new GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
+  m_hybridPos->ref();
+
+  // The depth axis goes from the backside to the implant side 
+  // and so point away from the module center.
+  // The two sensor+hybrid combinations are built in a similar way.
+  //
+  //                      ^ 
+  //        ---   hybrid  | 
+  //      ------- sensor  | x-axis
+  //
+  // Shown is the outer side. The inner side is the same but with a rotation of 180 deg around the z-axis.       
+  // 
+  //Gaudi::Units::HepRotation rotSensor;
+  //rotSensor.rotateZ(180*Gaudi::Units::deg);
+  //m_outerSidePos = new GeoTrf::Transform3D(rotOuter, GeoTrf::Vector3D(0.5 * (m_sensorGap + sectThickness), 0., 0.));
+  //m_sensorPos = new GeoTransform(GeoTrf::Transform3D(rotSensor, GeoTrf::Vector3D(sensorPosX, sensorPosY, sensorPosZ)));
+  m_sensorPos             = new GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
+  m_sensorPos->ref();
+
+  //
+  // Make an envelope for the whole module.
+  //
+  const GeoBox * ise1Shape = new GeoBox(0.5 * t_ise1,
+                                        0.5 * w_ise1,
+                                        0.5 * l_ise1);
+  const GeoBox * ise2Shape = new GeoBox(0.5 * t_ise2,
+                                        0.5 * w_ise2,
+                                        0.5 * l_ise2);
+
+  const GeoShape & InnerSideEnvelopeShape = (*ise1Shape).
+    add(*ise2Shape << GeoTrf::Translate3D(ise2PosX, ise2PosY, ise2PosZ));
+
+  const GeoLogVol * InnerSideEnvelopeLog = new GeoLogVol("InnerSideEnvelope",
+                                                         &InnerSideEnvelopeShape,
+                                                         m_materials->gasMaterial());
+  // 28th Mar S.Mima modified
+  // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (00)*********************************
+  //m_thickness = 0.5*t_sensor + hybridPosX + 0.5*t_ise2;
+  // *** -->>                                      (00)*********************************
+  m_thickness = 0.5*t_ise1 + hybridPosX + 0.5*t_ise2;
+  // *** End of modified lines. ------------------ (00)*********************************
+  m_width     = w_ise1;
+  m_length    = l_ise1;
+
+  return InnerSideEnvelopeLog;
+}
+
+
+GeoVPhysVol * 
+SCT_InnerSide::build(SCT_Identifier id)
+{
+  GeoFullPhysVol * innerSide = new GeoFullPhysVol(m_logVolume);
+
+  //
+  // Build the innerSide
+  //
+  // Add Sensor
+  innerSide->add(new GeoIdentifierTag(1000));
+  innerSide->add(m_sensorPos);
+  innerSide->add(m_sensor->build(id));
+
+  // Add Hybrid
+  innerSide->add(m_hybridPos);
+  innerSide->add(m_hybrid->getVolume());
+
+  return innerSide;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Layer.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Layer.cxx
new file mode 100644
index 000000000..4e3811f20
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Layer.cxx
@@ -0,0 +1,146 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// CPW 17/8/06
+// Version using new model of services from A. Tricoli
+// 
+#include "FaserSCT_GeoModel/SCT_Layer.h"
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_Ski.h"
+#include "FaserSCT_GeoModel/SCT_Module.h"
+
+#include "TrackerGeoModelUtils/ExtraMaterial.h"
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoShapeSubtraction.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <sstream>
+#include <cmath>
+
+inline double sqr(double x) {return x * x;}
+
+SCT_Layer::SCT_Layer(const std::string & name,
+                     TrackerDD::SCT_DetectorManager* detectorManager,
+                     const SCT_GeometryManager* geometryManager,
+                     SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials)
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+SCT_Layer::~SCT_Layer()
+{
+}
+
+void
+SCT_Layer::getParameters()
+{
+  const SCT_BarrelParameters * parameters = m_geometryManager->barrelParameters();
+  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
+    
+  m_safety       = generalParameters->safety();
+  m_rowsPerLayer  = parameters->rowsPerLayer();
+
+}
+
+const GeoLogVol * 
+SCT_Layer::preBuild()
+{
+  std::cout << "Instantiating Ski" << std::endl;
+  m_ski = new SCT_Ski("Row", m_detectorManager, m_geometryManager, m_materials);
+  //
+  // Active Layer Envelope extent
+  // Envelope for the active part (ie containing all the skis for the layer)
+  //
+  double activeWidth, activeHeight, activeThickness;
+
+  // Returns the outer dimensions of the active envelope
+  activeEnvelopeExtent(activeWidth, activeHeight, activeThickness);
+
+  // Add some safety
+  activeWidth  += m_safety;
+  activeHeight += m_safety;
+  activeThickness += m_safety;
+
+  m_activeWidth = activeWidth;
+  m_activeHeight = activeHeight;
+  m_activeThickness = activeThickness;
+  //
+  // Overall Layer Envelope extent
+  //
+  // Same as active dimensions, since there is no support material yet
+  m_width = m_activeWidth;
+  m_height = m_activeHeight;
+  m_thickness = m_activeThickness;
+  //
+  // Make envelope for layer
+  //
+  const GeoBox* layerEnvelopeBox = new GeoBox(0.5 * m_width, 0.5 * m_height, 0.5 * m_thickness);
+  GeoLogVol* logVolume = new GeoLogVol(getName(), layerEnvelopeBox, m_materials->gasMaterial());
+
+  // Check for overlap.
+
+  return logVolume;
+}
+
+GeoVPhysVol * 
+SCT_Layer::build(SCT_Identifier id)
+{
+  // We make this a fullPhysVol
+  GeoFullPhysVol * layer = new GeoFullPhysVol(m_logVolume);
+
+  double activeHeight = m_height - m_safety/2;
+  double rowHeight = m_ski->width();
+  for (int iPhi = 0; iPhi < m_rowsPerLayer; iPhi++)
+  {
+    layer->add(new GeoNameTag("Row#"+intToString(iPhi)));
+    layer->add(new GeoIdentifierTag(iPhi)); 
+    id.setPhiModule(iPhi); 
+    GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::Translate3D(0.0, 
+                                                                                     (rowHeight - activeHeight)/2 + iPhi * rowHeight,
+                                                                                     0.0 ) *
+                                                                 GeoTrf::RotateY3D(90*Gaudi::Units::deg));
+    layer->add(transform);
+    GeoVPhysVol * skiPV = m_ski->build(id);
+    layer->add(skiPV);
+    // Store alignable transform
+    m_detectorManager->addAlignableTransform(2, id.getWaferId(), transform, skiPV);    
+  }
+
+  // Extra Material
+  TrackerDD::ExtraMaterial xMat(m_geometryManager->distortedMatManager());
+  xMat.add(layer, "SCTLayer");
+
+  return layer;
+}
+
+void
+SCT_Layer::activeEnvelopeExtent(double & dx, double & dy, double & dz)
+{
+  // Do this in a very simple-minded and unrealistic way to start
+  double layerThickness = m_ski->thickness() + m_safety;              // this is the x-coordinate of the module/ski and the z-coordinate of the layer
+  double layerWidth = m_ski->length() + m_safety;                     // this is the z-coordinate (eta) of the module/ski, and the x-coordinate of the layer
+  double layerHeight = m_rowsPerLayer * m_ski->width() + m_safety; // this is the y-coordinate (phi) of the module/ski, and the y-coordinate of the layer
+
+  dx = layerWidth;
+  dy = layerHeight;
+  dz = layerThickness;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_MaterialManager.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_MaterialManager.cxx
new file mode 100644
index 000000000..6efce9ce9
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_MaterialManager.cxx
@@ -0,0 +1,83 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoElement.h"
+#include "FaserSCT_GeoModel/SCT_DataBase.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "StoreGate/StoreGateSvc.h"
+#include "GaudiKernel/Bootstrap.h"
+#include "GaudiKernel/ISvcLocator.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <iostream>
+
+// Constructor 
+SCT_MaterialManager::SCT_MaterialManager(SCT_DataBase* db)
+{
+  // Get my material manager.
+  ISvcLocator* svcLocator = Gaudi::svcLocator(); // from Bootstrap
+  StoreGateSvc* detStore;
+  StatusCode sc = svcLocator->service("DetectorStore", detStore );
+  if (sc.isFailure()) {
+    std::cout << "Could not locate DetectorStore" << std::endl;
+    return;
+  }
+
+  m_materialManager = std::make_unique<TrackerMaterialManager>("SCT_MaterialManager", db->athenaComps());
+  m_materialManager->addWeightTable(db->weightTable(), "sct");
+  m_materialManager->addScalingTable(db->scalingTable());
+
+  loadMaterials();
+
+  m_gasMaterial = m_materialManager->getMaterial("std::Air");
+}
+
+// Add materials not yet in the database 
+void
+SCT_MaterialManager::loadMaterials()
+{
+}
+
+const GeoElement* 
+SCT_MaterialManager::getElement(const std::string & elementName) const
+{
+  return m_materialManager->getElement(elementName);
+}
+
+const GeoMaterial* 
+SCT_MaterialManager::getMaterial(const std::string & materialName) const
+{
+  return m_materialManager->getMaterial(materialName);
+}
+
+void
+SCT_MaterialManager::addMaterial(GeoMaterial* material)
+{
+  return m_materialManager->addMaterial(material);
+}
+
+const GeoMaterial* 
+SCT_MaterialManager::getMaterial(const std::string & originalMaterial, 
+                                 double density,  
+                                 const std::string & newName)
+{
+  
+  return m_materialManager->getMaterial(originalMaterial, density, newName);
+}
+
+const GeoMaterial *
+SCT_MaterialManager::getMaterialForVolume(const std::string & materialName, double volume)
+{
+  return m_materialManager->getMaterialForVolume(materialName, volume);
+}
+
+
+
+const GeoMaterial* 
+SCT_MaterialManager::gasMaterial() const
+{
+  return m_gasMaterial;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
new file mode 100644
index 000000000..5356dcbea
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Module.cxx
@@ -0,0 +1,375 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Module.h"
+
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+
+#include "FaserSCT_GeoModel/SCT_Sensor.h"
+#include "FaserSCT_GeoModel/SCT_Hybrid.h"
+#include "FaserSCT_GeoModel/SCT_Pigtail.h"
+#include "FaserSCT_GeoModel/SCT_InnerSide.h"
+#include "FaserSCT_GeoModel/SCT_OuterSide.h"
+#include "FaserSCT_GeoModel/SCT_BaseBoard.h"
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoVPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+// 8th Aug 2005 S.Mima modified.
+#include "GeoModelKernel/GeoShapeSubtraction.h"
+
+#include <cmath>
+
+SCT_Module::SCT_Module(const std::string & name,
+                       TrackerDD::SCT_DetectorManager* detectorManager,
+                       const SCT_GeometryManager* geometryManager,
+                       SCT_MaterialManager* materials)
+: SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials),
+    m_innerSide(0),
+    m_outerSide(0),
+    m_baseBoard(0)
+
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+
+SCT_Module::~SCT_Module()
+{
+  // Clean up
+  delete m_baseBoardPos; // 6th Apr 2005 S.Mima modified.
+  delete m_innerSidePos;
+  delete m_outerSidePos;
+
+  delete m_innerSide;
+  delete m_outerSide;
+  delete m_baseBoard;
+
+  delete m_env1RefPointVector;
+  delete m_env2RefPointVector;
+}
+
+
+void
+SCT_Module::getParameters()
+{
+  const SCT_BarrelModuleParameters       * parameters = m_geometryManager->barrelModuleParameters();
+  const SCT_GeneralParameters     * generalParameters = m_geometryManager->generalParameters();
+
+  m_safety       = generalParameters->safety();
+
+  m_sensorGap    = parameters->moduleSensorToSensorGap();
+  
+  m_stereoAngle = parameters->moduleStereoAngle();
+  int      sign = parameters->moduleStereoUpperSign();
+  m_upperSide   = parameters->moduleUpperSideNumber();
+  m_stereoInner = -0.5*sign*m_stereoAngle;
+  m_stereoOuter =  0.5*sign*m_stereoAngle;
+
+  m_baseBoardOffsetY = parameters->baseBoardOffsetY();
+  m_baseBoardOffsetZ = parameters->baseBoardOffsetZ();
+}
+
+
+const GeoLogVol * 
+SCT_Module::preBuild()
+{
+  // Create child components
+  m_outerSide = new SCT_OuterSide("OuterSide", m_detectorManager, m_geometryManager, m_materials);
+  m_baseBoard = new SCT_BaseBoard("BaseBoard", m_detectorManager, m_geometryManager, m_materials);
+  m_innerSide = new SCT_InnerSide("InnerSide", m_detectorManager, m_geometryManager, m_materials);
+
+  //
+  // We have 2 envelopes.
+  // 1. It contains two sensors and baseBoard.
+  // 2. It contains hybrid and pigtail.
+  //
+  // See "doc/cornerName.ps".
+  //
+
+  // We need to take into account the safety incorporated in the inner and outer side 
+  // envelopes. 
+  double sensorWidth   =  m_innerSide->sensor()->width() + m_safety;
+  double sensorLength  =  m_innerSide->sensor()->length() + m_safety;
+  double innerSideHybridWidth   =  m_innerSide->hybrid()->width() + m_safety;
+  double innerSideHybridLength  =  m_innerSide->hybrid()->length() + m_safety;
+  double outerSideHybridWidth   =  m_outerSide->hybrid()->width() + m_safety;
+  double outerSideHybridLength  =  m_outerSide->hybrid()->length() + m_safety;
+  double baseBoardWidth         =  m_baseBoard->width() + m_safety;
+  double baseBoardLength        =  m_baseBoard->length() + m_safety;
+  double outerSidePigtailLength =  m_outerSide->pigtail()->length() + m_safety;
+
+
+  // Define constants for convenience.
+  // for corner of outer side sensor.
+  GeoTrf::Vector3D a(0.0, 0.5 * sensorWidth, 0.5 * sensorLength);
+  GeoTrf::Vector3D b(0.0, -0.5 * sensorWidth, a.z());
+  GeoTrf::Vector3D c(0.0, b.y(),-0.5 * sensorLength);
+  GeoTrf::Vector3D d(0.0, a.y(), c.z());
+
+  // for corner of inner side sensor.
+  GeoTrf::Vector3D e(0.0, a.y(), a.z());
+  GeoTrf::Vector3D f(0.0, b.y(), b.z());
+  GeoTrf::Vector3D g(0.0, c.y(), c.z());
+  GeoTrf::Vector3D h(0.0, d.y(), d.z());
+
+  // for corner of base board.
+  GeoTrf::Vector3D u(0.0,
+                      m_baseBoardOffsetY + 0.5*baseBoardWidth,
+                      m_baseBoardOffsetZ + 0.5*baseBoardLength);
+  GeoTrf::Vector3D v(0.0, m_baseBoardOffsetY - 0.5*baseBoardWidth, u.z());
+  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.
+  GeoTrf::Vector3D i(0.0, 
+                      0.5*outerSideHybridWidth,
+                      m_outerSide->hybridOffsetZ() + 0.5*outerSidePigtailLength);
+  GeoTrf::Vector3D l(0.0,
+                      -0.5*outerSideHybridWidth - m_outerSide->pigtail()->width(), i.z());
+  GeoTrf::Vector3D m(0.0, l.y(),
+                      m_outerSide->hybridOffsetZ() - 0.5*outerSidePigtailLength);
+  GeoTrf::Vector3D p(0.0, i.y(),
+                      m.z());
+
+
+
+  // for corner of hybrid and interConnect of inner side.
+  GeoTrf::Vector3D q(0.0, 0.5*outerSideHybridWidth, m_outerSide->hybridOffsetZ() + 0.5*outerSideHybridLength );
+  GeoTrf::Vector3D r(0.0, -0.5*innerSideHybridWidth, q.z());
+  GeoTrf::Vector3D s(0.0, r.y(), m_innerSide->hybridOffsetZ() - 0.5*innerSideHybridLength);
+  GeoTrf::Vector3D t(0.0, q.y(), s.z());
+
+  // All points turn +-20 mGaudi::Units::rad around physical center of module.
+  a = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*a;
+  b = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*b;
+  c = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*c;
+  d = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*d;
+
+  e = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*e;
+  f = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*f;
+  g = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*g;
+  h = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*h;
+
+  i = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*i;
+  //k.rotateX(m_stereoOuter/Gaudi::Units::radian);
+  l = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*l;
+  m = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*m;
+  //n.rotateX(m_stereoOuter/Gaudi::Units::radian);
+  p = GeoTrf::RotateX3D(m_stereoOuter/Gaudi::Units::radian)*p;
+
+  q = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*q;
+  r = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*r;
+  s = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*s;
+  t = GeoTrf::RotateX3D(m_stereoInner/Gaudi::Units::radian)*t;
+
+  // Calculate demension of envelope1.
+  const double z_ab = std::max(a.z(), b.z());
+  const double z_ef = std::max(e.z(), f.z());
+  const double z_cd = std::min(c.z(), d.z());
+  const double z_gh = std::min(g.z(), h.z());
+
+  const double y_ad = std::max(a.y(), d.y());
+  const double y_eh = std::max(e.y(), h.y());
+  const double y_bc = std::min(b.y(), c.y());
+  const double y_fg = std::min(f.y(), g.y());
+
+  const double zmaxEnv1 = std::max(z_ab, z_ef);
+  const double zminEnv1 = std::min(z_cd, z_gh);
+
+  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());
+
+  // some temporary value.
+  const double thicknessEnv1 = m_sensorGap + 2.0*m_outerSide->sensor()->thickness();
+  const double lengthEnv1 = zmaxEnv1 - zminEnv1;
+  const double widthEnv1  = ymaxEnv1 - yminEnv1;
+
+  // Center of evnelope1.
+  const double xCenterEnv1 = 0.0;
+  const double yCenterEnv1 = yminEnv1 + 0.5*widthEnv1;
+  const double zCenterEnv1 = zmaxEnv1 - 0.5*lengthEnv1;
+
+  m_env1RefPointVector = new GeoTrf::Vector3D(-xCenterEnv1, -yCenterEnv1, -zCenterEnv1);
+
+  // Calculate demension of envelope2.
+  const double z_ikl = std::max(i.z(), l.z());
+  const double z_qr = std::max(q.z(), r.z());
+  const double z_mnp = std::min(m.z(), p.z());
+  const double z_st = std::min(s.z(), t.z());
+
+  const double y_ip = std::max(i.y(), p.y());
+  const double y_qt = std::max(q.y(), t.y());
+  const double y_lm = std::min(l.y(), m.y());
+  const double y_rs = std::min(r.y(), s.y());
+
+  const double zmaxEnv2 = std::max(z_ikl, z_qr);
+  const double zminEnv2 = std::min(z_mnp, z_st);
+
+  const double ymaxEnv2 = std::max(y_ip, y_qt);
+  const double yminEnv2 = std::min(y_lm, y_rs);
+
+  const double thicknessEnv2 = 2.0*(m_outerSide->hybridOffsetX() + 
+                                    0.5*m_innerSide->sensor()->thickness() + 
+                                    0.5*m_sensorGap + 
+                                    0.5*m_outerSide->hybrid()->thickness());
+  const double lengthEnv2 = zmaxEnv2 - zminEnv2;
+  const double widthEnv2  = ymaxEnv2 - yminEnv2;
+
+  // Center of envelope2.
+  const double xCenterEnv2 = 0.0;
+  const double yCenterEnv2 = ymaxEnv2 - 0.5*widthEnv2;
+  const double zCenterEnv2 = zmaxEnv2 - 0.5*lengthEnv2;
+
+  m_env2RefPointVector = new GeoTrf::Vector3D(-xCenterEnv2, -yCenterEnv2, -zCenterEnv2);
+
+  // 8th Aug 2005 S.Mima modified.
+  // Calculate dimension of subbox 
+  const double xmaxSubBox = - 0.5*m_baseBoard->thickness() - m_safety;
+  const double xminSubBox = - 0.5*thicknessEnv2 - 2.0*m_safety;
+
+  const double ymaxSubBox = std::min(r.y(), s.y()) - m_safety;
+  const double yminSubBox = yminEnv2 - 2.0*m_safety;
+
+  const double zmaxSubBox = zmaxEnv1 + 2.0*m_safety;
+  const double zminSubBox = zminEnv1 - 2.0*m_safety; 
+  
+  const double thicknessSubBox = xmaxSubBox - xminSubBox;
+  const double widthSubBox = ymaxSubBox - yminSubBox;
+  const double lengthSubBox = zmaxSubBox - zminSubBox;
+
+  // Center of subbox.
+  const double xCenterSubBox = xmaxSubBox - 0.5*thicknessSubBox;
+  const double yCenterSubBox = ymaxSubBox - 0.5*widthSubBox;
+  const double zCenterSubBox = zmaxSubBox - 0.5*lengthSubBox;
+
+
+  m_env1Thickness = thicknessEnv1 + 2*m_safety;
+  m_env1Width     = widthEnv1     + 2*m_safety;
+  m_env1Length    = lengthEnv1    + 2*m_safety;
+
+  m_env2Thickness = thicknessEnv2 + 2*m_safety;
+  m_env2Width     = widthEnv2     + 2*m_safety;
+  m_env2Length    = lengthEnv2    + 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;
+  m_activeWidth = m_env2Width;
+  m_width       = m_env2Width;
+  m_length      = m_env1Length;
+
+  // Calculate a few things.
+  const double OSPosX =   0.5*m_sensorGap + 0.5*m_innerSide->sensor()->thickness();
+  const double ISPosX = -(0.5*m_sensorGap + 0.5*m_innerSide->sensor()->thickness());
+
+  //
+  // Make an envelope for the whole module.
+  //
+  // 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);
+
+  // 8th Aug 2005 S.Mima modified.
+  const GeoBox * subBox = new GeoBox(0.5*thicknessSubBox, 0.5*widthSubBox, 0.6*lengthSubBox);
+
+  // In the following, envelope1 and envelope2 are added and SUBBOX is pulled. 
+  const GeoShape & moduleEnvelope = (*envelope1 << GeoTrf::Translate3D(xCenterEnv1, yCenterEnv1, zCenterEnv1)).
+    add(*envelope2 << GeoTrf::Translate3D(xCenterEnv2, yCenterEnv2, zCenterEnv2)).
+    subtract(*subBox << GeoTrf::Translate3D(xCenterSubBox, yCenterSubBox, zCenterSubBox));
+
+  const GeoLogVol * moduleLog           = new GeoLogVol(getName(), &moduleEnvelope, m_materials->gasMaterial());
+  
+  //
+  // inner side
+  //
+  GeoTrf::Transform3D rotInner = GeoTrf::RotateX3D(m_stereoInner) * GeoTrf::RotateZ3D(180*Gaudi::Units::deg);
+  m_innerSidePos = new GeoTrf::Transform3D(GeoTrf::Transform3D(GeoTrf::Translation3D(ISPosX, 0.0, 0.0)*rotInner));
+
+  //
+  // outer side
+  //
+  GeoTrf::RotateX3D rotOuter(m_stereoOuter);
+  m_outerSidePos = new GeoTrf::Transform3D(GeoTrf::Transform3D(GeoTrf::Translation3D(OSPosX, 0.0, 0.0)*rotOuter));
+
+  //
+  // base board
+  // 6th Apr 2005 S.Mima modified.
+  //
+  const double baseBoardPosY = m_baseBoardOffsetY;
+  const double baseBoardPosZ = m_baseBoardOffsetZ;
+  m_baseBoardPos = new GeoTrf::Translate3D(0.0, baseBoardPosY, baseBoardPosZ);
+
+
+  return moduleLog;
+}
+
+
+GeoVPhysVol * 
+SCT_Module::build(SCT_Identifier id)
+{
+  GeoFullPhysVol * module = new GeoFullPhysVol(m_logVolume); 
+
+  // We make these fullPhysVols for the alignment code.
+  // We probably should make the transform for the sensor 
+  // alignable rather than the "side" to save making an extra full phys volume.
+
+  //
+  // Build the module
+  //
+  // Add Baseboard
+  GeoTransform * baseBoardTransform = new GeoTransform(*m_baseBoardPos);
+  module->add(baseBoardTransform);
+  module->add(m_baseBoard->getVolume());
+
+  // Add innerside
+  GeoAlignableTransform * innerTransform = new GeoAlignableTransform(*m_innerSidePos);
+  module->add(innerTransform);
+  int innerSideNumber = (m_upperSide) ? 0 : 1;
+  module->add(new GeoNameTag("Side#"+intToString(innerSideNumber))); // Identifier side=0
+  module->add(new GeoIdentifierTag(innerSideNumber));
+  id.setSide(innerSideNumber);
+  Identifier innerId = id.getWaferId();
+  GeoVPhysVol * innerSide = m_innerSide->build(id);
+  module->add(innerSide);  
+  // Store alignable transform
+  m_detectorManager->addAlignableTransform(0, innerId, innerTransform, innerSide);
+     
+  // Add outerside
+  GeoAlignableTransform * outerTransform = new GeoAlignableTransform(*m_outerSidePos);
+  module->add(outerTransform);
+  int outerSideNumber = m_upperSide;
+  module->add(new GeoNameTag("Side#"+intToString(outerSideNumber))); // Identifier side=1
+  module->add(new GeoIdentifierTag(outerSideNumber));
+  id.setSide(outerSideNumber);
+  Identifier outerId = id.getWaferId();
+  GeoVPhysVol * outerSide = m_outerSide->build(id);
+  module->add(outerSide);
+  // Store alignable transform
+  m_detectorManager->addAlignableTransform(0, outerId, outerTransform, outerSide);
+  
+  return module;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Options.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Options.cxx
new file mode 100644
index 000000000..0eb5c3721
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Options.cxx
@@ -0,0 +1,88 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Options.h"
+
+SCT_Options::SCT_Options()
+  : m_g3Compatible(false),
+    m_dc1Geometry(false),
+    m_dc2Geometry(true),
+    m_alignable(true),
+    m_alignModule(true),
+    m_dynAlignFolders(false)
+{}
+
+void 
+SCT_Options::setG3Compatible(bool flag)
+{
+  m_g3Compatible = flag;
+  if (flag) setDC1Geometry();
+}
+
+bool 
+SCT_Options::g3Compatible() const 
+{
+  return  m_g3Compatible;
+}
+
+void 
+SCT_Options::setDC1Geometry()
+{
+  m_dc1Geometry = true;
+  m_dc2Geometry = false;
+}
+
+bool 
+SCT_Options::versionDC1() const 
+{
+  return m_dc1Geometry;
+}
+
+void 
+SCT_Options::setDC2Geometry()
+{
+  m_dc1Geometry = false;
+  m_dc2Geometry = true;
+  m_g3Compatible = false;
+}
+
+bool 
+SCT_Options::versionDC2() const 
+{
+  return m_dc2Geometry;
+}
+
+void 
+SCT_Options::setAlignable(bool flag)
+{
+  m_alignable = flag;
+}
+
+bool 
+SCT_Options::alignable() const
+{
+  return m_alignable;
+}
+
+void 
+SCT_Options::setAlignAtModuleLevel(bool flag)
+{
+  m_alignModule = flag;
+}
+
+bool 
+SCT_Options::alignAtModuleLevel() const
+{
+  return m_alignModule;
+}
+
+void SCT_Options::setDynamicAlignFolders(const bool flag)
+{
+  m_dynAlignFolders = flag;
+}
+
+bool SCT_Options::dynamicAlignFolders() const 
+{  
+  return m_dynAlignFolders;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_OuterSide.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_OuterSide.cxx
new file mode 100644
index 000000000..67a8958fc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_OuterSide.cxx
@@ -0,0 +1,211 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_OuterSide.h"
+
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+
+//  module parts.
+#include "FaserSCT_GeoModel/SCT_Sensor.h"
+#include "FaserSCT_GeoModel/SCT_Hybrid.h"
+#include "FaserSCT_GeoModel/SCT_Pigtail.h"
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoShape.h"
+#include "GeoModelKernel/GeoShapeUnion.h"
+#include "GeoModelKernel/GeoShapeShift.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <cmath>
+
+SCT_OuterSide::SCT_OuterSide(const std::string & name,
+                             TrackerDD::SCT_DetectorManager* detectorManager,
+                             const SCT_GeometryManager* geometryManager,
+                             SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials),
+    m_hybrid(0),
+    m_pigtail(0),
+    m_sensor(0)
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+
+SCT_OuterSide::~SCT_OuterSide()
+{
+  delete m_hybrid;
+  delete m_pigtail;
+  delete m_sensor;
+  delete m_env1RefPointVector;
+  delete m_env2RefPointVector;
+  if (m_hybridPos) m_hybridPos->unref();
+  if (m_pigtailPos) m_pigtailPos->unref();
+  if (m_sensorPos) m_sensorPos->unref();
+}
+
+
+void
+SCT_OuterSide::getParameters()
+{
+  const SCT_GeneralParameters     * generalParameters = m_geometryManager->generalParameters();
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+
+  m_safety           = generalParameters->safety();
+  m_hybridOffsetZ    = parameters->hybridOffsetZ();
+  m_hybridOffsetX    = parameters->hybridOffsetX();
+}
+
+
+const GeoLogVol * 
+SCT_OuterSide::preBuild()
+{
+  // Create child components
+  m_sensor             = new SCT_Sensor("BRLSensor", m_detectorManager, m_geometryManager, m_materials);
+  m_hybrid             = new SCT_Hybrid("Hybrid", m_detectorManager, m_geometryManager, m_materials);
+  m_pigtail            = new SCT_Pigtail("Pigtail", m_detectorManager, m_geometryManager, m_materials);
+
+  //
+  // Define constants for convenience.
+  // t_XXX: thickness of XXX.
+  // w_XXX: width of XXX.
+  // l_XXX: length of XXX.
+  //
+  const double t_hybrid = m_hybrid->thickness();
+  const double w_hybrid = m_hybrid->width();
+  //const double l_hybrid = m_hybrid->length();
+
+  const double t_pigtail = m_pigtail->thickness();
+  const double w_pigtail = m_pigtail->width();
+  const double l_pigtail = m_pigtail->length();
+
+  const double t_sensor = m_sensor->thickness();
+  const double w_sensor = m_sensor->width();
+  const double l_sensor = m_sensor->length();
+
+  //   
+  // Calculate a few things.
+  //
+  const double sensorPosX = 0.0;
+  const double sensorPosY = 0.0;
+  const double sensorPosZ = 0.0;
+
+  const double hybridPosX = m_hybridOffsetX;
+  const double hybridPosY = 0.0;
+  const double hybridPosZ = m_hybridOffsetZ;
+
+  const double pigtailPosX = hybridPosX + 0.5*t_hybrid - 0.5*t_pigtail;
+  const double pigtailPosY = -0.5*w_hybrid - 0.5*w_pigtail;
+  const double pigtailPosZ = hybridPosZ;
+
+  //
+  // ose : OuterSideEnvelope
+  // Reference: sct_module_geometry.ps
+  //
+  const double w_ose1 = w_sensor + m_safety;
+  const double t_ose1 = t_sensor + m_safety;
+  const double l_ose1 = l_sensor + m_safety;
+
+  const double t_ose2 = t_hybrid + m_safety;
+  const double w_ose2 = w_hybrid + w_pigtail + m_safety;
+  const double l_ose2 = l_pigtail + m_safety;
+
+  const double ose2PosX = hybridPosX;
+  const double ose2PosY = hybridPosY - 0.5*w_pigtail;
+  const double ose2PosZ = hybridPosZ;
+
+  // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (02)*********************************
+  // *** -->>                                      (02)*********************************
+  m_env1RefPointVector = new GeoTrf::Vector3D(0.0, 0.0, 0.0);
+  m_env2RefPointVector = new GeoTrf::Vector3D(-ose2PosX, -ose2PosY, -ose2PosZ);
+  // *** End of modified lines. ------------------ (02)*********************************
+
+  m_hybridPos             = new GeoTransform(GeoTrf::Translate3D(hybridPosX, hybridPosY, hybridPosZ));
+  m_hybridPos->ref();
+  m_pigtailPos            = new GeoTransform(GeoTrf::Translate3D(pigtailPosX, pigtailPosY, pigtailPosZ));
+  m_pigtailPos->ref();
+
+  // The depth axis goes from the backside to the implant side 
+  // and so point to away from the  module center.
+  // The two sensor+hybrid combinations are built in a similar way.
+  //
+ //                      ^ 
+  //        ---   hybrid  | 
+  //      ------- sensor  | x-axis
+  //
+  // Shown is the outer side. The inner side is the same but with a rotation of 180 Gaudi::Units::deg around the z-axis.       
+  // 
+  //Gaudi::Units::HepRotation rotSensor;
+  //rotSensor.rotateZ(180*Gaudi::Units::deg);
+  //m_outerSidePos = new GeoTrf::Transform3D(rotOuter, GeoTrf::Vector3D(0.5 * (m_sensorGap + sectThickness), 0., 0.));
+  //m_sensorPos = new GeoTransform(GeoTrf::Transform3D(rotSensor, GeoTrf::Vector3D(sensorPosX, sensorPosY, sensorPosZ)));
+  m_sensorPos             = new GeoTransform(GeoTrf::Translate3D(sensorPosX, sensorPosY, sensorPosZ));
+  m_sensorPos->ref();
+
+  //
+  // Make an envelope for the whole module.
+  //
+  const GeoBox * ose1Shape = new GeoBox(0.5 * t_ose1,
+                                        0.5 * w_ose1,
+                                        0.5 * l_ose1);
+  const GeoBox * ose2Shape = new GeoBox(0.5 * t_ose2,
+                                        0.5 * w_ose2,
+                                        0.5 * l_ose2);
+
+  const GeoShape & OuterSideEnvelopeShape = (*ose1Shape).
+    add(*ose2Shape << GeoTrf::Translate3D(ose2PosX, ose2PosY, ose2PosZ));
+
+  const GeoLogVol * OuterSideEnvelopeLog = new GeoLogVol("OuterSideEnvelope",
+                                                         &OuterSideEnvelopeShape,
+                                                         m_materials->gasMaterial());
+
+  // 28th Mar S.Mima modified.
+  // *** 16:30 Wed 15th Jun 2005 D.Naito modified. (03)*********************************
+  //m_thickness = 0.5*t_sensor + m_hybridOffsetX + 0.5*t_ose2;
+  // *** -->>                                      (03)*********************************
+  m_thickness = 0.5*t_ose1 + m_hybridOffsetX + 0.5*t_ose2;
+  // *** End of modified lines. ------------------ (03)*********************************
+  m_width     = w_ose2;
+  m_length    = l_ose1;
+
+  return OuterSideEnvelopeLog;
+}
+
+
+GeoVPhysVol * 
+SCT_OuterSide::build(SCT_Identifier id)
+{
+  GeoFullPhysVol * outerSide = new GeoFullPhysVol(m_logVolume);
+
+  //
+  // Build the outerSide
+  //
+  // Add Sensor
+  outerSide->add(new GeoIdentifierTag(1000));
+  outerSide->add(m_sensorPos);
+  outerSide->add(m_sensor->build(id));
+
+  // Add Hybrid
+  outerSide->add(m_hybridPos);
+  outerSide->add(m_hybrid->getVolume());
+
+  // Add Pigtail
+  outerSide->add(m_pigtailPos);
+  outerSide->add(m_pigtail->getVolume());
+
+  return outerSide;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Pigtail.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Pigtail.cxx
new file mode 100644
index 000000000..3d5916765
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Pigtail.cxx
@@ -0,0 +1,51 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Pigtail.h"
+
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/Units.h"
+
+SCT_Pigtail::SCT_Pigtail(const std::string & name,
+                         TrackerDD::SCT_DetectorManager* detectorManager,
+                         const SCT_GeometryManager* geometryManager,
+                         SCT_MaterialManager* materials)
+  : SCT_SharedComponentFactory(name, detectorManager, geometryManager, materials)
+{
+  getParameters();
+  m_physVolume = build();
+}
+
+void
+SCT_Pigtail::getParameters() 
+{
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+  m_material  = m_materials->getMaterial(parameters->pigtailMaterial());
+  m_thickness = parameters->pigtailThickness();
+  m_length    = parameters->pigtailLength();
+  m_width     = parameters->pigtailWidth();
+}
+
+GeoVPhysVol * 
+SCT_Pigtail::build()
+{
+  
+  // Build the Pigtail. Just a simple box.
+  const GeoBox * pigtailShape = new GeoBox(0.5*m_thickness,
+                                           0.5*m_width,
+                                           0.5*m_length);
+  const GeoLogVol * pigtailLog = 
+    new GeoLogVol(getName(), pigtailShape, m_material);
+  GeoPhysVol * pigtail = new GeoPhysVol(pigtailLog);
+
+  return pigtail;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Sensor.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Sensor.cxx
new file mode 100644
index 000000000..d8efd8f1e
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Sensor.cxx
@@ -0,0 +1,166 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "FaserSCT_GeoModel/SCT_Sensor.h"
+
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+
+#include "FaserSCT_GeoModel/SCT_BarrelModuleParameters.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+#include "TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h"
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "TrackerReadoutGeometry/SiCommonItems.h"
+
+#include "GaudiKernel/SystemOfUnits.h"
+
+using namespace TrackerDD;
+
+SCT_Sensor::SCT_Sensor(const std::string & name,
+                       TrackerDD::SCT_DetectorManager* detectorManager,
+                       const SCT_GeometryManager* geometryManager,
+                       SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials),
+    m_noElementWarning{true}
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+
+void
+SCT_Sensor::getParameters()
+{
+  
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+  m_material  = m_materials->getMaterial(parameters->sensorMaterial());
+  m_thickness = parameters->sensorThickness();
+  m_length    = 0;
+  if (parameters->sensorNumWafers() == 2) {
+    m_length = parameters->sensorLength() + parameters->sensorDistCenterToCenter();
+  } else {
+    m_length = parameters->sensorLength();
+  }
+  m_width     = parameters->sensorWidth();
+
+}
+
+const GeoLogVol * 
+SCT_Sensor::preBuild()
+{
+
+  // Build the sensor. Just a simple box.
+  const GeoBox * sensorShape = new GeoBox(0.5*m_thickness, 0.5*m_width, 0.5*m_length);
+  GeoLogVol * sensorLog = new GeoLogVol(getName(), sensorShape, m_material);
+
+  // Make the moduleside design for this sensor
+  makeDesign();
+
+  m_detectorManager->addDesign(m_design);
+  
+  return sensorLog;
+}
+
+
+void
+SCT_Sensor::makeDesign()
+{
+  //SiDetectorDesign::Axis etaAxis   = SiDetectorDesign::zAxis;
+  //SiDetectorDesign::Axis phiAxis   = SiDetectorDesign::yAxis;
+  //SiDetectorDesign::Axis depthAxis = SiDetectorDesign::xAxis;
+
+  const SCT_BarrelModuleParameters * parameters = m_geometryManager->barrelModuleParameters();
+  
+  double stripPitch      = parameters->sensorStripPitch();
+  double stripLength     = parameters->sensorStripLength();
+  int crystals           = parameters->sensorNumWafers();
+  double distCenterToCenter =  parameters->sensorDistCenterToCenter();
+
+  //int cells              = parameters->sensorNumReadoutStrips();
+  //int diodes             = parameters->sensorNumStrips();
+  //int shift              = parameters->sensorStripShift(); 
+
+  // For consistency with older version we keep shift = 0.
+  int cells              = parameters->sensorNumReadoutStrips();
+  int diodes             = cells;
+  int shift              = 0; 
+
+  double totalDeadLength = distCenterToCenter - stripLength;
+    
+  double xEtaStripPatternCenter = 0;
+  double xPhiStripPatternCenter = 0;
+
+  // Readout direction is in same direction as local phi direction
+  bool swapStripReadout = false;
+
+  // The readout side is at the +ve depth direction
+  int readoutSide = +1;
+
+  m_design = new SCT_BarrelModuleSideDesign(m_thickness,
+                                            crystals,
+                                            diodes,
+                                            cells,
+                                            shift,
+                                            swapStripReadout,
+                                            TrackerDD::holes,
+                                            stripPitch,
+                                            stripLength,
+                                            xEtaStripPatternCenter,
+                                            xPhiStripPatternCenter,
+                                            totalDeadLength,
+                                            readoutSide);
+  //
+  // Flags to signal if axis can be swapped.
+  // For rectangular detector these are all true.
+  // This is the default and no action is required. 
+  // Can force axes not to be swapped by setting to false.
+  // 
+  // bool phiSyGaudi::Units::mmetric = true;
+  // bool etaSyGaudi::Units::mmetric = true; 
+  // bool depthSyGaudi::Units::mmetric = true;
+  // m_design->setSyGaudi::Units::mmetry(phiSyGaudi::Units::mmetric, etaSyGaudi::Units::mmetric, depthSyGaudi::Units::mmetric,
+  //
+}
+
+
+
+GeoVPhysVol * 
+SCT_Sensor::build(SCT_Identifier id)
+{
+  GeoFullPhysVol * sensor = new GeoFullPhysVol(m_logVolume); 
+  
+  // Make detector element and add to collection
+  // Only do so if we have a valid id helper.
+
+  //id.print(); // for debugging only
+
+  const SiCommonItems* commonItems =  m_geometryManager->commonItems();
+
+  if (commonItems->getIdHelper()) {
+
+    SiDetectorElement * detElement;
+
+    detElement =  new SiDetectorElement(id.getWaferId(), 
+                                        m_design, 
+                                        sensor,  
+                                        commonItems);
+    
+    // Add the detector element.
+    m_detectorManager->addDetectorElement(detElement);
+
+  } else {
+    if (m_noElementWarning) {
+      std::cout << "WARNING!!!!: No SCT id helper and so no elements being produced." << std::endl;
+      m_noElementWarning = false;
+    }
+  }
+  return sensor;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Ski.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Ski.cxx
new file mode 100644
index 000000000..c01541f6d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/SCT_Ski.cxx
@@ -0,0 +1,143 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+//
+// CPW 17/8/06
+// Version using new model of services from A. Tricoli
+// 
+#include "FaserSCT_GeoModel/SCT_Ski.h"
+#include "FaserSCT_GeoModel/SCT_Identifier.h"
+#include "FaserSCT_GeoModel/SCT_GeometryManager.h"
+#include "FaserSCT_GeoModel/SCT_MaterialManager.h"
+#include "FaserSCT_GeoModel/SCT_BarrelParameters.h"
+#include "FaserSCT_GeoModel/SCT_GeneralParameters.h"
+#include "FaserSCT_GeoModel/SCT_Module.h"
+
+#include "TrackerGeoModelUtils/ExtraMaterial.h"
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoNameTag.h"
+#include "GeoModelKernel/GeoIdentifierTag.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoShapeSubtraction.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <sstream>
+#include <cmath>
+
+inline double sqr(double x) {return x * x;}
+
+SCT_Ski::SCT_Ski(const std::string & name,
+                     TrackerDD::SCT_DetectorManager* detectorManager,
+                     const SCT_GeometryManager* geometryManager,
+                     SCT_MaterialManager* materials)
+  : SCT_UniqueComponentFactory(name, detectorManager, geometryManager, materials)
+{
+  getParameters();
+  m_logVolume = preBuild();
+}
+
+SCT_Ski::~SCT_Ski()
+{
+}
+
+void
+SCT_Ski::getParameters()
+{
+  const SCT_BarrelParameters * parameters = m_geometryManager->barrelParameters();
+  const SCT_GeneralParameters * generalParameters = m_geometryManager->generalParameters();
+    
+  m_safety       = generalParameters->safety();
+  m_modulesPerRow = parameters->modulesPerRow();
+
+}
+
+const GeoLogVol * 
+SCT_Ski::preBuild()
+{
+  std::cout << "Instantiating Module" << std::endl;
+  m_module = new SCT_Module("Module", m_detectorManager, m_geometryManager, m_materials);
+  std::cout << "Module created" << std::endl;
+  //
+  // Active Layer Envelope extent
+  // Envelope for the active part (ie containing all the skis for the layer)
+  //
+  double activeWidth, activeThickness, activeLength;
+
+  // Returns the outer dimensions of the active envelope
+  activeEnvelopeExtent(activeThickness, activeWidth, activeLength);
+
+  // Add some safety
+  activeWidth  += m_safety;
+  activeThickness += m_safety;
+  activeLength += m_safety;
+
+  m_activeWidth = activeWidth;
+  m_activeThickness = activeThickness;
+  m_activeLength = activeLength;
+  //
+  // Overall Layer Envelope extent
+  //
+  // Same as active dimensions, since there is no support material yet
+  m_width = m_activeWidth;
+  m_thickness = m_activeThickness;
+  m_length = m_activeLength;
+  //
+  // Make envelope for layer
+  //
+  const GeoBox* skiEnvelopeBox = new GeoBox(0.5 * m_thickness, 0.5 * m_width, 0.5 * m_length);
+  GeoLogVol* logVolume = new GeoLogVol(getName(), skiEnvelopeBox, m_materials->gasMaterial());
+
+  // Check for overlap.
+
+  return logVolume;
+}
+
+GeoVPhysVol * 
+SCT_Ski::build(SCT_Identifier id)
+{
+  // We make this a fullPhysVol
+  GeoFullPhysVol * ski = new GeoFullPhysVol(m_logVolume);
+
+  double activeLength = m_length - m_safety/2;
+  double moduleLength = m_module->length();
+  for (int iEta = -m_modulesPerRow/2; iEta <= m_modulesPerRow/2; iEta++)
+  {
+    if (iEta == 0) continue;
+    ski->add(new GeoNameTag("Module#"+intToString(iEta)));
+    ski->add(new GeoIdentifierTag(iEta)); 
+    id.setEtaModule(iEta); 
+    double zEta = (iEta < 0 ? iEta + 0.5 : iEta - 0.5);
+    GeoAlignableTransform* transform = new GeoAlignableTransform(GeoTrf::Translate3D(0.0, 
+                                                                                     0.0,
+                                                                                     (moduleLength - activeLength)/2 + zEta * moduleLength));
+    ski->add(transform);
+    GeoVPhysVol * modulePV = m_module->build(id);
+    ski->add(modulePV);
+    // Store alignable transform
+    m_detectorManager->addAlignableTransform(1, id.getWaferId(), transform, modulePV);    
+  }
+
+  return ski;
+}
+
+void
+SCT_Ski::activeEnvelopeExtent(double & dx, double & dy, double & dz)
+{
+  // Do this in a very simple-minded and unrealistic way to start
+  double layerThickness = m_module->thickness() + m_safety;              // this is the x-coordinate of the module/ski
+  double layerWidth = m_module->width() + m_safety;                      // this is the y-coordinate (phi) of the module/ski
+  double layerLength = m_modulesPerRow * m_module->length() + m_safety;  // this is the z-coordinate (eta) of the module/ski
+
+  dx = layerThickness;
+  dy = layerWidth;
+  dz = layerLength;
+}
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/components/SCT_GeoModel_entries.cxx b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/components/SCT_GeoModel_entries.cxx
new file mode 100644
index 000000000..7b5af3938
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/src/components/SCT_GeoModel_entries.cxx
@@ -0,0 +1,4 @@
+#include "FaserSCT_GeoModel/FaserSCT_DetectorTool.h"
+
+DECLARE_COMPONENT( FaserSCT_DetectorTool )
+
diff --git a/Tracker/TrackerDetDescr/FaserSCT_GeoModel/test/FaserSCT_GMConfig_test.py b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/test/FaserSCT_GMConfig_test.py
new file mode 100755
index 000000000..c72b8ad2e
--- /dev/null
+++ b/Tracker/TrackerDetDescr/FaserSCT_GeoModel/test/FaserSCT_GMConfig_test.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+"""Run tests on SCT_GeoModel configuration
+
+Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+"""
+if __name__ == "__main__":
+    from AthenaCommon.Configurable import Configurable
+    Configurable.configurableRun3Behavior=1
+    from CalypsoConfiguration.AllConfigFlags import ConfigFlags
+    from AthenaConfiguration.TestDefaults import defaultTestFiles
+
+    ConfigFlags.Input.Files = defaultTestFiles.HITS
+    ConfigFlags.IOVDb.GlobalTag         = "OFLCOND-MC16-SDR-16"
+    ConfigFlags.Detector.SimulateSCT    = False
+    ConfigFlags.GeoModel.Align.Dynamic  = False
+    ConfigFlags.lock()
+
+    from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+    from FaserSCT_GeoModel.FaserSCT_GeoModelConfig import FaserSCT_GeometryCfg
+    acc = FaserSCT_GeometryCfg(ConfigFlags)
+    f=open('FaserSCT_GeometryCfg.pkl','w')
+    acc.store(f)
+    f.close()
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/CMakeLists.txt b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/CMakeLists.txt
new file mode 100644
index 000000000..ba356f000
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/CMakeLists.txt
@@ -0,0 +1,34 @@
+################################################################################
+# Package: TrackerGeoModelUtils
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrackerGeoModelUtils )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaKernel
+                          Database/RDBAccessSvc
+                          GaudiKernel
+                          PRIVATE
+                          Control/StoreGate
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          DetectorDescription/GeoPrimitives
+                          DetectorDescription/GeometryDBSvc )
+
+# External dependencies:
+find_package( Boost COMPONENTS filesystem thread system )
+find_package( CLHEP )
+find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+find_package( GeoModel )
+
+# Component(s) in the package:
+atlas_add_library( TrackerGeoModelUtils
+                   src/*.cxx
+                   PUBLIC_HEADERS TrackerGeoModelUtils
+                   INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} ${CLHEP_INCLUDE_DIRS}
+                   DEFINITIONS ${CLHEP_DEFINITIONS}
+                   LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${CLHEP_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GaudiKernel StoreGateLib SGtests
+                   PRIVATE_LINK_LIBRARIES GeoModelUtilities )
+
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/README b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/README
new file mode 100755
index 000000000..07f491588
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/README
@@ -0,0 +1,9 @@
+This package held code common to PixelGeoModel, SCT_GeoModel, TRT_GeoModel
+and InDetServMatGeoModel
+
+Package:      offline/InnerDetector/InDetDetDescr/InDetGeoModelUtils 
+
+Responsible:  Grant Gorfine <Grant.Gorfine@cern.ch>
+
+
+
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/DistortedMaterialManager.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/DistortedMaterialManager.h
new file mode 100755
index 000000000..9eeed8f0a
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/DistortedMaterialManager.h
@@ -0,0 +1,28 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_DistortedMaterialManager_h
+#define TrackerGeoModelUtils_DistortedMaterialManager_h
+
+class AbsMaterialManager;
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+namespace TrackerDD {
+
+class DistortedMaterialManager
+{
+public:
+  DistortedMaterialManager();  
+  IRDBRecordset_ptr  extraMaterialTable() const {return  m_xMatTable;}
+  const AbsMaterialManager * materialManager() const {return  m_materialManager;}
+
+private:
+  const AbsMaterialManager * m_materialManager;
+  IRDBRecordset_ptr  m_xMatTable;
+};
+
+
+} // endnamespace
+
+#endif // TrackerGeoModelUtils_DistortedMaterialManager_h
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ExtraMaterial.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ExtraMaterial.h
new file mode 100755
index 000000000..60238055f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ExtraMaterial.h
@@ -0,0 +1,37 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_ExtraMaterial
+#define TrackerGeoModelUtils_ExtraMaterial
+
+#include <cmath>
+#include <string>
+#include <sstream>
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+class GeoPhysVol;
+class GeoFullPhysVol;
+class AbsMaterialManager;
+
+namespace TrackerDD {
+
+class DistortedMaterialManager;
+
+class ExtraMaterial
+{
+public:
+  ExtraMaterial(IRDBRecordset_ptr xMatTable, const AbsMaterialManager * matManager);
+  ExtraMaterial(const TrackerDD::DistortedMaterialManager * manager);
+  void add(GeoPhysVol * parent, const std::string & parentName, double zPos = 0);
+  void add(GeoFullPhysVol * parent, const std::string & parentName, double zPos = 0);
+
+private:
+  void add(GeoPhysVol * parent, GeoFullPhysVol * fullparent, const std::string & parentName, double zPos);
+  IRDBRecordset_ptr  m_xMatTable;
+  const AbsMaterialManager * m_matManager;
+};
+
+} // end namespace
+
+#endif // TrackerGeoModelUtils_ExtraMaterial
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/GenericTubeMaker.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/GenericTubeMaker.h
new file mode 100755
index 000000000..d7a7ddb21
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/GenericTubeMaker.h
@@ -0,0 +1,55 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_GenericTubeMaker_h
+#define TrackerGeoModelUtils_GenericTubeMaker_h
+
+#include "TrackerGeoModelUtils/TubeVolData.h"
+#include <string>
+
+class GeoVPhysVol;
+class GeoPhysVol;
+class GeoFullPhysVol;
+class GeoShape;
+class IRDBRecord;
+
+/// Helper class to make general tubes used mainly for services.
+/// Takes as input a DB table which has the following columns
+/// Handles numberouse cases
+/// Simple tubes: Rmin2, Rmax2 <=0.
+/// Cones: Uses Rmin2 and Rmax2.
+/// Tube and cone sectors: Uses phi start and phi delta.
+/// If RadialDiv > 0 then simulates the CLHEP::radial dependence of tubes/cables going outward CLHEP::radially.
+/// 
+
+namespace TrackerDD {
+
+class GenericTubeMaker 
+{
+public:
+  GenericTubeMaker(const IRDBRecord *);
+  const TubeVolData & volData() const {return m_volData;}
+  std::string name() const;
+  std::string materialName() const;
+  const GeoShape * buildShape();
+  void placeVolume(GeoPhysVol * parent, GeoVPhysVol * child, double zParent = 0);
+  void placeVolume(GeoFullPhysVol * fullparent, GeoVPhysVol * child, double zParent = 0);
+  void placeVolTwoSide(GeoPhysVol * parentPos, GeoPhysVol * parentNeg, GeoVPhysVol * child, double zParent = 0);
+  void placeVolTwoSide(GeoFullPhysVol * fullparentPos, GeoFullPhysVol * fullparentNeg, GeoVPhysVol * child, double zParent = 0);
+
+
+private:
+
+  void placeVolume(GeoPhysVol * parent, GeoFullPhysVol * fullparent, GeoVPhysVol * child, double zParent);
+  void placeVolTwoSide(GeoPhysVol * parentPos, GeoPhysVol * parentNeg, 
+		       GeoFullPhysVol * fullparentPos, GeoFullPhysVol * fullparentNeg, 
+		       GeoVPhysVol * child, double zParent);
+
+  const IRDBRecord * m_record;
+  TubeVolData m_volData;  
+};
+
+} // end namespace
+
+#endif // TrackerGeoModelUtils_GenericTubeMaker_h
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ITrackerServMatBuilderTool.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ITrackerServMatBuilderTool.h
new file mode 100644
index 000000000..8d3e0c16f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ITrackerServMatBuilderTool.h
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// ITrackerServMatBuilderTool.h, (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+#ifndef ITrackerServMatBuilderTool_H
+#define ITrackerServMatBuilderTool_H
+
+#include "GaudiKernel/IAlgTool.h"
+
+#include <list>
+
+namespace TrackerDD {
+  class ServiceVolume;
+}
+
+static const InterfaceID IID_ITrackerServMatBuilderTool("ITrackerServMatBuilderTool", 1, 0);
+
+
+/// Tool for building services in SLHC geometry
+class ITrackerServMatBuilderTool : virtual public IAlgTool {
+public:
+  static const InterfaceID& interfaceID( ) ;
+  
+  virtual const std::vector<const TrackerDD::ServiceVolume *> & getServices() = 0;  
+};
+  
+inline const InterfaceID& ITrackerServMatBuilderTool::interfaceID()
+{
+  return IID_ITrackerServMatBuilderTool;
+}
+  
+#endif //ITrackerServMatBuilderTool_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/PairIndexMap.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/PairIndexMap.h
new file mode 100644
index 000000000..022ed04b2
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/PairIndexMap.h
@@ -0,0 +1,29 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_PairIndexMap_H
+#define TrackerGeoModelUtils_PairIndexMap_H
+
+
+#include <map>
+#include <utility>
+
+namespace TrackerDD {
+
+  /// Class to store map between pair of two ints and an int.
+  /// Used to help read in database tables which are a lookup via two ints.
+  class PairIndexMap {
+    
+  public :
+    void add(int first, int second, int value);
+    int find(int first, int second) const;
+    
+  private:
+    typedef std::map<std::pair<int,int>, int> MapType;
+    MapType m_map;
+    
+  };
+}
+
+#endif // TrackerGeoModelUtils_PairIndexMap_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolume.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolume.h
new file mode 100755
index 000000000..68a6c2196
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolume.h
@@ -0,0 +1,145 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerDD_ServiceVolume_H
+#define TrackerDD_ServiceVolume_H
+
+#include <string>
+#include <cmath>
+
+class GeoMaterial;
+class GeoShape;
+
+namespace TrackerDD {
+
+  // class to hold GeoShape pointer. This takes care of the GeoShape ref counting and 
+  // avoids needing to write a copy constructor for ServiceVolume
+  class GeoShapeHolder {
+  public:
+    GeoShapeHolder(); 
+    GeoShapeHolder(const GeoShape *); 
+    GeoShapeHolder(const GeoShapeHolder &);
+    GeoShapeHolder & operator=(const GeoShapeHolder &);
+    GeoShapeHolder & operator=(GeoShapeHolder &&);
+    ~GeoShapeHolder(); 
+    const GeoShape * get() const {return m_geoShape;}
+    void set(const GeoShape *);
+    void reset();
+  private:
+    const GeoShape * m_geoShape;
+  };
+  
+  class ServiceVolume {
+
+  public: 
+    ServiceVolume();
+    void setRmin(double rmin) {m_rmin = rmin; resetGeoShape();} 
+    void setRmax(double rmax) {m_rmax = rmax; resetGeoShape();} 
+    void setRmin2(double rmin2) {m_rmin2 = rmin2; resetGeoShape();} 
+    void setRmax2(double rmax2) {m_rmax2 = rmax2; resetGeoShape();} 
+    void setZmin(double zmin) {m_zmin = zmin; resetGeoShape();} 
+    void setZmax(double zmax) {m_zmax = zmax; resetGeoShape();} 
+    //void setVolId(int num) {m_volId = num;}
+    void setZsymm(bool zsymm) {m_zsymm = zsymm;}
+    void setMaterial(const std::string & mat) {m_materialName = mat;} 
+    void setMaterial(const GeoMaterial * mat) {m_material = mat;} 
+    void setVolName(const std::string & name) {m_volName = name;}
+    void setShapeType(const std::string & shapeType) {m_shapeType = shapeType; setSplittable();}
+    void setPhiLoc(double phiLoc) {m_phiLoc = phiLoc; resetGeoShape();}
+    void setPhiWidth(double phiWidth) {m_phiWidth = phiWidth; resetGeoShape();}
+    void setNeedsRotation(bool flag) {m_needsRotation = flag;}
+    void setSides(int sides) {m_sides = sides; resetGeoShape();}
+    void setNCopies(int num) {m_nCopies = num;}
+    void setRegion(const std::string & region) {m_region = region;}
+    void setLabel(const std::string & name, int volId);
+    void setLabel(const std::string & name) {m_label = name;}
+    void addLabel(const std::string & name) {m_label += name;}
+    //void setLength() {m_origLength = std::abs(m_zmax - m_zmin);}
+    void setOrigVolume(double volume) {m_origVolume = volume;}
+    void resetGeoShape() {if (!m_lockGeoShape) m_geoShape.reset();}
+    void reduceSize(double safety);
+    // Set a custom shape. A volume can be specified. 
+    // This should be used when the shapes volume calculation is unreliable (eg boolean volumes)
+    // NB. rmin,rmax,zmin,zmax should still be set to determine z position and to determine which zone it belongs.
+    void setGeoShape(const GeoShape * geoShape, double volume=0);
+    void setEnvelopeNum(int num) { m_envNum=num; }
+    void setParentEnvelope(int num) { m_envParentNum=num; }
+    void setZShift(double shift) { m_zShift=shift; }
+
+    double rmin() const {return m_rmin;}
+    double rmax() const {return m_rmax;}
+    double rmin2() const {return m_rmin2;}
+    double rmax2() const {return m_rmax2;}
+    double zmin() const {return m_zmin+m_safety;}
+    double zmax() const {return m_zmax-m_safety;}
+    //int volId() const {return m_volId;}
+    bool zsymm() const {return m_zsymm;}
+    const std::string & materialName() const {return m_materialName;}
+    const GeoMaterial * material() const {return m_material;}
+    const std::string & volName() const {return m_volName;}
+    const std::string & shapeType() const {return m_shapeType;}
+    double phiLoc() const {return m_phiLoc;}
+    double phiWidth() const {return m_phiWidth;}
+    bool needsRotation() const {return m_needsRotation;}
+    int sides() const {return m_sides;}
+    int nCopies() const {return m_nCopies;}
+    //double origLength() const {return m_origLength;}
+    const std::string & region() const {return m_region;}
+    std::string fullLabel() const;
+    double length() const {return std::abs(m_zmax - m_zmin) - 2*m_safety;}
+    double zposition() const {return 0.5 * (m_zmin + m_zmax);}
+    double rposition() const {return 0.5 * (m_rmin + m_rmax);}
+    //double fractionInRegion() const {return std::abs(m_zmax - m_zmin)/m_origLength;}
+    double volume() const;
+    double origVolume() const;
+    const GeoShape * getShape() const;
+    bool splittableInR() const {return m_splittableR;}
+    bool splittableInZ() const {return m_splittableZ;}
+    int envelopeNum() const {return m_envNum; }
+    int envelopeParent() const {return m_envParentNum; }
+    double zShift() const {return m_zShift; }
+
+    // For debugging
+    void print() const;
+    
+  private:
+    void setSplittable();
+
+    double m_rmin;
+    double m_rmax;
+    double m_rmin2;
+    double m_rmax2;
+    double m_zmin;
+    double m_zmax;
+    //int m_volId;
+    bool m_zsymm;
+    mutable GeoShapeHolder m_geoShape;
+    const GeoMaterial * m_material;
+    std::string m_materialName;
+    std::string m_volName;
+    std::string m_shapeType;
+    double m_phiLoc;
+    double m_phiWidth;
+    bool m_needsRotation;
+    int m_sides;
+    int m_nCopies;
+    //double m_origLength;
+    double m_origVolume;
+    mutable double m_volume;
+    double m_safety;
+    std::string m_region;
+    std::string m_label;
+    bool m_lockGeoShape;
+    bool m_splittableR;
+    bool m_splittableZ;
+
+    int m_envNum;
+    int m_envParentNum; 
+    double m_zShift;
+  };
+  
+} // End namespace 
+    
+
+#endif
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolumeMaker.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolumeMaker.h
new file mode 100644
index 000000000..78f1abb68
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/ServiceVolumeMaker.h
@@ -0,0 +1,154 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ServiceVolumeMaker_H 
+#define ServiceVolumeMaker_H 
+
+#include <string>
+#include <vector>
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+class IGeometryDBSvc;
+
+namespace TrackerDD {
+
+  class ServiceVolume;
+  class AthenaComps;
+
+  class ServiceVolumeSchema {
+  public:
+    ServiceVolumeSchema();
+
+    void setPixelSchema();
+    void setDefaultSchema();
+    void setSimpleSchema();
+  
+    std::string rmin() const {return m_rmin;}
+    std::string rmax() const {return m_rmax;}
+    std::string rmin2() const {return m_rmin2;}
+    std::string rmax2() const {return m_rmax2;}
+    std::string zmin() const {return m_zmin;}
+    std::string zmax() const {return m_zmax;}
+    std::string zsymm() const {return m_zsymm;}
+    std::string shapeType() const {return m_shapeType;}
+    std::string materialName() const {return m_materialName;}
+    std::string volName() const {return m_volName;}
+    std::string phiWidth() const {return m_phiWidth;}
+    std::string width() const {return m_width;}
+    std::string repeat() const {return m_repeat;}
+    std::string phiStart() const {return m_phiStart;}
+    std::string phiDelta() const {return m_phiDelta;}
+    std::string phiStep() const {return m_phiStep;}
+    std::string radialDiv() const {return m_radialDiv;}
+    std::string volId() const {return m_volId;}
+    std::string shiftFlag() const {return m_shiftFlag;}
+    
+    void set_rmin        (const std::string & s) {m_rmin = s;}
+    void set_rmax        (const std::string & s) {m_rmax = s;}
+    void set_rmin2       (const std::string & s) {m_rmin2 = s;}
+    void set_rmax2       (const std::string & s) {m_rmax2 = s;}
+    void set_zmin        (const std::string & s) {m_zmin = s;}
+    void set_zmax        (const std::string & s) {m_zmax = s;}
+    void set_zsymm       (const std::string & s) {m_zsymm = s;}
+    void set_shapeType   (const std::string & s) {m_shapeType = s;}
+    void set_materialName(const std::string & s) {m_materialName = s;}
+    void set_volName     (const std::string & s) {m_volName = s;}
+    void set_phiWidth    (const std::string & s) {m_phiWidth = s;}
+    void set_width       (const std::string & s) {m_width = s;}
+    void set_repeat      (const std::string & s) {m_repeat = s;}
+    void set_phiStart    (const std::string & s) {m_phiStart = s;}
+    void set_phiDelta    (const std::string & s) {m_phiDelta = s;}
+    void set_phiStep     (const std::string & s) {m_phiStep = s;}
+    void set_radialDiv   (const std::string & s) {m_radialDiv = s;}
+    void set_volId       (const std::string & s) {m_volId = s;}
+    void set_shiftFlag       (const std::string & s) {m_shiftFlag = s;}
+    
+    bool simple() const {return m_rmin2.empty();}
+    bool has_volId() const {return !m_volId.empty();}
+    bool has_shiftFlag() const {return !m_shiftFlag.empty();}
+    bool has_shapeType() const {return !m_shapeType.empty();}
+    bool has_width() const {return !m_width.empty();}
+    bool has_radial() const {return !m_radialDiv.empty();}
+    bool has_phiStep() const {return !m_phiStep.empty();}
+    
+  private:
+    std::string m_rmin;
+    std::string m_rmax;
+    std::string m_rmin2;
+    std::string m_rmax2;
+    std::string m_zmin;
+    std::string m_zmax;
+    std::string m_zsymm;
+    std::string m_shapeType;
+    std::string m_materialName;
+    std::string m_volName;
+    std::string m_phiWidth;
+    std::string m_width;
+    std::string m_repeat;
+    std::string m_phiStart;
+    std::string m_phiDelta;
+    std::string m_phiStep;
+    std::string m_radialDiv;
+    std::string m_volId;
+    std::string m_shiftFlag;
+
+  };
+
+  class ServiceVolumeMakerMgr {
+  public:
+    ServiceVolumeMakerMgr(IRDBRecordset_ptr table, const ServiceVolumeSchema & schema, 
+			  const TrackerDD::AthenaComps * athenaComps);
+    
+    double rmin(int index) const;
+    double rmax(int index) const;
+    double rmin2(int index) const;
+    double rmax2(int index) const;
+    double zmin(int index) const;
+    double zmax(int index) const;
+    double width(int index) const;
+    double phiStart(int index) const;
+    double phiDelta(int index) const;
+    double phiStep(int index) const;
+    bool   zsymm(int index) const;
+    int    repeat(int index) const;
+    int    radialDiv(int index) const;
+    int    volId(int index) const;
+    int    shiftFlag(int index) const;
+    std::string shapeType(int index) const;
+    std::string volName(int index) const;
+    std::string materialName(int index) const;
+    
+    unsigned int numElements() const;
+
+    const IGeometryDBSvc *db() const;
+    const ServiceVolumeSchema & schema() const {return m_schema;}
+    
+  private:
+    IRDBRecordset_ptr m_table;
+    IRDBRecordset_ptr m_layer;
+    ServiceVolumeSchema m_schema;
+    const TrackerDD::AthenaComps * m_athenaComps;
+  };
+
+  class ServiceVolumeMaker {
+  public:
+    ServiceVolumeMaker(const std::string & label,
+		       IRDBRecordset_ptr table, 
+		       const ServiceVolumeSchema & schema,
+		       const TrackerDD::AthenaComps *);
+		ServiceVolumeMaker(const ServiceVolumeMaker &) = delete;
+		ServiceVolumeMaker & operator =(const ServiceVolumeMaker &) = delete;
+    ~ServiceVolumeMaker();
+    const std::vector<const ServiceVolume *> & makeAll();
+    ServiceVolume * make(int index);
+    unsigned int numElements() const;
+
+  private:
+    std::string m_label;
+    ServiceVolumeMakerMgr * m_mgr;    
+    std::vector<const ServiceVolume *> m_services;
+  };
+} // end namespace
+
+#endif
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TopLevelPlacements.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TopLevelPlacements.h
new file mode 100755
index 000000000..ab191e1d2
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TopLevelPlacements.h
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRACKERGEOMODELUTILS_TOPLEVELPLACEMENTS_H
+#define TRACKERGEOMODELUTILS_TOPLEVELPLACEMENTS_H
+
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+
+#include <map>
+#include <string>
+
+class IRDBRecord;
+
+class TopLevelPlacements
+{
+  
+public:
+
+  TopLevelPlacements(IRDBRecordset_ptr topLevelTable);
+  ~TopLevelPlacements();
+
+  bool  present(const std::string & partName) const;
+  const GeoTrf::Transform3D & transform(const std::string & partName) const;
+  
+
+private:
+  
+  class Part {
+  public:
+    std::string label;
+    GeoTrf::Transform3D transform;
+  };
+
+  void fillPlacements(IRDBRecordset_ptr topLevelTable);
+  GeoTrf::Transform3D partTransform(const IRDBRecord* record) const;
+  Part * getPart(const std::string & partName) const;
+
+  std::map<std::string, Part *> m_parts;
+  bool m_noTopLevelTable;
+
+  static GeoTrf::Transform3D s_identityTransform;
+};
+
+#endif // TRACKERGEOMODELUTILS_TOPLEVELPLACEMENTS_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDDAthenaComps.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDDAthenaComps.h
new file mode 100644
index 000000000..851944d44
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDDAthenaComps.h
@@ -0,0 +1,75 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_TrackerDDAthenaComps_H
+#define TrackerGeoModelUtils_TrackerDDAthenaComps_H
+
+// Message Stream Member
+#include "AthenaKernel/MsgStreamMember.h"
+class  StoreGateSvc;
+class  IGeoDbTagSvc;
+class  IRDBAccessSvc;
+class  IGeometryDBSvc; 
+
+#include <string>
+namespace TrackerDD {
+
+/// Class to hold various Athena components.
+class AthenaComps {
+
+public:
+
+  AthenaComps(const std::string & msgStreamName);
+
+  //Declaring the Message method for further use
+  MsgStream& msg (MSG::Level lvl) const { return m_msg << lvl; }
+
+  //Declaring the Method providing Verbosity Level
+  bool msgLvl (MSG::Level lvl) const { return m_msg.get().level() <= lvl; }
+
+  void setDetStore(StoreGateSvc *);
+  void setGeoDbTagSvc(IGeoDbTagSvc *);
+  void setRDBAccessSvc(IRDBAccessSvc *);
+  void setGeometryDBSvc(IGeometryDBSvc *);
+
+  StoreGateSvc * detStore() const;
+  IGeoDbTagSvc * geoDbTagSvc() const;
+  IRDBAccessSvc * rdbAccessSvc() const;
+  IGeometryDBSvc * geomDB() const;
+  
+private:
+  //Declaring private message stream member.
+  mutable Athena::MsgStreamMember m_msg;
+  
+  StoreGateSvc * m_detStore;
+  IGeoDbTagSvc * m_geoDbTagSvc;
+  IRDBAccessSvc * m_rdbAccessSvc;
+  IGeometryDBSvc * m_geometryDBSvc;
+
+};
+
+inline StoreGateSvc * AthenaComps::detStore() const
+{
+  return m_detStore;
+}
+
+inline IGeoDbTagSvc * AthenaComps::geoDbTagSvc() const
+{
+  return m_geoDbTagSvc;
+}
+
+inline IRDBAccessSvc * AthenaComps::rdbAccessSvc() const
+{
+  return m_rdbAccessSvc;
+}
+
+inline IGeometryDBSvc * AthenaComps::geomDB() const
+{
+  return m_geometryDBSvc;
+}
+
+} // endnamespace
+
+#endif // TrackerGeoModelUtils_TrackerDDAthenaComps_H
+
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDetectorFactoryBase.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDetectorFactoryBase.h
new file mode 100644
index 000000000..8b23bb0dc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerDetectorFactoryBase.h
@@ -0,0 +1,51 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_DetectorFactoryBase_H
+#define TrackerGeoModelUtils_DetectorFactoryBase_H
+
+#include "AthenaKernel/MsgStreamMember.h"
+#include "GeoModelKernel/GeoVDetectorFactory.h" 
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+
+class StoreGateSvc;
+class IGeoDbTagSvc;
+class IRDBAccessSvc;
+
+namespace TrackerDD {
+
+class DetectorFactoryBase : public GeoVDetectorFactory  
+{ 
+
+public:
+  DetectorFactoryBase(const TrackerDD::AthenaComps * athenaComps)
+    : m_athenaComps(athenaComps)
+  {}
+
+  StoreGateSvc * detStore() const {return m_athenaComps->detStore();}
+
+  IGeoDbTagSvc * geoDbTagSvc() const {return m_athenaComps->geoDbTagSvc();}
+
+  IRDBAccessSvc * rdbAccessSvc() const {return m_athenaComps->rdbAccessSvc();}
+  
+  IGeometryDBSvc * geomDB() const {return m_athenaComps->geomDB();}
+
+ //Declaring the Message method for further use
+  MsgStream& msg (MSG::Level lvl) const { return m_athenaComps->msg(lvl); }
+
+  //Declaring the Method providing Verbosity Level
+  bool msgLvl (MSG::Level lvl) const { return m_athenaComps->msgLvl(lvl); }
+
+  const TrackerDD::AthenaComps *  getAthenaComps() {return m_athenaComps;}
+
+private:
+  
+  const TrackerDD::AthenaComps *  m_athenaComps;
+
+};
+
+} // end namespace
+
+#endif // TrackerGeoModelUtils_DetectorFactoryBase_H
+
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerMaterialManager.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerMaterialManager.h
new file mode 100755
index 000000000..d88768c12
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerMaterialManager.h
@@ -0,0 +1,244 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRACKERMATERIALMANAGER_H
+#define TRACKERMATERIALMANAGER_H
+
+// Message Stream Member
+#include "AthenaKernel/MsgStreamMember.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+class GeoMaterial;
+class GeoElement;
+class AbsMaterialManager;
+class StoreGateSvc;
+class IGeometryDBSvc;
+
+namespace TrackerDD
+{
+  class AthenaComps;
+}
+
+#include <string>
+#include <map>
+
+/// TrackerMaterialManager. This provides an interface to the GeoModel Material Manager
+/// as well as allowing additional materials to be defined or standard ones redefined.
+/// It also allows creating new materials based on existing ones but with a different 
+/// density. It is also possible to specify a weight table and this is used to create
+/// materials with a density such that the the total weight is correct.
+
+
+class TrackerMaterialManager 
+{
+
+public:
+
+  TrackerMaterialManager(const std::string & managerName, StoreGateSvc* detStore);
+  TrackerMaterialManager(const std::string & managerName, StoreGateSvc* detStore,
+		       IRDBRecordset_ptr weightTable,
+		       const std::string & space = "",
+		       bool extraFunctionality = false);
+  TrackerMaterialManager(const std::string & managerName, StoreGateSvc* detStore,
+		       IRDBRecordset_ptr weightTable,
+		       IRDBRecordset_ptr compositionTable,
+		       const std::string & space = "");
+  TrackerMaterialManager(const std::string & managerName, 
+		       const TrackerDD::AthenaComps *);
+  ~TrackerMaterialManager();
+
+  void addWeightTable(IRDBRecordset_ptr weightTable, const std::string & space = "");
+  void addWeightMaterial(std::string materialName, std::string materialBase, double weight, int linearWeightFlag);
+  void addCompositionTable(IRDBRecordset_ptr compositionTable, const std::string & space = "");
+  void addScalingTable(IRDBRecordset_ptr scalingTable);
+
+
+  bool hasMaterial(const std::string &materialName) const;
+
+  /// Get material. First looks for locally defined material and if not found looks in GeoModel material manager.
+  const GeoMaterial* getMaterial(const std::string & materialName);
+
+  /// Get element from GeoModel material manager
+  const GeoElement* getElement(const std::string & elementName) const;
+
+  /// Create and get material with a specified density based on an existing material.
+  /// If a newName is supplied it creates the new material even if the orginal material
+  /// has the same density. It however first checks if the material with NewName exists.
+  /// If no newName is supplied then it checks the density of
+  /// the existing material. If it is consistent it returns the material.
+  /// If it is different it creates a material with the string "Modified" added to the
+  /// name.
+  const GeoMaterial* getMaterial(const std::string & origMaterialName, 
+				 double density, 
+				 const std::string & newName = "");
+
+  // Creates a new material based on origMaterialName but with denisty scaled 
+  // by scaleFactor. If no newName then will add the string containing the scale 
+  // factor. Eg if scale 12.345678 "Silicon" -> "Silicon12_3456" 
+  // If the scale factor is 1 and there is no newName then it just returns the
+  // original material.
+  // scaleFactor must be between 0.001 and 1000.
+  const GeoMaterial* getMaterialScaled(const std::string & origMaterialName, 
+				       double scaleFactor, 
+				       const std::string & newName = "");
+
+  /// Create and get material with a density calculated to give weight in predefined weight table.
+  const GeoMaterial * getMaterialForVolume(const std::string & materialName, 
+					   double volume, 
+					   const std::string & newName = "");
+
+  // Similar to getMaterialForVolume but if weight table uses linear weight, then determine weight 
+  // using length. First looks in special table of material compositions which can specify several
+  // components and their count. 
+  const GeoMaterial * getMaterialForVolumeLength(const std::string & materialName, 
+						 double volume, 
+						 double length, 
+						 const std::string & newName = "");
+
+  // As above but rather than using the special table of material compositions, the compositions is specified
+  // in the arguments as a vector of materials and multiplictive factors.
+  const GeoMaterial * getMaterialForVolumeLength(const std::string & name,
+						 const std::vector<std::string> & materialComponents, 
+						 const std::vector<double> factors, 
+						 double volume, 
+						 double length);
+  
+  // As above but only one material making up the composition.
+  const GeoMaterial * getMaterialForVolumeLength(const std::string & name,
+						 const std::string & materialComponent, 
+						 double factor, 
+						 double volume, 
+						 double length);
+
+  // Define composite material : function used to create dynamically a new composite material by adding
+  //            a defined volume of glue/grease to an already existing material  (IBL stave)
+  const GeoMaterial * getCompositeMaterialForVolume(const std::string & newMatName,
+						    const double volumeTot,
+						    const double volume1, const std::string & matName1,
+						    const double volume2, const std::string & matName2
+						    );
+
+  // Define a new material composition.
+  const GeoMaterial * getMaterial(const std::string & name,
+				  const std::vector<std::string> & materialComponents, 
+				  const std::vector<double> & fractWeights, 
+				  double density);
+
+
+  /// Add material
+  void addMaterial(GeoMaterial *material);
+
+  //Declaring the Message method for further use
+  MsgStream& msg (MSG::Level lvl) const { return m_msg << lvl; }
+
+  //Declaring the Method providing Verbosity Level
+  bool msgLvl (MSG::Level lvl){ return m_msg.get().level() <= lvl; }
+
+
+private:
+
+  class MaterialByWeight  {
+  public:
+    MaterialByWeight() : weight(0), linearWeightFlag(false) {} 
+    MaterialByWeight(const std::string & name_in, double weight_in, bool linearWeightFlag_in) 
+      : name(name_in), weight(weight_in), linearWeightFlag(linearWeightFlag_in) {}
+    MaterialByWeight(double weight_in) 
+      : weight(weight_in), linearWeightFlag(false) {}
+    std::string name;
+    double weight;
+    bool linearWeightFlag;
+  };
+
+  class MaterialComponent {
+  public:
+    MaterialComponent() : factor(1), actualLength(-1) {}
+    MaterialComponent(const std::string & name_in, double factor_in = 1, bool actualLength_in = -1) 
+      :  name(name_in), factor(factor_in), actualLength(actualLength_in) {}
+    std::string name;
+    double factor;
+    double actualLength;
+  };
+
+  /// Class to hold information need to create a material
+  class MaterialDef {
+  public:
+    MaterialDef();
+    MaterialDef(const std::string & name, double density);
+    void addComponent(const std::string & compName, double fraction);
+    void setCreated() {m_created = true;}
+    unsigned int numComponents() const {return m_components.size();}
+    bool isCreated() const {return m_created;}
+    const std::string & name() const {return m_name;}
+    double density() const {return m_density;}
+    const std::string & compName(unsigned int i) const {return m_components[i];}
+    double fraction(unsigned int i) const {return m_fractions[i];}
+    double totalFraction() const;
+
+  private:
+    std::string m_name;
+    double m_density;
+    std::vector<std::string> m_components;
+    std::vector<double> m_fractions;
+    bool m_created;
+  };
+  
+  
+  const AbsMaterialManager * retrieveManager(StoreGateSvc* detStore);
+  const GeoMaterial* getAdditionalMaterial(const std::string & materialName) const; 
+  bool compareDensity(double d1, double d2) const;
+  void addWeightTableOld(IRDBRecordset_ptr weightTable, const std::string & space);
+
+  // Internal versions. The public versions allow materials to be have extra scaling.
+  const GeoMaterial* getMaterialInternal(const std::string & materialName) const;
+  const GeoMaterial* getMaterialInternal(const std::string & origMaterialName, 
+					 double density, 
+					 const std::string & newName = "");
+  const GeoMaterial* getMaterialScaledInternal(const std::string & origMaterialName, 
+					       double scaleFactor, 
+					       const std::string & newName = "");
+  const GeoMaterial * getMaterialInternal(const std::string & name,
+					  const std::vector<std::string> & materialComponents, 
+					  const std::vector<double> & fractWeights, 
+					  double density);
+
+  // Methods to return material with extra scaling.
+  const GeoMaterial * extraScaledMaterial(const std::string & materialName, 
+					  const std::string & newName, 
+					  const GeoMaterial * origMaterial);
+
+  const GeoMaterial * extraScaledMaterial(const std::string & materialName, 
+					  const GeoMaterial * origMaterial);
+
+  const IGeometryDBSvc * db();
+  void addTextFileMaterials();
+  void createMaterial(const MaterialDef & material);
+  double getExtraScaleFactor(const std::string & materialName);
+
+  const AbsMaterialManager *m_materialManager;
+  std::string m_managerName;
+
+  typedef std::map<std::string, const GeoMaterial *> MaterialStore;
+  MaterialStore m_store;
+
+  typedef std::map<std::string, MaterialByWeight > MaterialWeightMap;
+  MaterialWeightMap m_weightMap;
+
+  typedef std::map<std::string, MaterialComponent > MaterialCompositionMap;
+  MaterialCompositionMap m_matCompositionMap;
+
+  typedef std::map<std::string, double > ExtraScaleFactorMap;
+  ExtraScaleFactorMap m_scalingMap;
+
+  //Declaring private message stream member.
+  mutable Athena::MsgStreamMember m_msg;
+
+  // Has linear weight flag. 
+  bool m_extraFunctionality;
+
+  const TrackerDD::AthenaComps * m_athenaComps;
+
+};
+
+
+#endif // TRACKERMATERIALMANAGER_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerSubDetectorFactoryBase.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerSubDetectorFactoryBase.h
new file mode 100644
index 000000000..38814f360
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TrackerSubDetectorFactoryBase.h
@@ -0,0 +1,65 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_SubDetectorFactoryBase_H
+#define TrackerGeoModelUtils_SubDetectorFactoryBase_H
+
+#include "AthenaKernel/MsgStreamMember.h"
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+
+class StoreGateSvc;
+class IGeoDbTagSvc;
+class IRDBAccessSvc;
+class TrackerMaterialManager;
+
+namespace TrackerDD {
+
+// This is the same as Tracker::DetectorFactoryBase but without the
+// inheretance of GeoVDetectorFactory and with the addition of 
+// access to the material manager.
+
+class SubDetectorFactoryBase
+{ 
+
+public:
+  SubDetectorFactoryBase(const TrackerDD::AthenaComps * athenaComps)
+    : m_athenaComps(athenaComps),
+      m_materialManager(0)
+  {}
+
+  SubDetectorFactoryBase(const TrackerDD::AthenaComps * athenaComps,
+			 TrackerMaterialManager * matManager)
+    : m_athenaComps(athenaComps),
+      m_materialManager(matManager)
+  {}
+
+  StoreGateSvc * detStore() const {return m_athenaComps->detStore();}
+
+  IGeoDbTagSvc * geoDbTagSvc() const {return m_athenaComps->geoDbTagSvc();}
+
+  IRDBAccessSvc * rdbAccessSvc() const {return m_athenaComps->rdbAccessSvc();}
+  
+  IGeometryDBSvc * geomDB() const {return m_athenaComps->geomDB();}
+
+  TrackerMaterialManager * materialManager() const {return m_materialManager;}
+
+ //Declaring the Message method for further use
+  MsgStream& msg (MSG::Level lvl) const { return m_athenaComps->msg(lvl); }
+
+  //Declaring the Method providing Verbosity Level
+  bool msgLvl (MSG::Level lvl) const { return m_athenaComps->msgLvl(lvl); }
+
+  const TrackerDD::AthenaComps *  getAthenaComps() {return m_athenaComps;}
+  
+private:
+  const TrackerDD::AthenaComps *  m_athenaComps;
+  
+protected:
+  TrackerMaterialManager * m_materialManager;
+};
+
+} // end namespace
+
+#endif // TrackerGeoModelUtils_SubDetectorFactoryBase_H
+
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TubeVolData.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TubeVolData.h
new file mode 100755
index 000000000..fd282d0ec
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/TubeVolData.h
@@ -0,0 +1,59 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_TubeVolData_h
+#define TrackerGeoModelUtils_TubeVolData_h
+
+class IRDBRecord;
+#include <string>
+
+namespace TrackerDD {
+
+
+/// Helper class to read in generic TUBE, TUBS, CONS or PCON type volumes.
+
+class TubeVolData
+{
+ public:
+  enum VolShape {TUBE, TUBS, CONS, RADIAL};
+  
+  TubeVolData(const IRDBRecord *);
+  double rmin() const {return m_rmin1;}
+  double rmax() const {return m_rmax1;}
+  double rmin2() const {return m_rmin2;}
+  double rmax2() const {return m_rmax2;}
+  double length() const {return m_length;}
+  double zMid() const {return m_zMid;}
+  double phiStart() const {return m_phiStart;}
+  double phiDelta() const {return m_phiDelta;}
+  double phiStep() const {return m_phiStep;}
+  int nRepeat() const {return m_nRepeat;}
+  int radialDivisions() const {return m_radialDiv;}
+  bool bothZ() const {return m_bothZ;}
+
+  VolShape shape() const {return m_shape;}
+  std::string material() const;
+  
+  double maxRadius() const;
+
+ private:
+  const IRDBRecord * m_record;
+  bool m_bothZ;
+  int m_nRepeat;
+  int m_radialDiv;
+  double m_phiStart;
+  double m_phiDelta;
+  double m_phiStep;
+  double m_rmin1;
+  double m_rmin2;
+  double m_rmax1;
+  double m_rmax2;
+  double m_length;
+  double m_zMid;
+  VolShape m_shape{CONS};
+};
+
+} // end namespace
+
+#endif // TrackerGeoModelUtils_TubeVolData
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeBuilder.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeBuilder.h
new file mode 100644
index 000000000..fa28ce3b6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeBuilder.h
@@ -0,0 +1,73 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_VolumeBuilder_H
+#define TrackerGeoModelUtils_VolumeBuilder_H
+
+#include "TrackerGeoModelUtils/VolumeSplitterUtils.h"
+#include "TrackerGeoModelUtils/VolumeSplitter.h"
+#include "AthenaKernel/MsgStreamMember.h"
+
+#include <string>
+#include <vector>
+
+class TrackerMaterialManager;
+class GeoPhysVol;
+class GeoFullPhysVol;
+class GeoVPhysVol;
+class GeoTransform;
+class GeoShape;
+
+namespace TrackerDD {
+  class ServiceVolume;
+ 
+  class VolumeBuilder
+  {
+  public:
+    VolumeBuilder( const Zone & zone, const std::vector<const ServiceVolume * > & services);
+    VolumeBuilder(const std::vector<const ServiceVolume * > & services);
+    VolumeBuilder( const Zone & zone, const std::vector<const ServiceVolume * > & services,
+		   const std::vector<const ServiceVolume * > & servEnv, const std::vector<const ServiceVolume * > & servChild );
+
+    void setRegion(const std::string & region, double zcenter);
+    void setMaterialManager(TrackerMaterialManager * matManager) {m_matManager = matManager; }
+    const std::vector<const ServiceVolume *> & services();
+    const std::vector<const ServiceVolume * > & servicesEnv() ;
+    const std::vector<const ServiceVolume * > & servicesChild() ;
+
+    void buildAndPlace(const std::string & region, GeoPhysVol * parent, double zcenter = 0);
+    void buildAndPlace(const std::string & region, GeoFullPhysVol * parent, double zcenter = 0);
+    void buildAndPlaceEnvelope(const std::string & region, GeoFullPhysVol * parent, int iParent, int iElement, double zcenter = 0);
+    void buildAndPlaceEnvelope(const std::string & region, GeoPhysVol * parent, int iParent, int iElement, double zcenter = 0);
+    void addServices(const Zone & zone, const std::vector<const ServiceVolume * > & services);
+    GeoVPhysVol* build(int iElement);
+    int numCopies(int iElement);
+    GeoTransform * getPlacement(int iElement, int iCopy);
+    GeoTransform * getPlacementEnvelope(int iElement, int iCopy,  int iMothElement);
+
+    MsgStream& msg (MSG::Level lvl) const { return m_msg.get() << lvl; }
+    bool msgLvl (MSG::Level lvl) const { return m_msg.get().level() <= lvl; }
+
+    bool isEnvelopeOrChild(int iElement);
+    int  getEnvelopeNum(int iElement);
+    int  getParentNum(int iElement);
+    bool isChildService(int iElt,int iChld);
+    double getZcenter(int iElt);
+
+  private:
+    //const GeoShape * getShape(const ServiceVolume & param, double & volume);
+    
+    mutable Athena::MsgStreamMember m_msg;
+    std::string m_region;
+    double m_zcenter;
+    const std::vector<const ServiceVolume *>* m_services;
+    const std::vector<const ServiceVolume *>* m_servEnvelope;
+    const std::vector<const ServiceVolume *>* m_servChild;
+    VolumeSplitter m_splitter;
+    TrackerMaterialManager * m_matManager;
+
+  };
+ 
+}
+#endif // TrackerGeoModelUtils_VolumeBuidler_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitter.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitter.h
new file mode 100644
index 000000000..0a5a28fcb
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitter.h
@@ -0,0 +1,38 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_VolumeSplitter_H
+#define TrackerGeoModelUtils_VolumeSplitter_H
+
+#include "TrackerGeoModelUtils/VolumeSplitterUtils.h"
+
+#include <string>
+#include <vector>
+
+namespace TrackerDD {
+  class ServiceVolume;
+  
+  class VolumeSplitter
+  {
+  public:
+    VolumeSplitter();
+    ~VolumeSplitter();
+    const std::vector<const ServiceVolume *> & splitAll(const Zone & zone,  const std::vector<const ServiceVolume *>);
+    void split(const Zone & zone, const ServiceVolume & origVolume);
+    const std::vector<const ServiceVolume *> & getVolumes() const {return m_volumes;}
+    // Take ownership of volumes. If called user must delete the volumes. 
+    void takeOwnership() {m_ownVolumes = false;}
+  private:
+    Ray makeRay(const ServiceVolume & origVolume);
+    void makeVolumes(const Zone * zone, const ServiceVolume & origVolume);
+    void splitVolume(const Zone * zone, const ServiceVolume & vol);
+    void adjustR(const ServiceVolume & param, ServiceVolume * paramNew);
+
+    bool m_ownVolumes;
+    double m_epsilon;
+    std::vector<const ServiceVolume *> m_volumes;
+  };
+ 
+}
+#endif // TrackerGeoModelUtils_VolumeSplitter_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitterUtils.h b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitterUtils.h
new file mode 100644
index 000000000..7c821c879
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/TrackerGeoModelUtils/VolumeSplitterUtils.h
@@ -0,0 +1,200 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TrackerGeoModelUtils_VolumeSplitterUtils_H
+#define TrackerGeoModelUtils_VolumeSplitterUtils_H
+
+#include <string>
+#include <vector>
+#include <iostream>
+
+class GeoTube;
+class GeoPcon;
+
+namespace TrackerDD {
+
+  class Zone;
+
+  class Point
+  {
+  public:
+    Point();
+    Point(double z, double r);
+    bool valid() const {return m_valid;}
+    bool exit() const {return m_exit;} //point is an exit point.
+    bool last() const {return m_last;}
+
+    double z() const {return m_z;}
+    double r() const {return m_r;}
+    const Zone * child() const {return m_child;} // point belongs to child
+    void setChild(const Zone * zone) {m_child = zone;}
+    void setInvalid() {m_valid = false;}
+    void setExit() {m_exit = true;}
+    void setLast() {m_last = true;}
+  private:
+    bool m_valid;
+    bool m_exit;
+    bool m_last;
+    double m_z;
+    double m_r;
+    const Zone * m_child;
+  };
+
+  class Ray {
+  public:
+    Ray();
+    Ray(const Point & start,  const Point & end);
+    void set(const Point & start,  const Point & end);
+    const Point & start() const {return m_start;}
+    const Point & end() const {return m_end;}
+    bool valid() const {return m_valid;}
+    bool foundStart() const {return m_found;}
+    bool horizontal() const {return m_horizontal;}
+    bool vertical() const {return m_vertical;}
+    void setFound() {m_found = true;}
+    void setInvalid() {m_valid = false;}
+
+  private:
+    void setDirection();
+
+    bool  m_valid;
+    bool  m_found;
+    bool  m_horizontal;
+    bool  m_vertical;
+    Point m_start;
+    Point m_end;
+  };
+
+
+
+  class Zone {
+  public:
+    typedef std::vector<const Zone *>::const_iterator ChildIterator; 
+    Zone(const std::string & label, bool rotated = false);
+    virtual ~Zone();
+    virtual bool inSide(const Point & point) const = 0;
+    virtual Point findEntry(const Ray & ray) const = 0;
+    virtual Point findExit(const Ray & ray) const = 0;
+    void add(const Zone *);
+    ChildIterator begin() const {return m_children.begin();}
+    ChildIterator end() const {return m_children.end();}
+    const std::string & label() const {return m_label;}
+    bool rotated() const {return m_rotated;}
+  private:
+    std::string m_label;
+    bool m_rotated;
+    std::vector<const Zone *> m_children; 
+  };
+  
+  class UnboundedZone : public Zone {
+  public:
+    UnboundedZone(const std::string & label);
+    virtual bool inSide(const Point & point) const;
+    virtual Point findEntry(const Ray & ray) const;
+    virtual Point findExit(const Ray & ray) const;
+  };
+
+  class TubeZone : public Zone 
+  {
+  public:
+    TubeZone(const std::string & label, double zmin, double zmax, double rmin, double rmax, bool rotated = false);
+    TubeZone(const std::string & label, const GeoTube * shape, double zOffset, bool rotated = false);
+    virtual bool inSide(const Point & point) const;
+    virtual Point findEntry(const Ray & ray) const;
+    virtual Point findExit(const Ray & ray) const;
+    virtual double getRmin() const { return m_rmin; }
+    virtual double getRmax() const { return m_rmax; }
+    virtual double getZmin() const { return m_zmin; }
+    virtual double getZmax() const { return m_zmax; }
+  private:
+    bool inR(double r) const;
+    bool inZ(double z) const;
+    double m_zmin;
+    double m_zmax;
+    double m_rmin;
+    double m_rmax;
+  };
+  
+  class PconZone : public Zone 
+  {
+  public:
+    PconZone( const std::string & label, bool rotated = false);
+    PconZone(const std::string & label, const GeoPcon * shape, bool rotated = false);
+    void addPlane(double z, double rmin, double rmax);
+    virtual bool inSide(const Point & point) const;
+    virtual Point findEntry(const Ray & ray) const;
+    virtual Point findExit(const Ray & ray) const;
+  private:
+    bool inR(unsigned int i, double r) const;
+    bool inZ(unsigned int i, double z) const;
+    std::vector<double> m_z;
+    std::vector<double> m_rmin;
+    std::vector<double> m_rmax;
+  };
+
+  class Segment {
+  public:
+    Segment(const std::string & label, const Point & start, const Point & end, bool rotated = false);
+    const std::string & label() const {return m_label;}
+    bool rotated() const {return m_rotated;}
+    double zmin() const {return m_zmin;}
+    double zmax() const {return m_zmax;}
+    double rmin() const {return m_rmin;}
+    double rmax() const {return m_rmax;}
+    void print() const;
+  private:
+    std::string m_label;
+    bool m_rotated;
+    double m_zmin;
+    double m_zmax;
+    double m_rmin;
+    double m_rmax;
+  };
+
+  class SegmentList
+  {
+  public:
+    void add(const std::string & label, const Point & start, const Point & end, bool rotated = false);
+    void add(const Segment & segment);
+    unsigned int size() const {return m_segments.size();}
+    const Segment & getSegment(unsigned int i) const {return m_segments[i];}
+    bool horizontal() const;
+    void print() const;
+    //std::string getSegmentLabel(int i);
+    //double getSegmentZmin(int i);
+    //double getSegmentZmax(int i);
+    //double getSegmentRmin(int i);
+    //double getSegmentRmax(int i);
+  private:
+    std::vector<Segment> m_segments;
+  };
+
+
+  class SegmentSplitter
+  {
+  public:
+    const SegmentList & split(const Zone *, const Ray &);
+
+  private:
+    Ray addChildSegment(const Zone *, const Ray &);
+    void addSegment(const Zone *, const Point & start, const Point & end);
+    Point getNextBoundary(const Zone *, const Ray &);
+    Ray searchPoint(const Zone * zone, const Ray & ray);
+    Point nearestPoint(const Point & point1, const Point & point2);
+    
+  private:
+    SegmentList m_segments;
+    //m_ray;
+
+  };
+  
+  
+  std::ostream & operator<<(std::ostream & os, const TrackerDD::Point & point);
+  std::ostream & operator<<(std::ostream & os, const TrackerDD::Ray & ray);
+
+
+}
+
+
+#endif // TrackerGeoModelUtils_VolumeSplitterUtils_H
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/DistortedMaterialManager.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/DistortedMaterialManager.cxx
new file mode 100755
index 000000000..321fa22cc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/DistortedMaterialManager.cxx
@@ -0,0 +1,46 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+
+#include "TrackerGeoModelUtils/DistortedMaterialManager.h"
+#include "GeoModelInterfaces/StoredMaterialManager.h"
+#include "GeoModelUtilities/DecodeVersionKey.h"
+#include "AthenaKernel/MsgStreamMember.h"
+#include "StoreGate/StoreGate.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "GaudiKernel/ISvcLocator.h"
+#include "GaudiKernel/Bootstrap.h"
+
+namespace TrackerDD {
+  DistortedMaterialManager::DistortedMaterialManager() {
+    ISvcLocator* svcLocator = Gaudi::svcLocator(); // from Bootstrap
+
+    Athena::MsgStreamMember log("ExtraMaterialManager");
+    log << MSG::DEBUG << "Initialized Tracker Distorted Material Manager" << endmsg;
+
+    StoreGateSvc* detStore;
+    StatusCode sc;
+    sc = svcLocator->service("DetectorStore", detStore);
+    if (sc.isFailure()) log << MSG::FATAL << "Could not locate DetectorStore" << endmsg;
+
+    IRDBAccessSvc* rdbSvc;
+    sc = svcLocator->service("RDBAccessSvc", rdbSvc);
+    if (sc.isFailure()) log << MSG::FATAL << "Could not locate RDBAccessSvc" << endmsg;
+
+    // Get version tag and node for Tracker.
+    DecodeVersionKey versionKey("Tracker");
+    std::string detectorKey = versionKey.tag();
+    std::string detectorNode = versionKey.node();
+
+    log << MSG::DEBUG << "Retrieving Record Sets from database ..." << endmsg;
+    log << MSG::DEBUG << "Key = " << detectorKey << " Node = " << detectorNode << endmsg;
+
+    m_xMatTable = rdbSvc->getRecordsetPtr("TrackerExtraMaterial", detectorKey, detectorNode, "FASERDD");
+
+    const StoredMaterialManager* theGeoMaterialManager = 0;
+    sc = detStore->retrieve(theGeoMaterialManager, "MATERIALS");
+    if (sc.isFailure()) log << MSG::FATAL << "Could not locate GeoModel Material manager" << endmsg;
+    m_materialManager = theGeoMaterialManager;
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ExtraMaterial.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ExtraMaterial.cxx
new file mode 100755
index 000000000..fc9d83c81
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ExtraMaterial.cxx
@@ -0,0 +1,74 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/ExtraMaterial.h"
+#include "TrackerGeoModelUtils/GenericTubeMaker.h"
+#include "TrackerGeoModelUtils/TubeVolData.h"
+#include "TrackerGeoModelUtils/DistortedMaterialManager.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoTube.h"
+#include "GeoModelKernel/GeoTubs.h"
+#include "GeoModelKernel/GeoCons.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+
+#include "GeoModelInterfaces/AbsMaterialManager.h"
+
+#include <string>
+#include <sstream>
+#include <iostream>
+
+namespace TrackerDD {
+  ExtraMaterial::ExtraMaterial(IRDBRecordset_ptr xMatTable, const AbsMaterialManager* matManager)
+    : m_xMatTable(xMatTable),
+    m_matManager(matManager)
+  {}
+
+  ExtraMaterial::ExtraMaterial(const DistortedMaterialManager* manager)
+    : m_xMatTable(manager->extraMaterialTable()),
+    m_matManager(manager->materialManager())
+  {}
+
+  void
+  ExtraMaterial::add(GeoPhysVol* parent, const std::string& region, double zParent) {
+    add(parent, 0, region, zParent);
+  }
+
+  void
+  ExtraMaterial::add(GeoFullPhysVol* parent, const std::string& region, double zParent) {
+    add(0, parent, region, zParent);
+  }
+
+  void
+  ExtraMaterial::add(GeoPhysVol* parent, GeoFullPhysVol* fullparent, const std::string& region, double zParent) {
+    //std::cout << "Adding Extra material for region: " << region << ", zParent = " << zParent << std::endl;
+
+    for (unsigned int i = 0; i < m_xMatTable->size(); i++) {
+      std::ostringstream volnamestr;
+      volnamestr << "ExtraMaterial" << i;
+
+      //std::cout << "In Extra material " << i << std::endl;
+
+      if ((*m_xMatTable)[i]->getString("REGION") == region) {
+        //std::cout << "Extra material Match " << i << std::endl;
+
+        GenericTubeMaker tubeHelper((*m_xMatTable)[i]);
+        const GeoMaterial* material = m_matManager->getMaterial(tubeHelper.volData().material());
+        const GeoShape* shape = tubeHelper.buildShape();
+        GeoLogVol* logVol = new GeoLogVol(volnamestr.str(), shape, material);
+        GeoPhysVol* physVol = new GeoPhysVol(logVol);
+
+        if (parent) {
+          tubeHelper.placeVolume(parent, physVol, zParent);
+        } else {
+          tubeHelper.placeVolume(fullparent, physVol, zParent);
+        }
+      }
+    }
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/GenericTubeMaker.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/GenericTubeMaker.cxx
new file mode 100755
index 000000000..623cc4eb7
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/GenericTubeMaker.cxx
@@ -0,0 +1,164 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/GenericTubeMaker.h"
+#include "TrackerGeoModelUtils/TubeVolData.h"
+
+#include "GeoModelKernel/GeoTube.h"
+#include "GeoModelKernel/GeoTubs.h"
+#include "GeoModelKernel/GeoCons.h"
+#include "GeoModelKernel/GeoPcon.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include "RDBAccessSvc/IRDBRecord.h"
+
+namespace TrackerDD {
+  GenericTubeMaker::GenericTubeMaker(const IRDBRecord* record)
+    : m_record(record),
+    m_volData(record)
+  {}
+
+  std::string
+  GenericTubeMaker::materialName() const {
+    return m_record->getString("MATERIAL");
+  }
+
+  std::string
+  GenericTubeMaker::name() const {
+    return m_record->getString("NAME");
+  }
+
+  const GeoShape*
+  GenericTubeMaker::buildShape() {
+    const GeoShape* shape = 0;
+
+    switch (m_volData.shape()) {
+    case TubeVolData::TUBE:
+      shape = new GeoTube(m_volData.rmin(), m_volData.rmax(), 0.5 * m_volData.length());
+      break;
+
+    case TubeVolData::TUBS:
+      shape = new GeoTubs(m_volData.rmin(), m_volData.rmax(), 0.5 * m_volData.length(),
+                          m_volData.phiStart(), m_volData.phiDelta());
+      break;
+
+    case TubeVolData::CONS:
+      shape = new GeoCons(m_volData.rmin(), m_volData.rmin2(), m_volData.rmax(), m_volData.rmax2(),
+                          0.5 * m_volData.length(), m_volData.phiStart(), m_volData.phiDelta());
+      break;
+
+    case TubeVolData::RADIAL:
+      // This simulates the radial decrease in density.
+      double zstart = -0.5 * m_volData.length();
+      GeoPcon* shapeTmp = new GeoPcon(m_volData.phiStart(), m_volData.phiDelta());
+      shapeTmp->addPlane(zstart, m_volData.rmin(), m_volData.rmax());
+      double radialDelta = (m_volData.rmax() - m_volData.rmin()) / m_volData.radialDivisions();
+      for (int i = 0; i < m_volData.radialDivisions(); i++) {
+        double rIntermediate = m_volData.rmax() - i * radialDelta;
+        double reductionFactor = m_volData.rmin() / rIntermediate;
+        shapeTmp->addPlane(zstart + reductionFactor * m_volData.length(), m_volData.rmin(), rIntermediate);
+      }
+      shapeTmp->addPlane(zstart + m_volData.length(), m_volData.rmin(), m_volData.rmin());
+      shape = shapeTmp;
+      break;
+    }
+
+    return shape;
+  }
+
+  void
+  GenericTubeMaker::placeVolume(GeoPhysVol* parent, GeoVPhysVol* child, double zParent) {
+    placeVolume(parent, 0, child, zParent);
+  }
+
+  void
+  GenericTubeMaker::placeVolume(GeoFullPhysVol* fullparent, GeoVPhysVol* child, double zParent) {
+    placeVolume(0, fullparent, child, zParent);
+  }
+
+  void
+  GenericTubeMaker::placeVolTwoSide(GeoPhysVol* parentPos, GeoPhysVol* parentNeg, GeoVPhysVol* child, double zParent) {
+    placeVolTwoSide(parentPos, parentNeg, 0, 0, child, zParent);
+  }
+
+  void
+  GenericTubeMaker::placeVolTwoSide(GeoFullPhysVol* fullparentPos, GeoFullPhysVol* fullparentNeg, GeoVPhysVol* child,
+                                    double zParent) {
+    placeVolTwoSide(0, 0, fullparentPos, fullparentNeg, child, zParent);
+  }
+
+  void
+  GenericTubeMaker::placeVolume(GeoPhysVol* parent, GeoFullPhysVol* fullparent, GeoVPhysVol* child, double zParent) {
+    for (int iRepeat = 0; iRepeat < m_volData.nRepeat(); iRepeat++) {
+      double phi = m_volData.phiStep() * iRepeat;
+
+      GeoTransform* xform = 0;
+      double zOffset = m_volData.zMid() - zParent;
+      if (zOffset != 0 || iRepeat > 0) {
+        xform = new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi));
+      }
+
+      if (parent) {
+        if (xform) parent->add(xform);
+        parent->add(child);
+      } else {
+        if (xform) fullparent->add(xform);
+        fullparent->add(child);
+      }
+
+      // Place in negative z as well.
+      if (m_volData.bothZ()) {
+        GeoTransform* xformNeg = new GeoTransform(GeoTrf::RotateY3D(180 * Gaudi::Units::deg) * GeoTrf::TranslateZ3D(
+                                                    zOffset) * GeoTrf::RotateZ3D(phi));
+        if (parent) {
+          parent->add(xformNeg);
+          parent->add(child);
+        } else {
+          fullparent->add(xformNeg);
+          fullparent->add(child);
+        }
+      }
+    } // iRepeat loop
+  }
+
+  void
+  GenericTubeMaker::placeVolTwoSide(GeoPhysVol* parentPos, GeoPhysVol* parentNeg,
+                                    GeoFullPhysVol* fullparentPos, GeoFullPhysVol* fullparentNeg,
+                                    GeoVPhysVol* child, double zParent) {
+    for (int iRepeat = 0; iRepeat < m_volData.nRepeat(); iRepeat++) {
+      double phi = m_volData.phiStep() * iRepeat;
+      double zOffset = m_volData.zMid() - zParent;
+      const bool newXform((zOffset != 0)or(iRepeat > 0));
+
+      if (parentPos) {
+        if (newXform) {
+          parentPos->add(new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi)));
+        }
+        parentPos->add(child);
+      } else if (fullparentPos) {
+        if (newXform) {
+          fullparentPos->add(new GeoTransform(GeoTrf::TranslateZ3D(zOffset) * GeoTrf::RotateZ3D(phi)));
+        }
+        fullparentPos->add(child);
+      }
+
+      // Place in negative z as well.
+      if (m_volData.bothZ()) {
+        GeoTransform* xformNeg = new GeoTransform(GeoTrf::RotateY3D(180 * Gaudi::Units::deg) * GeoTrf::TranslateZ3D(
+                                                    zOffset) * GeoTrf::RotateZ3D(phi));
+        if (parentNeg) {
+          parentNeg->add(xformNeg);
+          parentNeg->add(child);
+        } else {
+          fullparentNeg->add(xformNeg);
+          fullparentNeg->add(child);
+        }
+      }
+    } // iRepeat loop
+  }
+}// end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/PairIndexMap.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/PairIndexMap.cxx
new file mode 100755
index 000000000..a407755c3
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/PairIndexMap.cxx
@@ -0,0 +1,20 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/PairIndexMap.h"
+
+namespace TrackerDD {
+  void
+  PairIndexMap::add(int first, int second, int value) {
+    m_map[std::make_pair(first, second)] = value;
+  }
+
+  int
+  PairIndexMap::find(int first, int second) const {
+    MapType::const_iterator iter = m_map.find(std::make_pair(first, second));
+    if (iter == m_map.end()) return -1;
+
+    return iter->second;
+  }
+}
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolume.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolume.cxx
new file mode 100755
index 000000000..6bf9974c3
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolume.cxx
@@ -0,0 +1,383 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+//
+// This class to hold general services
+//
+// The services support several different shapes. The meaning of the parameters
+// depends on the particular shape:
+//
+//
+// TUBE or empty
+//   Ignored: RIN2,ROUT2,PHI,WIDTH,REPEAT
+// TUBS
+//   Ignored: RIN2,ROUT2
+//   PHI: phi start location of tube sector
+//   WIDTH (CLHEP::deg): phi width of sector
+//   REPEAT: Repeat the tube sector this many times in phi with equal distance between them.
+// CONS, CONE
+//   WIDTH,REPEAT ignored if CONE
+//   RIN2,ROUT2: rmin, rmx at zmax. Same as RIN, ROUT if <=0.
+//   PHI, WIDTH, REPEAT same as TUBS
+// PGON
+//   Ignored: WIDTH
+//   RIN,ROUT,RIN2,ROUT2 defined at corner of polygon.
+//   PHI: phi start location of a corner
+//   REPEAT: Sides of polygon
+// PGON2
+//   Ignored: WIDTH
+//   RIN,ROUT,RIN2,ROUT2 defined at side of polygon.
+//   PHI: phi start location of center of side.
+//   REPEAT: Sides of polygon
+// PGON3 (pgon at outer edge, circular inner edge)
+//   Ignored: WIDTH
+//   RIN,RIN2 radius of inner edge (tube or cone)
+//   ROUT,ROUT2 defined at corner of polygon.
+//   PHI: phi start location of a corner
+//   REPEAT: Sides of polygon
+// PGON31 (pgon at inner edge, circular outer edge)
+//   Ignored: WIDTH
+//   RIN,RIN2 radius of inner edge (tube or cone)
+//   ROUT,ROUT2 defined at corner of polygon.
+//   PHI: phi start location of a corner
+//   REPEAT: Sides of polygon
+// PGON4 (pgon at outer edge, circular inner edge)
+//   Ignored: WIDTH
+//   RIN,RIN2 radius of inner edge (tube or cone)
+//   ROUTROUT2 defined at side of polygon.
+//   PHI: phi start location of center of side.
+//   REPEAT: Sides of polygon
+// ROD
+//   Ignored: ROUT, RIN2, ROUT2
+//   RIN: Radial position of center of tube
+//   PHI: phi position of center
+//   WIDTH (mm): diameter
+//   REPEAT: Repeat this many times in phi with equal distance between them.
+// ROD2  (hollow tube not centered around Z axis)
+//   Ignored: ROUT, ROUT2
+//   RIN: Radial position of center of tube
+//   RIN2: inner radius
+//   PHI: phi position of center
+//   WIDTH (mm): diameter
+//   REPEAT: Repeat this many times in phi with equal distance between them.
+// BOX
+//   Ignored: RIN2, ROUT2
+//   ROUT-RIN = thickness of box (radially)
+//   (RIN+ROUT)/2 = radial poistion of center of box
+//   PHI: phi position of center
+//   WIDTH (mm) = width of box
+//   REPEAT: Repeat this many times in phi with equal distance between them.
+// TRAP
+//   Ignored: RIN2, ROUT2
+//   ROUT-RIN = thickness of trapezoid (radially)
+//   (RIN+ROUT)/2 = radial poistion of center of trapzoid
+//   PHI: phi position of center
+//   WIDTH (mm) = width of trapezoid at center
+//   REPEAT: Repeat this many times in phi with equal distance between them.
+//
+//   **IMPORTANT NOTE** WIDTH can be in degrees or mm. See OraclePixGeoManager
+
+#include "TrackerGeoModelUtils/ServiceVolume.h"
+#include "GeoModelKernel/GeoTube.h"
+#include "GeoModelKernel/GeoTubs.h"
+#include "GeoModelKernel/GeoCons.h"
+#include "GeoModelKernel/GeoPgon.h"
+#include "GeoModelKernel/GeoBox.h"
+#include "GeoModelKernel/GeoTrap.h"
+#include "GeoModelKernel/GeoShapeSubtraction.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <string>
+#include <iostream>
+#include <sstream>
+#include <iomanip>
+
+namespace TrackerDD {
+  ServiceVolume::ServiceVolume()
+    : m_rmin(0),
+    m_rmax(0),
+    m_rmin2(0),
+    m_rmax2(0),
+    m_zmin(0),
+    m_zmax(0),
+    //m_volId(0),
+    m_zsymm(false),
+    m_geoShape(0),
+    m_material(0),
+    m_phiLoc(0),
+    m_phiWidth(0),
+    m_needsRotation(false),
+    m_sides(0),
+    m_nCopies(1),
+    //m_origLength(0),
+    m_origVolume(0),
+    m_volume(0),
+    m_safety(0),
+    m_lockGeoShape(0),
+    m_splittableR(true),
+    m_splittableZ(true),
+    m_envNum(0),
+    m_envParentNum(0),
+    m_zShift(0.)
+  {}
+
+
+  void
+  ServiceVolume::reduceSize(double safety) {
+    // Don't do anything if its a very thin volume.
+    if (length() > 4. * safety) {
+      if (m_zmax < m_zmin) std::swap(m_zmin, m_zmax);
+      m_safety = safety;
+    }
+    m_geoShape = 0;
+  }
+
+  void
+  ServiceVolume::setLabel(const std::string& name, int volId) {
+    std::ostringstream o;
+    o.fill('0');
+    o << name << std::setw(2) << volId;
+    m_label = o.str();
+  }
+
+  std::string
+  ServiceVolume::fullLabel() const {
+    if (m_volName.empty()) return m_label;
+
+    return m_label + "_" + m_volName;
+  }
+
+  void
+  ServiceVolume::print() const {
+    std::cout << m_rmin << " "
+              << m_rmax << " "
+              << m_zmin << " "
+              << m_zmax << " "
+              << m_region << " "
+              << fullLabel()
+              << std::endl;
+  }
+
+  const GeoShape*
+  ServiceVolume::getShape() const {
+    // If prebuilt then return
+    if (m_geoShape.get()) return m_geoShape.get();
+
+    //
+    // Dimensions
+    //
+    //double rmin = rmin();
+    //double rmax = rmax();
+    //double rmin2 = rmin2();
+    //double rmax2 = rmax2();
+    //double phiLoc = phiLoc();
+    //double phiWidth = phiWidth();
+    //int sides = sides();
+    //const std::string & shapeType = shapeType();
+
+    double halflength = 0.5 * length();
+
+    //std::cout << "Building service volume " << logName << ": "
+    //	      << rmin << ", "
+    //	      << rmax << ", "
+    //	      << halflength << ", "
+    //	      << materialName << std::endl;
+
+    const GeoShape* serviceShape = 0;
+    double volume = 0;
+
+    // Check if service needs to be shifted
+    //   if(fabs(m_zShift)>0.001)
+    //      std::cout<<"SHIFTED SERVICE : "<<m_volName<<" "<<m_shapeType<<std::endl;
+
+    if (m_shapeType.empty() || m_shapeType == "TUBE") {
+      serviceShape = new GeoTube(m_rmin, m_rmax, halflength);
+    } else if (m_shapeType == "TUBS") {
+      serviceShape = new GeoTubs(m_rmin, m_rmax, halflength, m_phiLoc, m_phiWidth);
+    } else if (m_shapeType == "CONS" || m_shapeType == "CONE") {
+      double phiWidthTmp = m_phiWidth;
+      if (m_shapeType == "CONE" || phiWidthTmp == 0) {
+        phiWidthTmp = 2 * M_PI;
+      }
+      serviceShape = new GeoCons(m_rmin, m_rmin2, m_rmax, m_rmax2, halflength, m_phiLoc, phiWidthTmp);
+    } else if (m_shapeType == "PGON") {
+      GeoPgon* shapeTmp = new GeoPgon(m_phiLoc, 2 * M_PI, m_sides);
+      shapeTmp->addPlane(-halflength, m_rmin, m_rmax);
+      shapeTmp->addPlane(halflength, m_rmin2, m_rmax2);
+      serviceShape = shapeTmp;
+    } else if (m_shapeType == "PGON2") {
+      // Radius defined at the side, not the corner
+      double alpha = M_PI / m_sides;
+      double cosalpha = cos(alpha);
+      double rminB = m_rmin / cosalpha;
+      double rmaxB = m_rmax / cosalpha;
+      double rmin2B = m_rmin2 / cosalpha;
+      double rmax2B = m_rmax2 / cosalpha;
+      GeoPgon* shapeTmp = new GeoPgon(m_phiLoc - alpha, 2 * M_PI, m_sides);
+      shapeTmp->addPlane(-halflength, rminB, rmaxB);
+      shapeTmp->addPlane(halflength, rmin2B, rmax2B);
+      serviceShape = shapeTmp;
+    } else if (m_shapeType == "PGON3" || m_shapeType == "PGON4") {
+      // Outer edge
+      GeoPgon* shapeTmp1 = 0;
+      if (m_shapeType == "PGON3") {
+        shapeTmp1 = new GeoPgon(m_phiLoc, 2 * M_PI, m_sides);
+        shapeTmp1->addPlane(-halflength, 0, m_rmax);
+        shapeTmp1->addPlane(halflength, 0, m_rmax2);
+      } else { //PGON4
+        double alpha = M_PI / m_sides;
+        double cosalpha = cos(alpha);
+        double rmaxB = m_rmax / cosalpha;
+        double rmax2B = m_rmax2 / cosalpha;
+        shapeTmp1 = new GeoPgon(m_phiLoc - alpha, 2 * M_PI, m_sides);
+        shapeTmp1->addPlane(-halflength, 0, rmaxB);
+        shapeTmp1->addPlane(halflength, 0, rmax2B);
+      }
+      // Don't trust boolean volume calculation.
+      volume = shapeTmp1->volume();
+      // Inner edge
+      GeoShape* shapeTmp2 = 0;
+      if (m_rmin == m_rmin2) {
+        shapeTmp2 = new GeoTube(0, m_rmin, halflength + 0.1 * Gaudi::Units::mm);
+        volume -= 2 * M_PI * m_rmin * m_rmin * halflength;
+      } else {
+        shapeTmp2 = new GeoCons(0, 0, m_rmin, m_rmin2, halflength + 0.1 * Gaudi::Units::mm, 0, 2 * M_PI);
+        volume -= 2 * M_PI * pow(0.5 * (m_rmin + m_rmin2), 2) * halflength;
+      }
+      serviceShape = &(shapeTmp1->subtract(*shapeTmp2));
+    }
+//   else if (m_shapeType == "PGON31"){
+//     // Outer edge
+//     GeoTube *shapeTmp1 = new GeoTube(0,m_rmax,halflength);
+//     halflength+=0.1*CLHEP::mm;
+//     double alpha = M_PI/m_sides;
+//     double cosalpha = cos(alpha);
+//     double rmaxB = m_rmin/cosalpha;
+//     double rmax2B = m_rmin2/cosalpha;
+//     GeoPgon* shapeTmp2 = new GeoPgon(m_phiLoc-alpha,2*M_PI,m_sides);
+//     shapeTmp2->addPlane(-halflength,0.,rmaxB);
+//     shapeTmp2->addPlane(halflength,0.,rmax2B);
+//     // Don't trust boolean volume calculation.
+//     volume = shapeTmp1->volume() - shapeTmp2->volume();
+//     serviceShape = &(shapeTmp1->subtract(*shapeTmp2));
+//   }
+    else if (m_shapeType == "ROD") {
+      serviceShape = new GeoTube(0, 0.5 * m_phiWidth, halflength);
+    } else if (m_shapeType == "ROD2") {
+      //    std::cout<<"ROD2 : "<<m_rmin<<" "<<m_rmin2<<" "<<0.5*m_phiWidth<<" "<<halflength<<std::endl;
+      serviceShape = new GeoTube(m_rmin2 - m_rmin, 0.5 * m_phiWidth, halflength);
+    } else if (m_shapeType == "BOX") {
+      serviceShape = new GeoBox(0.5 * (m_rmax - m_rmin), 0.5 * m_phiWidth, halflength);
+    } else if (m_shapeType == "TRAP") {
+      double thickness = 0.5 * (m_rmax - m_rmin);
+      double averad = 0.5 * (m_rmin + m_rmax);
+      double w1 = 0.5 * m_phiWidth * m_rmin / averad;
+      double w2 = 0.5 * m_phiWidth * m_rmax / averad;
+      serviceShape = new GeoTrap(halflength, 0, 0, thickness, w1, w2, 0, thickness, w1, w2, 0);
+    } else {
+      // msg(MSG::ERROR) << "Unrecognized shape for services" << m_shapeType << endmsg;
+      std::cout << "ServiceVolume: ERROR: Unrecognized shape for services" << m_shapeType << std::endl;
+    }
+
+    if (!volume && serviceShape != 0) volume = serviceShape->volume();
+
+    m_volume = volume;
+    m_geoShape.set(serviceShape);
+    return serviceShape;
+  }
+
+  double
+  ServiceVolume::volume() const {
+    // Make sure shape is already built.
+    getShape();
+    return m_volume;
+  }
+
+  void
+  ServiceVolume::setGeoShape(const GeoShape* geoShape, double volume) {
+    m_geoShape.reset();
+    if (geoShape) {
+      m_volume = volume;
+      // We allow a volume to specified as the volume calculation for some shapes (ie boolean volumes) are unreliable.
+      // If volume is not supplied, get it from the shape itself.
+      if (!m_volume) m_volume = geoShape->volume();
+      m_geoShape.set(geoShape);
+      m_lockGeoShape = true; // This disables resetGeoShape().
+      setShapeType("CUSTOM");
+    } else {
+      // If pass null pointer we unlock the shape.
+      m_lockGeoShape = false;
+    }
+  }
+
+  double
+  ServiceVolume::origVolume() const {
+    if (m_origVolume) return m_origVolume;
+
+    return volume();
+  }
+
+  void
+  ServiceVolume::setSplittable() {
+    m_splittableR = m_splittableZ = true;
+    if (m_shapeType == "CUSTOM") {
+      m_splittableR = m_splittableZ = false;
+    } else if (!(m_shapeType == "" || m_shapeType == "TUBE" || m_shapeType == "TUBS")) {
+      m_splittableR = false;
+    }
+  }
+
+  GeoShapeHolder::GeoShapeHolder()
+    : m_geoShape(0)
+  {}
+
+  GeoShapeHolder::GeoShapeHolder(const GeoShape* geoShape)
+    : m_geoShape(geoShape) {
+    if (m_geoShape) m_geoShape->ref();
+  }
+
+  GeoShapeHolder::~GeoShapeHolder() {
+    reset();
+  }
+
+  GeoShapeHolder::GeoShapeHolder(const GeoShapeHolder& rhs) {
+    m_geoShape = rhs.m_geoShape;
+    if (m_geoShape) m_geoShape->ref();
+  }
+
+  GeoShapeHolder&
+  GeoShapeHolder::operator = (const GeoShapeHolder& rhs) {
+    if (&rhs != this) {
+      reset();
+      m_geoShape = rhs.m_geoShape;
+      if (m_geoShape) m_geoShape->ref();
+    }
+    return *this;
+  }
+  
+  GeoShapeHolder&
+  GeoShapeHolder::operator = (GeoShapeHolder&& rhs) {
+    if (&rhs != this) {
+      if (m_geoShape) m_geoShape->unref();//this geoshape will be overwritten, so decrement its reference
+      m_geoShape = rhs.m_geoShape; //simply equate the pointers
+      rhs.m_geoShape=nullptr;      //render the original unusable for safety
+      //if (m_geoShape) m_geoShape->ref(); << no need to increment the reference; the original is moved here
+      //                                      with its original refcount intact.
+    }
+    return *this;
+  }
+
+  void
+  GeoShapeHolder::set(const GeoShape* geoShape) {
+    reset();
+    m_geoShape = geoShape;
+    if (m_geoShape) m_geoShape->ref();
+  }
+
+  void
+  GeoShapeHolder::reset() {
+    if (m_geoShape) m_geoShape->unref();
+    m_geoShape = 0;
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolumeMaker.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolumeMaker.cxx
new file mode 100755
index 000000000..f3e409f4d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/ServiceVolumeMaker.cxx
@@ -0,0 +1,375 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/ServiceVolumeMaker.h"
+#include "TrackerGeoModelUtils/ServiceVolume.h"
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+
+#include "GeoModelUtilities/DecodeVersionKey.h"
+
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "GeometryDBSvc/IGeometryDBSvc.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+namespace TrackerDD {
+  ServiceVolumeSchema::ServiceVolumeSchema() {
+    setSimpleSchema();
+  }
+
+  void
+  ServiceVolumeSchema::setPixelSchema() {
+    m_rmin = "RIN";
+    m_rmax = "ROUT";
+    m_rmin2 = "RIN2";
+    m_rmax2 = "ROUT2";
+    m_zmin = "ZIN";
+    m_zmax = "ZOUT";
+    m_zsymm = "ZSYMM";
+    m_materialName = "MATERIALNAME";
+    m_repeat = "REPEAT";
+    m_phiStart = "PHI";
+    m_phiDelta = "WIDTH";
+    m_width = "WIDTH";
+    m_shapeType = "SHAPE";
+    m_volName = "VOLNAME";
+    m_radialDiv = "";
+    m_phiStep = "";
+    m_volId = "FRAMENUM";
+    m_shiftFlag = "SHIFT";
+  }
+
+  void
+  ServiceVolumeSchema::setDefaultSchema() {
+    m_rmin = "RMIN";
+    m_rmax = "RMAX";
+    m_rmin2 = "RMIN2";
+    m_rmax2 = "RMAX2";
+    m_zmin = "ZMIN";
+    m_zmax = "ZMAX";
+    m_zsymm = "ZSYMM";
+    m_materialName = "MATERIAL";
+    m_repeat = "NREPEAT";
+    m_phiStart = "PHISTART";
+    m_phiDelta = "PHIDELTA";
+    m_width = "";
+    m_shapeType = "";
+    m_volName = "NAME";
+    m_radialDiv = "RADIAL";
+    m_phiStep = "PHISTEP";
+    m_volId = "";
+    m_shiftFlag = "SHIFT";
+  }
+
+  void
+  ServiceVolumeSchema::setSimpleSchema() {
+    m_rmin = "RMIN";
+    m_rmax = "RMAX";
+    m_rmin2 = "";
+    m_rmax2 = "";
+    m_zmin = "ZMIN";
+    m_zmax = "ZMAX";
+    m_zsymm = "ZSYMM";
+    m_materialName = "MATERIAL";
+    m_repeat = "";
+    m_phiStart = "";
+    m_phiDelta = "";
+    m_width = "";
+    m_shapeType = "";
+    m_volName = "NAME";
+    m_radialDiv = "";
+    m_phiStep = "";
+    m_volId = "";
+    m_shiftFlag = "SHIFT";
+  }
+
+  ServiceVolumeMakerMgr::ServiceVolumeMakerMgr(IRDBRecordset_ptr table, const ServiceVolumeSchema& schema,
+                                               const TrackerDD::AthenaComps* athenaComps)
+    : m_table(table),
+    m_schema(schema),
+    m_athenaComps(athenaComps)
+  {}
+
+  const IGeometryDBSvc*
+  ServiceVolumeMakerMgr::db() const {
+    return m_athenaComps->geomDB();
+  }
+
+  double
+  ServiceVolumeMakerMgr::rmin(int index) const {
+    return db()->getDouble(m_table, m_schema.rmin(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::rmax(int index) const {
+    return db()->getDouble(m_table, m_schema.rmax(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::rmin2(int index) const {
+    return db()->getDouble(m_table, m_schema.rmin2(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::rmax2(int index) const {
+    return db()->getDouble(m_table, m_schema.rmax2(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::zmin(int index) const {
+    return db()->getDouble(m_table, m_schema.zmin(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::zmax(int index) const {
+    return db()->getDouble(m_table, m_schema.zmax(), index) * Gaudi::Units::mm;
+  }
+
+  double
+  ServiceVolumeMakerMgr::phiDelta(int index) const {
+    return db()->getDouble(m_table, m_schema.phiDelta(), index) * Gaudi::Units::deg;
+  }
+
+  double
+  ServiceVolumeMakerMgr::width(int index) const {
+    if (m_schema.has_width()) {
+      return db()->getDouble(m_table, m_schema.width(), index) * Gaudi::Units::mm;
+    }
+    return 0;
+  }
+
+  double
+  ServiceVolumeMakerMgr::phiStart(int index) const {
+    return db()->getDouble(m_table, m_schema.phiStart(), index) * Gaudi::Units::deg;
+  }
+
+  double
+  ServiceVolumeMakerMgr::phiStep(int index) const {
+    if (m_schema.has_phiStep()) {
+      return db()->getDouble(m_table, m_schema.phiStep(), index) * Gaudi::Units::deg;
+    }
+    return 0;
+  }
+
+  bool
+  ServiceVolumeMakerMgr::zsymm(int index) const {
+    return db()->getInt(m_table, m_schema.zsymm(), index);
+  }
+
+  int
+  ServiceVolumeMakerMgr::repeat(int index) const {
+    return db()->getInt(m_table, m_schema.repeat(), index);
+  }
+
+  int
+  ServiceVolumeMakerMgr::radialDiv(int index) const {
+    if (m_schema.has_radial()) {
+      return db()->getInt(m_table, m_schema.radialDiv(), index);
+    } else {
+      return 0;
+    }
+  }
+
+  std::string
+  ServiceVolumeMakerMgr::shapeType(int index) const {
+    if (m_schema.has_shapeType()) {
+      if (db()->testField(m_table, m_schema.shapeType(), index)) {
+        return db()->getString(m_table, m_schema.shapeType(), index);
+      } else {
+        return "TUBE";
+      }
+    }
+    return "UNKNOWN";
+  }
+
+  std::string
+  ServiceVolumeMakerMgr::volName(int index) const {
+    if (db()->testField(m_table, m_schema.volName(), index)) {
+      return db()->getString(m_table, m_schema.volName(), index);
+    }
+    return "";
+  }
+
+  std::string
+  ServiceVolumeMakerMgr::materialName(int index) const {
+    return db()->getString(m_table, m_schema.materialName(), index);
+  }
+
+  unsigned int
+  ServiceVolumeMakerMgr::numElements() const {
+    return db()->getTableSize(m_table);
+  }
+
+  int
+  ServiceVolumeMakerMgr::volId(int index) const {
+    if (m_schema.has_volId()) {
+      return db()->getInt(m_table, m_schema.volId(), index);
+    }
+    return 0;
+  }
+
+  int
+  ServiceVolumeMakerMgr::shiftFlag(int index) const {
+    if (m_schema.has_shiftFlag()) {
+      if (db()->testField(m_table, m_schema.shiftFlag(), index)) return db()->getInt(m_table,
+                                                                                     m_schema.shiftFlag(), index);
+    }
+    return 0;
+  }
+
+  ServiceVolumeMaker::ServiceVolumeMaker(const std::string& label,
+                                         IRDBRecordset_ptr table, const ServiceVolumeSchema& schema,
+                                         const TrackerDD::AthenaComps* athenaComps)
+    : m_label(label) {
+    m_mgr = new ServiceVolumeMakerMgr(table, schema, athenaComps);
+  }
+
+  ServiceVolumeMaker::~ServiceVolumeMaker() {
+    for (unsigned int i = 0; i < m_services.size(); i++) {
+      delete m_services[i];
+    }
+    delete m_mgr;
+  }
+
+  const std::vector<const ServiceVolume*>&
+  ServiceVolumeMaker::makeAll() {
+    for (unsigned int ii = 0; ii < numElements(); ++ii) {
+      m_services.push_back(make(ii));
+    }
+    return m_services;
+  }
+
+  unsigned int
+  ServiceVolumeMaker::numElements() const {
+    return m_mgr->numElements();
+  }
+
+  ServiceVolume*
+  ServiceVolumeMaker::make(int ii) {
+    //
+    // Retrieve/calculate the parameters for the volume.
+    //
+    ServiceVolume* param = new ServiceVolume;
+
+    param->setMaterial(m_mgr->materialName(ii));
+    param->setRmin(m_mgr->rmin(ii));
+    param->setRmax(m_mgr->rmax(ii));
+    param->setZmin(m_mgr->zmin(ii));
+    param->setZmax(m_mgr->zmax(ii));
+    param->setZsymm(m_mgr->zsymm(ii));
+    param->setVolName(m_mgr->volName(ii));
+
+    double zShift = 0.;           // the famous IBL Z shift
+    param->setZShift(zShift);
+
+    int volId = m_mgr->volId(ii);
+    if (volId == 0) volId = ii + 1;
+
+    bool needsRotation = false;
+
+    // For TUBE there is no need to read the rest
+    std::string shapeType = m_mgr->shapeType(ii);
+    if (!m_mgr->schema().simple() && !shapeType.empty() && shapeType != "TUBE") {
+      double rmin2 = m_mgr->rmin2(ii);
+      double rmax2 = m_mgr->rmax2(ii);
+
+      if (rmin2 <= 0) rmin2 = param->rmin();
+      if (rmax2 <= 0) rmax2 = param->rmax();
+
+      int radialDiv = m_mgr->radialDiv(ii);
+
+      double phiDelta = m_mgr->phiDelta(ii);
+
+      bool fullPhiSector = false;
+      if (phiDelta == 0 || phiDelta >= 359.9 * Gaudi::Units::degree) {
+        phiDelta = 360 * Gaudi::Units::degree;
+        fullPhiSector = true;
+      }
+      //else {
+      //phiDelta -= 2*phiepsilon;
+      //phiStart += phiepsilon;
+      // }
+
+      if (shapeType == "UNKNOWN") {
+        if (radialDiv > 0) {
+          shapeType = "RADIAL";
+        } else if (param->rmin() == rmin2 && param->rmax() == rmax2) {
+          if (fullPhiSector) {
+            shapeType = "TUBE";
+          } else {
+            shapeType = "TUBS";
+          }
+        } else {
+          shapeType = "CONS";
+        }
+      }
+
+
+      int repeat = m_mgr->repeat(ii);
+      if (repeat == 0) repeat = 1;
+
+      double phiStart = m_mgr->phiStart(ii);
+      double phiWidth = phiDelta;
+
+      if (shapeType == "CONS" || shapeType == "TUBS") {
+        const double phiepsilon = 0.001 * Gaudi::Units::degree;
+        phiWidth -= 2 * phiepsilon;
+        phiStart += phiepsilon;
+      }
+
+      // Can be in degree or mm. Usually it is deg expect for BOX, TRAP and ROD shape
+      // Geometry manager makes no assumptions about units. So we must interpret here.
+      if (shapeType == "BOX" || shapeType == "ROD" || shapeType == "ROD2" || shapeType == "TRAP") {
+        phiWidth = m_mgr->width(ii); // in mm
+      }
+
+      if (shapeType == "PGON" || shapeType == "PGON2" ||
+          shapeType == "CONE" || shapeType == "CONS" ||
+          shapeType == "PGON3" || shapeType == "PGON4") {
+        if ((rmin2 != param->rmin()) || (rmax2 != param->rmax())) {
+          needsRotation = true;
+        }
+      }
+
+      int sides = 0;
+      int nCopies = 1;
+      if (shapeType == "PGON" || shapeType == "PGON2" ||
+          shapeType == "PGON3" || shapeType == "PGON4") {
+        sides = repeat;
+      } else {
+        nCopies = repeat;
+      }
+
+      // Force nCopies to 1 for TUBE and CONE
+      if (shapeType.empty() || shapeType == "TUBE" || shapeType == "CONE") {
+        nCopies = 1;
+      }
+
+      param->setShapeType(shapeType);
+      param->setRmin2(rmin2);
+      param->setRmax2(rmax2);
+      param->setPhiLoc(phiStart);
+      param->setPhiWidth(phiWidth);
+      param->setSides(sides);
+      param->setNCopies(nCopies);
+      //param->setRadialDiv(radialDiv);
+      //param->setPhiStep(phiStep);
+    }
+
+    param->setNeedsRotation(needsRotation);
+
+
+    //
+    // If zin is 0... (within 10^-5) this is a volume symmetric around
+    // the origin
+    //
+    if (std::abs(param->zmin()) < 0.000001) {
+      param->setZmin(-param->zmax());
+      param->setZsymm(false);
+    }
+
+    param->setLabel(m_label, volId);
+
+    return param;
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TopLevelPlacements.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TopLevelPlacements.cxx
new file mode 100755
index 000000000..f7261834b
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TopLevelPlacements.cxx
@@ -0,0 +1,123 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/TopLevelPlacements.h"
+#include "GaudiKernel/SystemOfUnits.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include <iostream>
+
+GeoTrf::Transform3D TopLevelPlacements::s_identityTransform = GeoTrf::Transform3D::Identity();
+
+TopLevelPlacements::TopLevelPlacements(IRDBRecordset_ptr topLevelTable)
+  : m_noTopLevelTable(true) {
+  fillPlacements(topLevelTable);
+}
+
+TopLevelPlacements::~TopLevelPlacements() {
+  std::map<std::string, Part*>::const_iterator iter;
+  for (iter = m_parts.begin(); iter != m_parts.end(); ++iter) delete iter->second;
+}
+
+const GeoTrf::Transform3D&
+TopLevelPlacements::transform(const std::string& partName) const {
+  Part* part = getPart(partName);
+
+  if (part) return part->transform;
+
+  return s_identityTransform;
+}
+
+bool
+TopLevelPlacements::present(const std::string& partName) const {
+  // If no table present assume everything is present.
+  if (m_noTopLevelTable) return true;
+
+  return(getPart(partName) != 0);
+}
+
+void
+TopLevelPlacements::fillPlacements(IRDBRecordset_ptr topLevelTable) {
+  if (topLevelTable.get() == 0) {
+    m_noTopLevelTable = true;
+    return;
+  }
+  m_noTopLevelTable = false;
+  int numParts = topLevelTable->size();
+  for (int i = 0; i < numParts; i++) {
+    const IRDBRecord* record = (*topLevelTable)[i];
+    std::string label = record->getString("LABEL");
+
+    Part* part = new Part;
+    part->label = label;
+    part->transform = partTransform(record);
+
+    m_parts[label] = part;
+  }
+}
+
+GeoTrf::Transform3D
+TopLevelPlacements::partTransform(const IRDBRecord* record) const {
+  double posX = record->getDouble("POSX") * Gaudi::Units::mm;
+  double posY = record->getDouble("POSY") * Gaudi::Units::mm;
+  double posZ = record->getDouble("POSZ") * Gaudi::Units::mm;
+  double rotX = record->getDouble("ROTX") * Gaudi::Units::degree;
+  double rotY = record->getDouble("ROTY") * Gaudi::Units::degree;
+  double rotZ = record->getDouble("ROTZ") * Gaudi::Units::degree;
+  int rotOrder = record->getInt("ROTORDER");
+
+  // Translation part
+  GeoTrf::Translate3D transform(posX, posY, posZ);
+
+  // If rotation is zero return translation
+  if (rotX == 0 && rotY == 0 && rotZ == 0) {
+    return transform;
+  }
+
+  // For rotation have to look at order.
+  // 123 means rotate around X, then Y , then Z.
+  // 312  means rotate around Z, then X , then Y.
+  // etc
+
+  int ixyz1 = rotOrder / 100 - 1;
+  int ixyz2 = (rotOrder % 100) / 10 - 1;
+  int ixyz3 = (rotOrder % 10) - 1;
+
+  if (ixyz1 < 0 || ixyz1 > 2 ||
+      ixyz2 < 0 || ixyz2 > 2 ||
+      ixyz3 < 0 || ixyz3 > 2) {
+    std::cout << "ERROR: Invalid rotation order:" << rotOrder << std::endl;
+    ixyz1 = 0;
+    ixyz2 = 1;
+    ixyz3 = 2;
+  }
+
+  // List of the three transforms
+  GeoTrf::Transform3D* xformList[3] = {
+    0, 0, 0
+  };
+  if (rotX != 0) xformList[0] = new GeoTrf::RotateX3D(rotX);
+  if (rotY != 0) xformList[1] = new GeoTrf::RotateY3D(rotY);
+  if (rotZ != 0) xformList[2] = new GeoTrf::RotateZ3D(rotZ);
+
+  GeoTrf::Transform3D rotation(GeoTrf::Transform3D::Identity());
+  if (xformList[ixyz1]) rotation = *(xformList[ixyz1]) * rotation;
+  if (xformList[ixyz2]) rotation = *(xformList[ixyz2]) * rotation;
+  if (xformList[ixyz3]) rotation = *(xformList[ixyz3]) * rotation;
+
+  delete xformList[0];
+  delete xformList[1];
+  delete xformList[2];
+
+  return transform * rotation;
+}
+
+TopLevelPlacements::Part*
+TopLevelPlacements::getPart(const std::string& partName) const {
+  std::map<std::string, Part*>::const_iterator iter;
+  iter = m_parts.find(partName);
+  if (iter == m_parts.end()) return 0;
+
+  return iter->second;
+}
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerDDAthenaComps.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerDDAthenaComps.cxx
new file mode 100755
index 000000000..254399ef2
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerDDAthenaComps.cxx
@@ -0,0 +1,35 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+
+namespace TrackerDD {
+  AthenaComps::AthenaComps(const std::string& msgStreamName)
+    : m_msg(msgStreamName),
+    m_detStore(0),
+    m_geoDbTagSvc(0),
+    m_rdbAccessSvc(0),
+    m_geometryDBSvc(0)
+  {}
+
+  void
+  AthenaComps::setDetStore(StoreGateSvc* detStore) {
+    m_detStore = detStore;
+  }
+
+  void
+  AthenaComps::setGeoDbTagSvc(IGeoDbTagSvc* geoDbTagSvc) {
+    m_geoDbTagSvc = geoDbTagSvc;
+  }
+
+  void
+  AthenaComps::setRDBAccessSvc(IRDBAccessSvc* rdbAccessSvc) {
+    m_rdbAccessSvc = rdbAccessSvc;
+  }
+
+  void
+  AthenaComps::setGeometryDBSvc(IGeometryDBSvc* geometryDBSvc) {
+    m_geometryDBSvc = geometryDBSvc;
+  }
+}
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerMaterialManager.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerMaterialManager.cxx
new file mode 100755
index 000000000..b67d834bb
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TrackerMaterialManager.cxx
@@ -0,0 +1,1042 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/TrackerMaterialManager.h"
+#include "TrackerGeoModelUtils/TrackerDDAthenaComps.h"
+#include "GeoModelInterfaces/AbsMaterialManager.h"
+#include "GeoModelInterfaces/StoredMaterialManager.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoElement.h"
+#include "GeoModelKernel/Units.h"
+#include "GaudiKernel/SystemOfUnits.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "GeometryDBSvc/IGeometryDBSvc.h"
+#include "StoreGate/StoreGateSvc.h"
+
+#include <iostream>
+#include <iomanip>
+#include <cmath>
+#include <stdexcept>
+
+// Constructor
+TrackerMaterialManager::TrackerMaterialManager(const std::string& managerName,
+                                           StoreGateSvc* detStore)
+  : m_managerName(managerName),
+  m_msg(managerName),
+  m_extraFunctionality(false),
+  m_athenaComps(0) {
+  m_materialManager = retrieveManager(detStore);
+}
+
+// Constructor
+TrackerMaterialManager::TrackerMaterialManager(const std::string& managerName,
+                                           StoreGateSvc* detStore,
+                                           IRDBRecordset_ptr weightTable,
+                                           const std::string& space,
+                                           bool extraFunctionality)
+  : m_managerName(managerName),
+  m_msg(managerName),
+  m_extraFunctionality(extraFunctionality),
+  m_athenaComps(0) {
+  m_materialManager = retrieveManager(detStore);
+
+  if (weightTable) addWeightTable(weightTable, space);
+
+  // For testing we add a few materials.
+  //m_weightMap["sct::CoolingBlock"] = MaterialByWeight(2.418*CLHEP::gram);
+  //m_weightMap["sct::CoolingBlock"] = MaterialByWeight(2*CLHEP::gram);
+  //m_weightMap["sct::BrlHybrid"] = MaterialByWeight("sct::Hybrid", 8*CLHEP::gram);
+  //m_weightMap["sct::FwdHybrid"] = MaterialByWeight("std::Carbon", 7.662*CLHEP::gram);
+}
+
+TrackerMaterialManager::TrackerMaterialManager(const std::string& managerName, StoreGateSvc* detStore,
+                                           IRDBRecordset_ptr weightTable,
+                                           IRDBRecordset_ptr compositionTable,
+                                           const std::string& space)
+  : m_managerName(managerName),
+  m_msg(managerName),
+  m_extraFunctionality(true),
+  m_athenaComps(0) {
+  m_materialManager = retrieveManager(detStore);
+
+  if (weightTable) addWeightTable(weightTable, space);
+  if (compositionTable) addCompositionTable(compositionTable, space);
+}
+
+TrackerMaterialManager::TrackerMaterialManager(const std::string& managerName,
+                                           const TrackerDD::AthenaComps* athenaComps)
+  : m_managerName(managerName),
+  m_msg(managerName),
+  m_extraFunctionality(true),
+  m_athenaComps(athenaComps) {
+  m_materialManager = retrieveManager(athenaComps->detStore());
+  addTextFileMaterials();
+}
+
+TrackerMaterialManager::~TrackerMaterialManager() {
+  // Dereference the materials.
+  MaterialStore::const_iterator iter;
+  for (iter = m_store.begin(); iter != m_store.end(); ++iter) {
+    iter->second->unref();
+  }
+}
+
+const AbsMaterialManager*
+TrackerMaterialManager::retrieveManager(StoreGateSvc* detStore) {
+  const StoredMaterialManager* theGeoMaterialManager = nullptr;
+
+  if (StatusCode::SUCCESS != detStore->retrieve(theGeoMaterialManager, "MATERIALS")) {
+    msg(MSG::FATAL) << "Cannot locate Materials";
+  }
+
+  return theGeoMaterialManager;
+}
+
+const GeoElement*
+TrackerMaterialManager::getElement(const std::string& elementName) const {
+  return m_materialManager->getElement(elementName);
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterial(const std::string& materialName) {
+  return extraScaledMaterial(materialName, getMaterialInternal(materialName));
+}
+
+bool
+TrackerMaterialManager::hasMaterial(const std::string& materialName) const {
+  return m_store.find(materialName) != m_store.end();
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialInternal(const std::string& materialName) const {
+  // First check local store of materials. If not found then get it from the GeoModel
+  // manager.
+  const GeoMaterial* material = getAdditionalMaterial(materialName);
+
+  if (!material) {
+    // This prints error message if not found.
+    material = m_materialManager->getMaterial(materialName);
+  }
+  return material;
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getAdditionalMaterial(const std::string& materialName) const {
+  MaterialStore::const_iterator iter;
+  if ((iter = m_store.find(materialName)) != m_store.end()) {
+    return iter->second;
+  } else {
+    return 0;
+  }
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getCompositeMaterialForVolume(const std::string& newMatName,
+                                                    const double volumeTot,
+                                                    const double volume1, const std::string& matName1,
+                                                    const double volume2, const std::string& matName2
+                                                    ) {
+  std::vector<std::string> baseMaterials;
+  std::vector<double> fracWeight;
+  baseMaterials.reserve(2);
+  fracWeight.reserve(2);
+
+  msg(MSG::DEBUG) << "Composite material : " << volumeTot / Gaudi::Units::cm3 << " = " << volume1 / Gaudi::Units::cm3 << " + " <<
+    volume2 / Gaudi::Units::cm3 << endmsg;
+  msg(MSG::DEBUG) << "Composite material : " << matName1 << " " << matName2 << endmsg;
+
+  double density1, density2;
+
+  MaterialWeightMap::const_iterator iter;
+  if ((iter = m_weightMap.find(matName1)) != m_weightMap.end()) {
+    const GeoMaterial* mat1 = getMaterialForVolume(matName1, volume1);
+    density1 = mat1->getDensity();
+    msg(MSG::DEBUG) << "Composite material 1 - weight : " << density1 / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+  } else {
+    const GeoMaterial* mat1 = getMaterial(matName1);
+    density1 = mat1->getDensity();
+    msg(MSG::DEBUG) << "Composite material 1 - standard : " << density1 / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+  }
+
+  if ((iter = m_weightMap.find(matName2)) != m_weightMap.end()) {
+    const GeoMaterial* mat2 = getMaterialForVolume(matName2, volume2);
+    density2 = mat2->getDensity();
+    msg(MSG::DEBUG) << "Composite material 2 - weight : " << density2 / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+  } else {
+    const GeoMaterial* mat2 = getMaterial(matName2);
+    density2 = mat2->getDensity();
+    msg(MSG::DEBUG) << "Composite material 2 - standard : " << density2 / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+  }
+
+  double weight1 = density1 * volume1;
+  double weight2 = density2 * volume2;
+  double invWeightTot = 1.0 / (weight1 + weight2);
+
+  double density = (weight1 + weight2) / volumeTot;
+
+  double frac1 = weight1 / (weight1 + weight2);
+  double frac2 = weight2 / (weight1 + weight2);
+  double density_2 = 1.0 / (frac1 / density1 + frac2 / density2);
+  double density_3 = (weight1 + weight2) / (volume1 + volume2);
+  msg(MSG::DEBUG) << "-> weights : " << weight1 / (GeoModelKernelUnits::gram) << " " << weight2 / (GeoModelKernelUnits::gram) << endmsg;
+  msg(MSG::DEBUG) << "-> density : " << density / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << "  " << density_2 /
+  (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << " " << density_3 / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+
+
+  baseMaterials.push_back(matName1);
+  baseMaterials.push_back(matName2);
+  fracWeight.push_back(weight1 * invWeightTot);
+  fracWeight.push_back(weight2 * invWeightTot);
+
+  return getMaterial(newMatName, baseMaterials, fracWeight, density);
+}
+
+// This creates a new material with specified density.
+
+// If a newName is supplied it creates the new material even if the orginal material
+// has the same density. It however first checks if the material with NewName exists.
+
+// If no new name is supplied then it checks the density of
+// the existing material. If it is consistent it returns the material.
+// If it is different it creates a material with the string "Modified" added to the
+// name.
+
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterial(const std::string& origMaterialName,
+                                  double density,
+                                  const std::string& newName) {
+  return extraScaledMaterial(origMaterialName, newName,
+                             getMaterialInternal(origMaterialName, density, newName));
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialInternal(const std::string& origMaterialName,
+                                          double density,
+                                          const std::string& newName) {
+  std::string newName2 = newName;
+  bool newNameProvided = !newName2.empty();
+  if (!newNameProvided) {
+    newName2 = origMaterialName + "Modified";
+  }
+
+  const GeoMaterial* newMaterial = 0;
+
+  // First see if we already have the modified material
+  const GeoMaterial* material = getAdditionalMaterial(newName2);
+  if (material) {
+    if (!compareDensity(material->getDensity(), density)) {
+      msg(MSG::WARNING) << "Density is not consistent for material " << newName2
+                        << "  " << material->getDensity() / (GeoModelKernelUnits::gram / Gaudi::Units::cm3)
+                        << " / " << density / (GeoModelKernelUnits::gram / Gaudi::Units::cm3) << endmsg;
+    }
+    newMaterial = material;
+  } else {
+    const GeoMaterial* origMaterial = getMaterialInternal(origMaterialName);
+    newMaterial = origMaterial;
+    if (origMaterial) {
+      // If no new name was provided we check if the density is compatible
+      // and if so we return the original material.
+      if (newNameProvided || !compareDensity(origMaterial->getDensity(), density)) {
+        // create new material
+        GeoMaterial* newMaterialTmp = new GeoMaterial(newName2, density);
+        newMaterialTmp->add(const_cast<GeoMaterial*>(origMaterial), 1.);
+        addMaterial(newMaterialTmp);
+        newMaterial = newMaterialTmp;
+      }
+    }
+  }
+  return newMaterial;
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialScaled(const std::string& origMaterialName,
+                                        double scaleFactor,
+                                        const std::string& newName) {
+  return extraScaledMaterial(origMaterialName, newName,
+                             getMaterialScaledInternal(origMaterialName, scaleFactor, newName));
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialScaledInternal(const std::string& origMaterialName,
+                                                double scaleFactor,
+                                                const std::string& newName) {
+  // Don't allow large scale factors
+  if (scaleFactor > 1000 || scaleFactor < 0.001) {
+    msg(MSG::ERROR) << "Scale factor must be between 0.001 and 1000." << endmsg;
+    return 0;
+  }
+
+  const GeoMaterial* origMaterial = getMaterialInternal(origMaterialName);
+
+  // If scalefactor is 1 and no new name is requested
+  // then just return the orginal material
+  if (newName.empty() && scaleFactor == 1.) return origMaterial;
+
+  const GeoMaterial* newMaterial = 0;
+
+  if (origMaterial) {
+    double density = origMaterial->getDensity() * scaleFactor;
+    std::string newName2 = newName;
+    if (newName2.empty()) {
+      // Create name using the scale factor.
+      int scaleInt = static_cast<int>(scaleFactor * 10000);
+      int scale1 = scaleInt / 10000;
+      int scale2 = scaleInt % 10000;
+
+      std::ostringstream os;
+      os << origMaterialName << scale1 << "_" << std::setw(4) << std::setfill('0') << scale2;
+      newName2 = os.str();
+    }
+
+    newMaterial = getMaterialInternal(origMaterialName, density, newName2);
+  }
+
+  return newMaterial;
+}
+
+void
+TrackerMaterialManager::addMaterial(GeoMaterial* material) {
+  std::string name(material->getName());
+  if (m_store.find(name) != m_store.end()) {
+    msg(MSG::WARNING) << "Ignoring attempt to redefine an existing material: " << name << endmsg;
+    // Delete the material if it is not already ref counted.
+    material->ref();
+    material->unref();
+    //std::cout << m_store[name] << std::endl;
+  } else {
+    material->lock();
+    material->ref();
+    m_store[name] = material;
+
+    if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Created new material: " << name << ", " << material->getDensity() /
+      (Gaudi::Units::g / Gaudi::Units::cm3) << " g/cm3" << endmsg;
+  }
+}
+
+bool
+TrackerMaterialManager::compareDensity(double d1, double d2) const {
+  return(std::abs(d1 / d2 - 1.) < 1e-5);
+}
+
+void
+TrackerMaterialManager::addWeightTable(IRDBRecordset_ptr weightTable, const std::string& space) {
+  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Reading in weight table: " << weightTable->nodeName() << endmsg;
+  // If not using geometryDBSvc revert to old version
+  if (!db()) {
+    if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "GeometryDBSvc not available. Using old version." << endmsg;
+    addWeightTableOld(weightTable, space);
+    return;
+  }
+  for (unsigned int i = 0; i < db()->getTableSize(weightTable); i++) {
+    std::string materialName = db()->getString(weightTable, "MATERIAL", i);
+    if (!space.empty()) {
+      materialName = space + "::" + materialName;
+    }
+    std::string materialBase;
+    if (db()->testField(weightTable, "BASEMATERIAL", i)) {
+      materialBase = db()->getString(weightTable, "BASEMATERIAL", i);
+    }
+    double weight = db()->getDouble(weightTable, "WEIGHT", i) * GeoModelKernelUnits::gram;
+    //std::cout << materialName << " " << materialBase << " " << weight/CLHEP::g <<  std::endl;
+
+    bool linearWeightFlag = false;
+    if (m_extraFunctionality && db()->testField(weightTable, "LINWEIGHTFLAG", i)) {
+      linearWeightFlag = db()->getInt(weightTable, "LINWEIGHTFLAG", i);
+    }
+
+    if (m_weightMap.find(materialName) != m_weightMap.end()) {
+      msg(MSG::WARNING) << "Material: " << materialName << " already exists in weight table" << endmsg;
+    } else {
+      msg(MSG::DEBUG) << "Adding " << materialName
+                      << " weight " << weight
+                      << " linearWeightFlag " << linearWeightFlag
+                      << " raw weight " << db()->getDouble(weightTable, "WEIGHT", i)
+                      << " m_extraFunctionality " << m_extraFunctionality
+                      << " to weight table" << endmsg;
+      m_weightMap[materialName] = MaterialByWeight(materialBase, weight, linearWeightFlag);
+    }
+  }
+}
+
+void
+TrackerMaterialManager::addWeightMaterial(std::string materialName, std::string materialBase, double weight,
+                                        int linearWeightFlag) {
+  // Weight in gr
+  weight = weight * GeoModelKernelUnits::gram;
+
+  if (m_weightMap.find(materialName) != m_weightMap.end()) {
+    msg(MSG::WARNING) << "Material: " << materialName << " already exists in weight table" << endmsg;
+  } else {
+    msg(MSG::DEBUG) << "Adding " << materialName
+                    << " weight " << weight
+                    << " linearWeightFlag " << linearWeightFlag
+                    << " to weight table" << endmsg;
+    m_weightMap[materialName] = MaterialByWeight(materialBase, weight, linearWeightFlag);
+  }
+}
+
+void
+TrackerMaterialManager::addWeightTableOld(IRDBRecordset_ptr weightTable, const std::string& space) {
+  for (unsigned int i = 0; i < weightTable->size(); i++) {
+    const IRDBRecord* record = (*weightTable)[i];
+    std::string materialName = record->getString("MATERIAL");
+    if (!space.empty()) {
+      materialName = space + "::" + materialName;
+    }
+    std::string materialBase;
+    if (!record->isFieldNull("BASEMATERIAL")) {
+      materialBase = record->getString("BASEMATERIAL");
+    }
+    double weight = record->getDouble("WEIGHT") * GeoModelKernelUnits::gram;
+    //std::cout << materialName << " " << materialBase << " " << weight/CLHEP::g <<  std::endl;
+
+    bool linearWeightFlag = false;
+    if (m_extraFunctionality) {
+      linearWeightFlag = record->getInt("LINWEIGHTFLAG");
+    }
+
+    if (m_weightMap.find(materialName) != m_weightMap.end()) {
+      msg(MSG::WARNING) << "Material: " << materialName << " already exists in weight table" << endmsg;
+    } else {
+      m_weightMap[materialName] = MaterialByWeight(materialBase, weight, linearWeightFlag);
+    }
+  }
+}
+
+void
+TrackerMaterialManager::addCompositionTable(IRDBRecordset_ptr compositionTable, const std::string& space) {
+  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Reading in composition table: " << compositionTable->nodeName() << endmsg;
+
+  if (!db()) {
+    msg(MSG::ERROR) << "GeometryDBSvc not available. Unable to read in composition table." << endmsg;
+  }
+  for (unsigned int i = 0; i < db()->getTableSize(compositionTable); i++) {
+    std::string materialName = db()->getString(compositionTable, "MATERIAL", i);
+    if (!space.empty()) {
+      materialName = space + "::" + materialName;
+    }
+
+    std::string componentName = db()->getString(compositionTable, "COMPONENT", i);
+    int count = db()->getInt(compositionTable, "COUNT", i);
+    double factor = db()->getDouble(compositionTable, "FACTOR", i);
+    double actualLength = db()->getDouble(compositionTable, "ACTUALLENGTH", i);
+
+    m_matCompositionMap.insert(std::pair<std::string, MaterialComponent>(materialName,
+                                                                         MaterialComponent(componentName,
+                                                                                           count * factor,
+                                                                                           actualLength)));
+  }
+}
+
+void
+TrackerMaterialManager::addScalingTable(IRDBRecordset_ptr scalingTable) {
+  if (!scalingTable) return;
+
+  if (db()->getTableSize(scalingTable) == 0) return;
+
+  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Reading in extra material scaling table: " << scalingTable->nodeName() <<
+    endmsg;
+  if (!db()) {
+    msg(MSG::ERROR) << "GeometryDBSvc not available. Unable to read in scaling table." << endmsg;
+  }
+  for (unsigned int i = 0; i < db()->getTableSize(scalingTable); i++) {
+    std::string materialName = db()->getString(scalingTable, "MATERIAL", i);
+    double scalingFactor = db()->getDouble(scalingTable, "FACTOR", i);
+
+    if (msgLvl(MSG::DEBUG)) {
+      if (scalingFactor >= 0 || scalingFactor == 1) {
+        msg(MSG::DEBUG) << "Material " << materialName << " will be scaled by: " << scalingFactor << endmsg;
+      } else {
+        // -ve or scalefactor = 1 means will not be scaled.
+        msg(MSG::DEBUG) << "Material " << materialName << " will be NOT be scaled." << endmsg;
+      }
+    }
+    if (m_scalingMap.find(materialName) != m_scalingMap.end()) {
+      msg(MSG::WARNING) << "Overriding material: " << materialName << " which already exists in scaling table" <<
+      endmsg;
+    }
+    m_scalingMap[materialName] = scalingFactor;
+  }
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialForVolume(const std::string& materialName, double volume, const std::string& newName) {
+  // Make sure we have a valid volume size.
+  if (volume <= 0) {
+    msg(MSG::ERROR) << "Invalid volume : " << volume << endmsg;
+    return 0;
+  }
+
+  // Find if material is in the weight table.
+  // If so we use the information to create a material with the
+  // density calculated from the volume and weight. If a base material
+  // is specified in the weight table, then a new material is made
+  // which is the same as the base material but with the new
+  // density. If no base material is specified then there should be a
+  // material already existing with that name. If the existing material already has the
+  // correct density it is used, otherwise a new material is created
+  // with the string "Modified" added to the material name.
+
+  MaterialWeightMap::const_iterator iter;
+  if ((iter = m_weightMap.find(materialName)) != m_weightMap.end()) {
+    const std::string& materialBase = iter->second.name;
+    double weight = iter->second.weight;
+    double density = weight / volume;
+    if (iter->second.linearWeightFlag) {
+      msg(MSG::ERROR) << "Material defined by linear weight cannot be created with getMaterialForVolume method: " <<
+      materialName << endmsg;
+    }
+
+    if (msgLvl(MSG::VERBOSE)) {
+      msg(MSG::VERBOSE)
+        <<
+      "Found material in weight table - name, base, weight(g), volume(cm3), density(g/cm3): "
+        << materialName << ", "
+        << materialBase << ", "
+        << weight / GeoModelKernelUnits::gram << ", "
+        << volume / Gaudi::Units::cm3 << ", "
+        << density / (Gaudi::Units::g / Gaudi::Units::cm3) << endmsg;
+    }
+
+    if (materialBase.empty()) {
+      return getMaterial(materialName, density, newName);
+    } else {
+      if (newName.empty()) {
+        return getMaterial(materialBase, density, materialName);
+      } else {
+        return getMaterial(materialBase, density, newName);
+      }
+    }
+  } else {
+    // If not in the weight table we just return the material.
+    // This is not an error.
+    if (msgLvl(MSG::VERBOSE))
+      msg(MSG::VERBOSE)
+        << "Material not in weight table, using standard material: "
+        << materialName
+        << ", volume(cm3) = " << volume / Gaudi::Units::cm3
+        << endmsg;
+    return getMaterial(materialName);
+  }
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialForVolumeLength(const std::string& materialName, double volume, double length,
+                                                 const std::string& newName) {
+  // In the case there is no material composition table (MaterialCompositionMap) and no linear weights are used this
+  // will
+  // behave the same way as getMaterialForVolume.
+  // If the material is in the MaterialCompositionMap it will build a material using the components
+  // from that table. If any components are defined as a linear weight the length is used to calculate the
+  // weight (ie linear weight * length).
+
+
+  std::string name;
+  if (newName.empty()) {
+    name = materialName;
+  } else {
+    name = newName;
+  }
+
+  // Make sure we have a valid volume size.
+  if (volume <= 0 || length <= 0) {
+    msg(MSG::ERROR) << "Invalid volume or length : " << volume << ", " << length << endmsg;
+    return 0;
+  }
+
+  // First look in the predefinded collections
+  std::pair<MaterialCompositionMap::const_iterator, MaterialCompositionMap::const_iterator> iterRange;
+  iterRange = m_matCompositionMap.equal_range(materialName);
+  if (iterRange.first != m_matCompositionMap.end()) {
+    if (msgLvl(MSG::VERBOSE)) {
+      msg(MSG::VERBOSE)
+        << "Found material in material composition table:" << materialName << endmsg;
+    }
+
+    std::vector<double> factors;
+    std::vector<std::string> components;
+    for (MaterialCompositionMap::const_iterator iter = iterRange.first; iter != iterRange.second; iter++) {
+      double factorTmp = iter->second.factor;
+      if (iter->second.actualLength > 0) factorTmp *= iter->second.actualLength / length;
+      factors.push_back(factorTmp);
+      components.push_back(iter->second.name);
+    }
+    return getMaterialForVolumeLength(name, components, factors, volume, length);
+  }
+
+  // Next look in weight table
+  MaterialWeightMap::const_iterator iter;
+  if ((iter = m_weightMap.find(materialName)) != m_weightMap.end()) {
+    const std::string& materialBase = iter->second.name;
+    double weight = iter->second.weight;
+    double density = weight / volume;
+    if (iter->second.linearWeightFlag) weight *= length;
+
+    if (materialBase.empty()) {
+      return getMaterial(materialName, density, newName);
+    } else {
+      return getMaterial(materialBase, density, name);
+    }
+  } else {
+    // Otherwise we just return the material.
+    // This is not an error.
+    if (msgLvl(MSG::VERBOSE))
+      msg(MSG::VERBOSE)
+        << "Material not in weight table, using standard material: "
+        << materialName
+        << ", volume(cm3) = " << volume / Gaudi::Units::cm3
+        << endmsg;
+    return getMaterial(materialName);
+  }
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialForVolumeLength(const std::string& name,
+                                                 const std::string& materialComponent,
+                                                 double factor,
+                                                 double volume,
+                                                 double length) {
+  std::vector<std::string> tmpMaterialComponents(1, materialComponent);
+  std::vector<double> tmpFactors(1, factor);
+  return getMaterialForVolumeLength(name, tmpMaterialComponents, tmpFactors, volume, length);
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialForVolumeLength(const std::string& name,
+                                                 const std::vector<std::string>& materialComponents,
+                                                 const std::vector<double> factors,
+                                                 double volume,
+                                                 double length) {
+  // Make sure we have a valid volume size.
+  if (volume <= 0 || length <= 0) {
+    msg(MSG::ERROR) << "Invalid volume or length : " << volume << ", " << length << endmsg;
+    return 0;
+  }
+
+  if (!factors.empty() && factors.size() < materialComponents.size()) {
+    msg(MSG::WARNING) << "getMaterialForVolumeLength: factor vector size too small. Setting remaining factors to 1." <<
+    endmsg;
+  }
+
+  std::vector<std::string> baseMaterials;
+  std::vector<double> fracWeight;
+  baseMaterials.reserve(materialComponents.size());
+  fracWeight.reserve(materialComponents.size());
+
+  double totWeight = 0;
+  for (unsigned int iComp = 0; iComp < materialComponents.size(); ++iComp) {
+    const std::string& materialName = materialComponents[iComp];
+
+    // First search in MaterialWeightMap
+    MaterialWeightMap::const_iterator iter;
+    if ((iter = m_weightMap.find(materialName)) != m_weightMap.end()) {
+      const std::string& materialBase = iter->second.name;
+      double weight = iter->second.weight;
+
+      if (iComp < factors.size()) {
+        weight *= factors[iComp];
+      }
+      msg(MSG::DEBUG) << "Material " << materialName
+                      << " found in weight table, weight " << iter->second.weight / GeoModelKernelUnits::gram
+                      << " factor " << factors[iComp]
+                      << " w*fac*len " << weight * length / GeoModelKernelUnits::gram
+                      << " basMat " << materialBase
+                      << " linear? " << iter->second.linearWeightFlag << endmsg;
+
+      if (iter->second.linearWeightFlag) weight *= length;
+      if (materialBase.empty()) {
+        // If no base material then name should refer to an already defined material
+        baseMaterials.push_back(materialName);
+      } else {
+        baseMaterials.push_back(materialBase);
+      }
+      fracWeight.push_back(weight); // Will be normalized later.
+      totWeight += weight;
+    } else {
+      // If not in the weight table we look for a regular material.
+      // I don't think this would normally be intentional so we give a warning message.
+      /*
+         if (msgLvl(MSG::WARNING))
+         msg(MSG::WARNING)
+         << "Component material not in weight table, using standard material: "
+         << materialName << " with weight= "
+         << factors.at(iComp) * length
+         << endmsg;
+         const GeoMaterial * material = getMaterialInternal(materialName);
+       */
+
+      // In this case the factor should correspond to the linear weight
+      double weight = factors.at(iComp) * length * GeoModelKernelUnits::gram;
+
+      // If material not found, will get error message when attempting to make the material. So carry on here.
+      baseMaterials.push_back(materialName);
+      fracWeight.push_back(weight);
+      totWeight += weight;
+    }
+  }
+
+  if (msgLvl(MSG::VERBOSE)) {
+    msg(MSG::VERBOSE) << "Creating material from multiple components: " << name << endmsg;
+    for (unsigned int i = 0; i < materialComponents.size(); ++i) {
+      msg(MSG::VERBOSE) << " Component " << i << ": Name = " << baseMaterials[i]
+                        << " Weight(g) = " << fracWeight[i] / Gaudi::Units::g << endmsg;
+    }
+  }
+
+  for (unsigned int i = 0; i < fracWeight.size(); ++i) {
+    fracWeight[i] /= totWeight;
+  }
+  double density = totWeight / volume;
+
+  return getMaterial(name, baseMaterials, fracWeight, density);
+}
+
+// Add materials assuming they simply occupy the same volume.
+/*
+   const GeoMaterial*
+   TrackerMaterialManager::getMaterial(const std::vector<const GeoMaterial *> & materialComponents,
+                  const std::string & newName)
+   {
+   const GeoMaterial * newMaterial = 0;
+   std::vector<double> fracWeight;
+   fracWeight.reserve(materialComponents.size());
+
+   for (unsigned int i = 0; i < materialComponents.size(); i++) {
+    const GeoMaterial * origMaterial = materialComponents[i];
+    double weight = origMaterial->getDensity();
+    fracWeight.push_back(weight);
+    totWeight += weight;
+   }
+   for (unsigned int i = 0; i < fracWeight.size(); ++i) {
+    fracWeight[i] /= totWeight;
+   }
+   return getMaterial(materialComponents, fracWeight, totWeight, newName);
+   }
+
+   const GeoMaterial*
+   TrackerMaterialManager::getMaterial(const std::vector<std::string> & materialComponents,
+                  const std::string & newName)
+   {
+   const GeoMaterial * newMaterial = 0;
+
+   // First see if we already have the modified material
+   const GeoMaterial* material = getAdditionalMaterial(newName);
+
+   for (unsigned int i = 0; i < materialComponents.size(); i++) {
+    const GeoMaterial * origMaterial = getMaterial(materialComponents[i]);
+    components.push_back(origMaterial);
+   }
+   return getMaterial(components,  newName);
+   }
+ */
+
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterial(const std::string& name,
+                                  const std::vector<std::string>& materialComponents,
+                                  const std::vector<double>& fracWeight,
+                                  double density) {
+  return extraScaledMaterial(name, getMaterialInternal(name, materialComponents, fracWeight, density));
+}
+
+const GeoMaterial*
+TrackerMaterialManager::getMaterialInternal(const std::string& name,
+                                          const std::vector<std::string>& materialComponents,
+                                          const std::vector<double>& fracWeight,
+                                          double density) {
+  const GeoMaterial* newMaterial = 0;
+
+  // First see if we already have the material
+  const GeoMaterial* material = getAdditionalMaterial(name);
+
+  if (material) {
+    if (!compareDensity(material->getDensity(), density)) {
+      msg(MSG::WARNING) << "Density is not consistent for material " << name << endmsg;
+    }
+    newMaterial = material;
+  } else {
+    GeoMaterial* newMaterialTmp = new GeoMaterial(name, density);
+    for (unsigned int i = 0; i < materialComponents.size(); i++) {
+      const GeoMaterial* origMaterial = getMaterialInternal(materialComponents[i]);
+      if (origMaterial) {
+        newMaterialTmp->add(const_cast<GeoMaterial*>(origMaterial), fracWeight[i]);
+      } else {
+        msg(MSG::ERROR) << "Material component missing " << materialComponents[i] << endmsg;
+      }
+    }
+    addMaterial(newMaterialTmp);
+    newMaterial = newMaterialTmp;
+  }
+  return newMaterial;
+}
+
+const IGeometryDBSvc*
+TrackerMaterialManager::db() {
+  if (m_athenaComps) return m_athenaComps->geomDB();
+
+  return 0;
+}
+
+void
+TrackerMaterialManager::addTextFileMaterials() {
+  const std::string materialTable = "ExtraMaterials";
+  const std::string componentsTable = "ExtraMatComponents";
+
+  // Look for tables ExtraMaterials and ExtraMatComponents.
+  // These are text file only tables where extra materials are desired or
+  // one wants to override some database ones.
+  if (!db() || !db()->testField("", "TableSize:" + materialTable) || !db()->getTableSize(materialTable)
+      || !db()->testField("", "TableSize:" + componentsTable) || !db()->getTableSize(componentsTable)) return;
+
+
+  msg(MSG::INFO) << "Extra materials being read in from text file." << endmsg;
+
+  typedef std::map<std::string, MaterialDef> MatMap;
+  MatMap materials;
+
+  // read in material table
+  for (unsigned int iMat = 0; iMat < db()->getTableSize(materialTable); iMat++) {
+    std::string materialName = db()->getString(materialTable, "NAME", iMat);
+    double density = db()->getDouble(materialTable, "DENSITY", iMat) * Gaudi::Units::g / Gaudi::Units::cm3;
+    materials[materialName] = MaterialDef(materialName, density);
+  }
+
+  // read in material component table
+  for (unsigned int iComp = 0; iComp < db()->getTableSize(componentsTable); iComp++) {
+    std::string materialName = db()->getString(componentsTable, "NAME", iComp);
+    std::string compName = db()->getString(componentsTable, "COMPNAME", iComp);
+    double fracWeight = db()->getDouble(componentsTable, "FRACTION", iComp);
+    MatMap::iterator iter = materials.find(materialName);
+    if (iter != materials.end()) {
+      iter->second.addComponent(compName, fracWeight);
+    } else {
+      msg(MSG::ERROR) << "Attemp to add material component, " << compName << ", to non-existing material: " <<
+      materialName << endmsg;
+    }
+  }
+
+  //Now create the materials
+  int matCount = 0;
+  int matCountLast = -1;
+  bool someUndefined = true;
+  // While there are still undefined materials keep creating materials.
+  // Check also that the matCount had change to avoid endless loop due to cyclicly
+  // defined materials.
+  while (someUndefined && matCount != matCountLast) {
+    matCountLast = matCount;
+    someUndefined = false;
+    for (MatMap::iterator iter = materials.begin(); iter != materials.end(); ++iter) {
+      MaterialDef& tmpMat = iter->second;
+      if (!tmpMat.isCreated()) {
+        // Check if any components are materials in this table and if they are defined.
+        // If not flag that there are undefined materials and go to next material
+        bool compsDefined = true;
+        for (unsigned int iComp = 0; iComp < tmpMat.numComponents(); ++iComp) {
+          std::string compName = tmpMat.compName(iComp);
+          MatMap::iterator iter2 = materials.find(compName);
+          if (iter2 != materials.end()) {
+            if (!iter2->second.isCreated()) {
+              compsDefined = false;
+              break;
+            }
+          }
+        }
+        if (compsDefined) {
+          createMaterial(tmpMat);
+          tmpMat.setCreated();
+          matCount++;
+        } else {
+          someUndefined = true;
+        }
+      }
+    }
+  }
+
+
+  if (someUndefined) {
+    msg(MSG::ERROR) << "Not all materials could be defined due to cyclic definitions" << endmsg;
+  }
+}
+
+void
+TrackerMaterialManager::createMaterial(const MaterialDef& material) {
+  if (material.numComponents() == 0) {
+    msg(MSG::ERROR) << "Material has no components: " << material.name() << endmsg;
+    return;
+  }
+
+  // If total of fractions is greater than 1.1 then assume material is define by ratio of atoms.
+  double totWeight = material.totalFraction();
+  bool byAtomicRatio = false;
+  if (totWeight > 1.1) {
+    byAtomicRatio = true;
+    for (unsigned int i = 0; i < material.numComponents(); i++) {
+      if (material.compName(i).find("::") != std::string::npos) {
+        // If component name has "::" in it then its not an element.
+        msg(MSG::ERROR) << "Material, " << material.name()
+                        <<
+        ", is assumed to be defined by atomic ratio (due to total fraction > 1) but component is not an element: "
+                        << material.compName(i) << endmsg;
+        return;
+      }
+      const GeoElement* element = getElement(material.compName(i));
+      if (!element) {
+        msg(MSG::ERROR) << "Error making material " << material.name() << ". Element not found: " <<
+        material.compName(i) << endmsg;
+        return;
+      }
+      totWeight += material.fraction(i) * element->getA();
+    }
+  } else {
+    // Check if total fraction is close to 1.
+    if (std::abs(totWeight - 1) > 0.01) {
+      msg(MSG::WARNING) << "Total fractional weight does not sum to 1. Will renormalize. Total = " << totWeight <<
+      endmsg;
+    }
+  }
+  // Now build the material
+  GeoMaterial* newMaterial = new GeoMaterial(material.name(), material.density());
+  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Creating material: " << material.name()
+                                          << " with density: " << material.density() / (Gaudi::Units::g / Gaudi::Units::cm3) <<
+    endmsg;
+  for (unsigned int i = 0; i < material.numComponents(); i++) {
+    double fracWeight = material.fraction(i) / totWeight;
+    if (material.compName(i).find("::") == std::string::npos) {
+      const GeoElement* element = getElement(material.compName(i));
+      if (!element) {
+        msg(MSG::ERROR) << "Error making material " << material.name() << ". Element not found: " <<
+        material.compName(i) << endmsg;
+        // delete the partially created material
+        newMaterial->ref();
+        newMaterial->unref();
+        return;
+      }
+      if (byAtomicRatio) {
+        fracWeight = material.fraction(i) * element->getA() / totWeight;
+      }
+      newMaterial->add(const_cast<GeoElement*>(element), fracWeight);
+      if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Component: " << material.compName(i) << " " << fracWeight << endmsg;
+    } else {
+      const GeoMaterial* materialTmp = getMaterialInternal(material.compName(i));
+      if (!materialTmp) {
+        msg(MSG::ERROR) << "Error making material " << material.name() << ". Component not found: " <<
+        material.compName(i) << endmsg;
+        // delete the partially created material
+        newMaterial->ref();
+        newMaterial->unref();
+        return;
+      }
+      if (byAtomicRatio) {
+        // Should not happen as already checked that all components were elements.
+        msg(MSG::ERROR) << "Unexpected Error" << endmsg;
+      }
+      newMaterial->add(const_cast<GeoMaterial*>(materialTmp), fracWeight);
+      if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Component: " << material.compName(i) << " " << fracWeight << endmsg;
+    }
+  }
+  newMaterial->lock();
+  addMaterial(newMaterial);
+}
+
+TrackerMaterialManager::MaterialDef::MaterialDef()
+  : m_density(0),
+  m_created(false)
+{}
+
+TrackerMaterialManager::MaterialDef::MaterialDef(const std::string& name, double density)
+  : m_name(name),
+  m_density(density),
+  m_created(false)
+{}
+
+void
+TrackerMaterialManager::MaterialDef::addComponent(const std::string& compName, double fraction) {
+  m_components.push_back(compName);
+  m_fractions.push_back(fraction);
+}
+
+double
+TrackerMaterialManager::MaterialDef::totalFraction() const {
+  double sum = 0;
+
+  for (unsigned int i = 0; i < m_fractions.size(); i++) {
+    sum += m_fractions[i];
+  }
+  return sum;
+}
+
+// We need the original name as the GeoMaterial from the standard
+// material manager has its namespace dropped.  We have two versions
+// of extraScaledMaterial. One where two names are provided. In this
+// version if newName is not empty that is used, otherwise
+// materialName is used.  The other just has one name and that is the
+// one that is used.
+
+const GeoMaterial*
+TrackerMaterialManager::extraScaledMaterial(const std::string& materialName,
+                                          const std::string& newName,
+                                          const GeoMaterial* origMaterial) {
+  if (newName.empty()) {
+    return extraScaledMaterial(materialName, origMaterial);
+  } else {
+    return extraScaledMaterial(newName, origMaterial);
+  }
+}
+
+const GeoMaterial*
+TrackerMaterialManager::extraScaledMaterial(const std::string& materialName, const GeoMaterial* origMaterial) {
+  if (!origMaterial) throw std::runtime_error(std::string("Invalid material: ") + materialName);
+
+  double scaleFactor = getExtraScaleFactor(materialName);
+  // -1 (or any -ve number) indicates material is not scaled. And if the scale factor
+  // is 1 then there is no need to create a new material.
+  if (scaleFactor < 0 || scaleFactor == 1 || materialName.find("Ether") != std::string::npos) return origMaterial;
+
+  if (scaleFactor == 0) return getMaterialInternal("std::Vacuum");
+
+  std::string newName = materialName + "_ExtraScaling";
+
+  // Check if it is already made.
+  const GeoMaterial* newMaterial = getAdditionalMaterial(newName);
+
+  // Already made so we return it.
+  if (newMaterial) return newMaterial;
+
+  // Otherwise we need to make it.
+  double density = origMaterial->getDensity() * scaleFactor;
+
+  // create new material
+  GeoMaterial* newMaterialTmp = new GeoMaterial(newName, density);
+  newMaterialTmp->add(const_cast<GeoMaterial*>(origMaterial), 1.);
+  addMaterial(newMaterialTmp);
+  newMaterial = newMaterialTmp;
+
+  return newMaterial;
+}
+
+double
+TrackerMaterialManager::getExtraScaleFactor(const std::string& materialName) {
+  // If name is found in map we return the corresponding scale factor.
+  // The special name "ALL" indicates all materials are scaled.
+  // Individual materials can be excluded from scaling by giving either
+  // a -ve scaling factor or just specifying a scaling factor of 1.
+  // A scaling factor of 0 means the material will be replaced by vacuum.
+
+  ExtraScaleFactorMap::const_iterator iter = m_scalingMap.find(materialName);
+  if (iter != m_scalingMap.end()) {
+    return iter->second;
+  } else {
+    // Check for special names
+    // ALL means everything scaled. Do not scale air or vacuum (unless explicity requested)
+    iter = m_scalingMap.find("ALL");
+    if (iter != m_scalingMap.end() && materialName != "std::Air" && materialName != "std::Vacuum") {
+      return iter->second;
+    }
+  }
+
+  // If not found then return -1 to indicate material is not to be scaled.
+  return -1;
+}
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TubeVolData.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TubeVolData.cxx
new file mode 100755
index 000000000..958532bb6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/TubeVolData.cxx
@@ -0,0 +1,101 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/TubeVolData.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <cmath>
+#include <string>
+#include <iostream>
+
+namespace TrackerDD {
+  std::string
+  TubeVolData::material() const {
+    return m_record->getString("MATERIAL");
+  }
+
+  double
+  TubeVolData::maxRadius() const {
+    return std::max(m_rmax1, m_rmax2);
+  }
+
+  TubeVolData::TubeVolData(const IRDBRecord* record)
+    : m_record(record),
+    m_bothZ(false),
+    m_nRepeat(0),
+    m_radialDiv(0),
+    m_phiStart(0.),
+    m_phiDelta(0.),
+    m_phiStep(0.),
+    m_rmin1(0.),
+    m_rmin2(0.),
+    m_rmax1(0.),
+    m_rmax2(0.),
+    m_length(0.),
+    m_zMid(0.) {
+    // add an 2*epsilon gap between phi sectors.
+    const double phiepsilon = 0.001 * Gaudi::Units::degree;
+
+    bool fullPhiSector = false;
+
+
+    // Get the parameters which we need to do some preprocessing with.
+    // The rest are obtained directly from RDB.
+
+    if (m_record) {
+      m_phiStart = m_record->getDouble("PHISTART") * Gaudi::Units::degree;
+      m_phiDelta = m_record->getDouble("PHIDELTA") * Gaudi::Units::degree;
+      m_phiStep = m_record->getDouble("PHISTEP") * Gaudi::Units::degree;
+      m_nRepeat = m_record->getInt("NREPEAT");
+      m_rmin1 = m_record->getDouble("RMIN") * Gaudi::Units::mm;
+      m_rmax1 = m_record->getDouble("RMAX") * Gaudi::Units::mm;
+      m_rmin2 = m_record->getDouble("RMIN2") * Gaudi::Units::mm;
+      m_rmax2 = m_record->getDouble("RMAX2") * Gaudi::Units::mm;
+      m_radialDiv = 0;
+      if (!m_record->isFieldNull("RADIAL")) {
+        m_radialDiv = m_record->getInt("RADIAL");
+      }
+      m_bothZ = 0;
+      if (!m_record->isFieldNull("ZSYMM")) {
+        m_bothZ = m_record->getInt("ZSYMM");
+      }
+
+      double zmin = m_record->getDouble("ZMIN") * Gaudi::Units::mm;
+      double zmax = m_record->getDouble("ZMAX") * Gaudi::Units::mm;
+      m_length = std::abs(zmax - zmin);
+      m_zMid = 0.5 * (zmin + zmax);
+
+      if (m_phiDelta == 0 || m_phiDelta >= 359.9 * Gaudi::Units::degree) {
+        m_phiDelta = 360 * Gaudi::Units::degree;
+        fullPhiSector = true;
+      } else {
+        m_phiDelta -= 2 * phiepsilon;
+        m_phiStart += phiepsilon;
+      }
+
+      // Force nRepeat to be >= 1;
+      if (m_nRepeat <= 0) m_nRepeat = 1;
+      // if PHISTEP==0 then set it to be equi-distant steps filling up phi.
+      if (m_phiStep == 0) {
+        m_phiStep = 360 * Gaudi::Units::degree / m_nRepeat;
+      }
+
+      if (m_rmin2 <= 0) m_rmin2 = m_rmin1;
+      if (m_rmax2 <= 0) m_rmax2 = m_rmax1;
+
+      if (m_radialDiv > 0) {
+        m_shape = TubeVolData::RADIAL;
+      } else if (m_rmin1 == m_rmin2 && m_rmax1 == m_rmax2) {
+        if (fullPhiSector) {
+          m_shape = TubeVolData::TUBE;
+        } else {
+          m_shape = TubeVolData::TUBS;
+        }
+      } else {
+        m_shape = TubeVolData::CONS;
+      }
+    } else std::cout << "Unexpected ERROR in ExtraMaterial!" << std::endl;
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeBuilder.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeBuilder.cxx
new file mode 100755
index 000000000..61b0460fc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeBuilder.cxx
@@ -0,0 +1,393 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/VolumeBuilder.h"
+#include "TrackerGeoModelUtils/ServiceVolume.h"
+#include "TrackerGeoModelUtils/TrackerMaterialManager.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoLogVol.h"
+#include "GeoModelKernel/GeoPhysVol.h"
+#include "GeoModelKernel/GeoFullPhysVol.h"
+#include "GeoModelKernel/GeoMaterial.h"
+#include "GeoModelKernel/GeoTransform.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+namespace TrackerDD {
+  VolumeBuilder::VolumeBuilder(const Zone& zone, const std::vector<const ServiceVolume* >& services)
+    : m_msg("TrackerDDVolumeBuilder"),
+    m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
+    m_zcenter(0),
+    m_services(0),
+    m_servEnvelope(0),
+    m_servChild(0),
+    m_matManager(0) {
+    m_splitter.splitAll(zone, services);
+  }
+
+  VolumeBuilder::VolumeBuilder(const std::vector<const ServiceVolume* >& services)
+    : m_msg("TrackerDDVolumeBuilder"),
+    m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
+    m_zcenter(0),
+    m_services(&services),
+    m_servEnvelope(0),
+    m_servChild(0),
+    m_matManager(0)
+  {}
+
+  VolumeBuilder::VolumeBuilder(const Zone& zone, const std::vector<const ServiceVolume* >& services,
+                               const std::vector<const ServiceVolume* >& servEnvelope,
+                               const std::vector<const ServiceVolume* >& servChild)
+    : m_msg("TrackerDDVolumeBuilder"),
+    m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
+    m_zcenter(0),
+    m_services(0),
+    m_servEnvelope(&servEnvelope),
+    m_servChild(&servChild),
+    m_matManager(0) {
+    m_splitter.splitAll(zone, services);
+  }
+
+  void
+  VolumeBuilder::addServices(const Zone& zone, const std::vector<const ServiceVolume* >& services) {
+    m_splitter.splitAll(zone, services);
+  }
+
+  void
+  VolumeBuilder::setRegion(const std::string& region, double zcenter) {
+    m_region = region;
+    m_zcenter = zcenter;
+  }
+
+  const std::vector<const ServiceVolume* >&
+  VolumeBuilder::services() {
+    // Return volumes defined in VolumeSplitter
+    if (m_services) return *m_services;
+    return m_splitter.getVolumes();
+  }
+
+  const std::vector<const ServiceVolume* >&
+  VolumeBuilder::servicesEnv() {
+    return *m_servEnvelope;
+  }
+
+  const std::vector<const ServiceVolume* >&
+  VolumeBuilder::servicesChild() {
+    return *m_servChild;
+  }
+
+  void
+  VolumeBuilder::buildAndPlace(const std::string& region, GeoPhysVol* parent, double zcenter) {
+    // Get volumes defined by Volume splitter and add them on top GeoPhysVol
+    setRegion(region, zcenter);
+    for (unsigned int iElement = 0; iElement < services().size(); ++iElement)
+      if (!isEnvelopeOrChild(iElement)) {
+        GeoVPhysVol* physVol = build(iElement);
+        if (physVol) {
+          physVol->ref();
+          for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
+            parent->add(getPlacement(iElement, iCopy));
+            parent->add(physVol);
+          }
+          physVol->unref();//should delete if never added
+        }
+      }
+  }
+
+  void
+  VolumeBuilder::buildAndPlace(const std::string& region, GeoFullPhysVol* parent, double zcenter) {
+    // Get volumes defined by Volume splitter and add them on top GeoPhysVol
+    setRegion(region, zcenter);
+    for (unsigned int iElement = 0; iElement < services().size(); ++iElement) {
+      if (!isEnvelopeOrChild(iElement)) {
+        //    GeoVPhysVol* physVol = build(iElement);
+        GeoVPhysVol* physVol = build(iElement);
+        if (physVol) {
+          physVol->ref();
+          for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
+            parent->add(getPlacement(iElement, iCopy));
+            parent->add(physVol);
+          }
+          physVol->unref();//should delete if never used
+        }
+      }
+    }
+    // if region is not Pixel -> stop here
+    if (region.compare("Pixel") != 0) return;
+
+    for (unsigned int iElement = 0; iElement < services().size(); ++iElement) {
+      if (getEnvelopeNum(iElement) > 0 && services()[iElement]->envelopeParent() == 0) {
+        buildAndPlaceEnvelope(region, parent, -1, iElement, zcenter);
+      }
+    }
+  }
+
+  void
+  VolumeBuilder::buildAndPlaceEnvelope(const std::string& region, GeoFullPhysVol* parent, int iParent, int iElement,
+                                       double zcenter) {
+    GeoPhysVol* physVol = dynamic_cast<GeoPhysVol*>(build(iElement));
+    if (physVol) {
+      physVol->ref();
+      for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
+        if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() > 0) {
+          // if volume is a child volume : build and place it
+          buildAndPlaceEnvelope(region, physVol, iElement, iChild, zcenter);
+        }
+      }
+      for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
+        if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() == 0) {
+          // if volume is not a child volume
+          GeoVPhysVol* physVol_child = build(iChild);
+          if (physVol_child) {
+            physVol_child->ref();
+            for (int iCopy2 = 0; iCopy2 < numCopies(iChild); ++iCopy2) {
+              physVol->add(getPlacementEnvelope(iChild, iCopy2, iElement));
+              physVol->add(physVol_child);
+            }
+            physVol_child->unref();//should delete if was never added
+          }
+        }
+      }
+      for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
+        // add all the copies
+        if (iParent < 0) parent->add(getPlacement(iElement, iCopy));
+        else parent->add(getPlacementEnvelope(iElement, iCopy, iParent));
+        parent->add(physVol);
+      }
+      physVol->unref(); ///should delete even if it was never added
+    }
+  }
+
+  void
+  VolumeBuilder::buildAndPlaceEnvelope(const std::string& region, GeoPhysVol* parent, int iParent, int iElement,
+                                       double zcenter) {
+    GeoPhysVol* physVol = dynamic_cast<GeoPhysVol*>(build(iElement));
+    if (physVol) {
+      physVol->ref();
+      for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
+        if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() > 0) {
+          // if volume is a child volume : build and place it
+          buildAndPlaceEnvelope(region, physVol, iElement, iChild, zcenter);
+        }
+      }
+      for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
+        if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() == 0) {
+          // if volume is not a child volume
+          GeoVPhysVol* physVol_child = build(iChild);
+          if (physVol_child) {
+            physVol_child->ref();
+            for (int iCopy2 = 0; iCopy2 < numCopies(iChild); ++iCopy2) {
+              physVol->add(getPlacementEnvelope(iChild, iCopy2, iElement));
+              physVol->add(physVol_child);
+            }
+            physVol_child->unref(); //will delete physVol_child if never used
+          }
+        }
+      }
+      for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
+        // add all the copies
+        if (iParent < 0) parent->add(getPlacement(iElement, iCopy));
+        else parent->add(getPlacementEnvelope(iElement, iCopy, iParent));
+        parent->add(physVol);
+      }
+      physVol->unref();//will delete physvol if it was never used
+    }
+  }
+
+  GeoVPhysVol*
+  VolumeBuilder::build(int iElement) {
+    if (m_region == "None") {
+      msg(MSG::ERROR) << "No region set. Cannot build services" << endmsg;
+      return nullptr;
+    }
+    const ServiceVolume& param = *(services()[iElement]);
+    // If the subelement does not belong to the current region return 0.
+    if (param.region() != m_region) return 0;
+
+    const GeoShape* serviceShape = param.getShape();
+    double volume = param.origVolume();
+    std::string logName = param.fullLabel();
+    const GeoMaterial* serviceMat = param.material();
+    std::string materialName;
+    if (!serviceMat) {
+      materialName = param.materialName();
+      if (m_matManager) {
+        //serviceMat = m_matManager->getMaterialForVolume(materialName,volume/param.fractionInRegion());
+        // FIXME
+        serviceMat = m_matManager->getMaterialForVolume(materialName, volume);
+      } else {
+        msg(MSG::ERROR) << "Material manager not available. Cannot build material." << endmsg;
+        return nullptr;
+      }
+    } else {
+      materialName = serviceMat->getName();
+    }
+    if (msgLvl(MSG::DEBUG)) {
+      msg(MSG::DEBUG) << "Volume/material: " << logName << "/" << materialName << endmsg;
+      if (!param.shapeType().empty()) msg(MSG::DEBUG) << " shape: " << param.shapeType() << endmsg;
+      msg(MSG::DEBUG) << " volume (cm3): " << volume / Gaudi::Units::cm3 << endmsg;
+      msg(MSG::DEBUG) << " rmin,rmax,zmin,zmax: "
+                      << param.rmin() << ", "
+                      << param.rmax() << ", "
+                      << param.zmin() << ", "
+                      << param.zmax() << endmsg;
+    }
+    // Or use volume of original volume in param.
+    //const GeoMaterial* serviceMat = mat_mgr->getMaterialForVolume(param.material(),param.origVolume());
+    GeoLogVol* serviceLog = new GeoLogVol(logName, serviceShape, serviceMat);
+    GeoPhysVol* servicePhys = new GeoPhysVol(serviceLog);
+    return servicePhys;
+  }
+
+  bool
+  VolumeBuilder::isEnvelopeOrChild(int iElement) {
+    const ServiceVolume& param = *(services()[iElement]);
+    if (param.envelopeNum() == 0 && param.envelopeParent() == 0) return false;
+    return true;
+  }
+
+  int
+  VolumeBuilder::getEnvelopeNum(int iElement) {
+    const ServiceVolume& param = *(services()[iElement]);
+    return param.envelopeNum();
+  }
+
+  int
+  VolumeBuilder::getParentNum(int iElement) {
+    const ServiceVolume& param = *(services()[iElement]);
+    return param.envelopeParent();
+  }
+
+  double
+  VolumeBuilder::getZcenter(int iElement) {
+    const ServiceVolume& param = *(services()[iElement]);
+    return (param.zmin() + param.zmax()) * 0.5;
+  }
+
+  bool
+  VolumeBuilder::isChildService(int iElt, int iChld) {
+    const ServiceVolume& param1 = *(services()[iElt]);
+    const ServiceVolume& param2 = *(services()[iChld]);
+    if (iElt == iChld || param1.envelopeNum() != param2.envelopeParent()) return false;
+    if (param1.zsymm() == 1) {
+      double zmin = (param1.zmin() * param2.zmin());
+      double zmax = (param1.zmax() * param2.zmax());
+      if (zmin > 0 && zmax > 0) return true;
+      return false;
+    }
+    return true;
+  }
+
+  int
+  VolumeBuilder::numCopies(int iElement) {
+    return services()[iElement]->nCopies();
+  }
+
+  GeoTransform*
+  VolumeBuilder::getPlacement(int iElement, int iCopy) {
+    const ServiceVolume& param = *(services()[iElement]);
+    // NB. Corrected for placement in endcaps
+    double zpos = param.zposition() - m_zcenter;
+    // Shift along Z axis ( IBL shift )
+    double zshift = param.zShift();
+    zpos += zshift;
+    // Check if we need to rotate around Y axis.
+    bool rotateAroundY = false;
+    if (param.needsRotation()) { // zpos will always be negative in this case
+      zpos = -zpos;
+      rotateAroundY = true;
+    }
+    // Most are just translated in z
+    GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
+    double phiStart = 0;
+    // BOX, ROD and TRAP need special treatment.
+    const std::string& shapeType = param.shapeType();
+    if (shapeType == "TRAP" || shapeType == "TRAP2") {
+      // Need to rotate by -90 deg.
+      xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform;
+    }
+    if (shapeType == "TRAP2") {
+      xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform;  // * GeoTrf::RotateX3D(-90.*Gaudi::Units::deg);
+    }
+    if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
+      double radius = 0.5 * (param.rmin() + param.rmax());
+      xform = GeoTrf::TranslateX3D(radius) * xform;
+      phiStart = param.phiLoc();
+    } else if (shapeType == "ROD" || shapeType == "ROD2") {
+      double radius = param.rmin();
+      xform = GeoTrf::TranslateX3D(radius) * xform;
+      phiStart = param.phiLoc();
+    }
+    // For volumes that are placed more than once.
+    double deltaPhi = 0;
+    if (iCopy > 0) {
+      deltaPhi = 2. * M_PI / param.nCopies();
+    }
+    double phi = phiStart + deltaPhi * iCopy;
+    if (phi) {
+      xform = GeoTrf::RotateZ3D(phi) * xform;
+    }
+    // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
+    if (rotateAroundY) {
+      xform = GeoTrf::RotateY3D(180. * Gaudi::Units::degree) * xform;
+    }
+    return new GeoTransform(xform);
+  }
+
+  GeoTransform*
+  VolumeBuilder::getPlacementEnvelope(int iElement, int iCopy, int iEnvElement) {
+    const ServiceVolume& param = *(services()[iElement]);
+    const ServiceVolume& paramEnv = *(services()[iEnvElement]);
+    double zCenter = (paramEnv.zmin() + paramEnv.zmax()) * 0.5;
+    double rCenter = 0.;
+    bool bMoveToCenter = false;
+    if (paramEnv.shapeType() == "BOX") bMoveToCenter = true;
+    if (paramEnv.shapeType() == "TUBE" && paramEnv.zsymm() == 1 && fabs(paramEnv.zmin()) > 0.01) bMoveToCenter = true;
+    if (bMoveToCenter) rCenter = (paramEnv.rmin() + paramEnv.rmax()) * 0.5;
+    // NB. Corrected for placement in endcaps
+    double zpos = param.zposition() - zCenter;
+    // Check if we need to rotate around Y axis.
+    bool rotateAroundY = false;
+    if (param.needsRotation()) { // zpos will always be negative in this case
+      zpos = -zpos;
+      rotateAroundY = true;
+    }
+    // Most are just translated in z
+    GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
+    const std::string& shapeType = param.shapeType();
+    double phiStart = 0;
+    // BOX, ROD and TRAP need special treatment.
+    if (shapeType == "TRAP") {
+      // Need to rotate by -90 deg.
+      xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform;
+    }
+    if (shapeType == "TRAP2") {
+      // Need to rotate by -90 deg.
+      xform = GeoTrf::RotateX3D(-90. * Gaudi::Units::deg) * xform;
+    }
+    if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
+      double radius = 0.5 * (param.rmin() + param.rmax()) - rCenter;
+      xform = GeoTrf::TranslateX3D(radius) * xform;
+      phiStart = param.phiLoc();
+    } else if (shapeType == "ROD" || shapeType == "ROD2") {
+      double radius = param.rmin();
+      xform = GeoTrf::TranslateX3D(radius) * xform;
+      phiStart = param.phiLoc();
+    }
+    // For volumes that are placed more than once.
+    double deltaPhi = 0;
+    if (iCopy > 0) {
+      deltaPhi = 2. * M_PI / param.nCopies();
+    }
+    double phi = phiStart + deltaPhi * iCopy;
+    if (phi) {
+      xform = GeoTrf::RotateZ3D(phi) * xform;
+    }
+    // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
+    if (rotateAroundY) {
+      xform = GeoTrf::RotateY3D(180. * Gaudi::Units::degree) * xform;
+    }
+    return new GeoTransform(xform);
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitter.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitter.cxx
new file mode 100755
index 000000000..20581b005
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitter.cxx
@@ -0,0 +1,191 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+#include "TrackerGeoModelUtils/VolumeSplitter.h"
+#include "TrackerGeoModelUtils/VolumeSplitterUtils.h"
+#include "TrackerGeoModelUtils/ServiceVolume.h"
+#include "GaudiKernel/SystemOfUnits.h"
+
+#include <sstream>
+#include <algorithm>
+
+namespace TrackerDD {
+  VolumeSplitter::VolumeSplitter()
+    : m_ownVolumes(true),
+    m_epsilon(0.0001 * Gaudi::Units::mm)
+  {}
+
+  VolumeSplitter::~VolumeSplitter() {
+    if (m_ownVolumes) {
+      for (std::vector<const ServiceVolume*>::iterator iter = m_volumes.begin(); iter != m_volumes.end(); ++iter) {
+        delete *iter;
+      }
+    }
+  }
+
+  const std::vector<const ServiceVolume*>&
+  VolumeSplitter::splitAll(const Zone& zone, const std::vector<const ServiceVolume*> origVolumeList) {
+    for (unsigned int i = 0; i < origVolumeList.size(); ++i) {
+      split(zone, *(origVolumeList[i]));
+    }
+    return m_volumes;
+  }
+
+  void
+  VolumeSplitter::split(const Zone& zone, const ServiceVolume& origVolume) {
+    makeVolumes(&zone, origVolume);
+  }
+
+  Ray
+  VolumeSplitter::makeRay(const ServiceVolume& origVolume) {
+    double zmin = origVolume.zmin();
+    double zmax = origVolume.zmax();
+    double rmin = origVolume.rmin();
+    double rmax = origVolume.rmax();
+
+    if (zmax < zmin) std::swap(zmin, zmax);
+    if (rmax < rmin) std::swap(rmin, rmax);
+
+    bool horizontal = (std::abs(zmax - zmin) > std::abs(rmax - rmin));
+    if (horizontal) {
+      double rmid = 0.5 * (rmin + rmax);
+      return Ray(Point(zmin, rmid), Point(zmax, rmid));
+    } else {
+      double zmid = 0.5 * (zmin + zmax);
+      return Ray(Point(zmid, rmin), Point(zmid, rmax));
+    }
+  }
+
+  void
+  VolumeSplitter::makeVolumes(const Zone* zone, const ServiceVolume& origVolume) {
+    // See if its a symmetric volume
+    if (origVolume.zsymm()) {
+      ServiceVolume param1(origVolume);
+      ServiceVolume param2(origVolume);
+      param1.addLabel("A");
+      param1.setNeedsRotation(false);
+      param2.addLabel("C");
+      param2.setZmin(-origVolume.zmax());
+      param2.setZmax(-origVolume.zmin());
+      param2.setNeedsRotation(origVolume.needsRotation());
+      splitVolume(zone, param1);
+      splitVolume(zone, param2);
+    } else {
+      ServiceVolume param1(origVolume);
+      param1.setNeedsRotation(false);
+      splitVolume(zone, param1);
+    }
+  }
+
+  void
+  VolumeSplitter::splitVolume(const Zone* zone, const ServiceVolume& param) {
+    Ray ray = makeRay(param);
+    SegmentSplitter splitter;
+    const SegmentList& segments = splitter.split(zone, ray);
+
+    //std::cout << "Segments: " << std::endl;
+    //segments.print();
+
+    double volumeTotal = 0;
+
+    std::vector<ServiceVolume* > tmpServiceVec;
+    tmpServiceVec.reserve(segments.size());
+    for (unsigned int i = 0; i < segments.size(); ++i) {
+      const Segment& seg = segments.getSegment(i);
+      ServiceVolume* paramNew = new ServiceVolume(param);
+
+      if (segments.horizontal()) {
+        if (param.splittableInZ()) {
+          paramNew->setZmin(seg.zmin());
+          paramNew->setZmax(seg.zmax());
+          // If z changed adjust r in cone like volumes
+          adjustR(param, paramNew);
+        } else if (i == 1) {
+          std::cout << "Volume " << param.fullLabel() << " cannot be split in Z" << std::endl;
+        }
+      } else {
+        // vertical
+        if (param.splittableInR()) {
+          paramNew->setRmin(seg.rmin());
+          paramNew->setRmax(seg.rmax());
+        } else if (i == 1) {
+          std::cout << "Volume " << param.fullLabel() << " cannot be split in R" << std::endl;
+        }
+      }
+
+      if (seg.rotated()) {
+        // Often the -ve endcap region is created as the +ve endcap and then rotated. Therefore we have to reflect the z
+        // coords.
+        // Also have to turn off the needsRotation flag in case it was set.
+        //std::cout << "Segment " << i << " rotated " << paramNew->zmin() << " " << paramNew->zmax() <<std::endl;
+        double zminTmp = paramNew->zmin();
+        paramNew->setZmin(-paramNew->zmax());
+        paramNew->setZmax(-zminTmp);
+        paramNew->setNeedsRotation(false);
+        //std::cout << "After adjusted " << paramNew->zmin() << " " << paramNew->zmax() <<std::endl;
+      }
+
+      if (param.splittableInZ()) {
+        paramNew->reduceSize(m_epsilon); // safety gap between volumes
+      }
+
+      paramNew->setRegion(seg.label());
+      tmpServiceVec.push_back(paramNew);
+
+      paramNew->getShape();
+      volumeTotal += paramNew->volume();
+      //std::cout << i << ": volume: " <<  paramNew->volume() << std::endl;
+    }
+    //std::cout << "Total volume: " << volumeTotal << std::endl;
+    for (unsigned int i = 0; i < segments.size(); ++i) {
+      ServiceVolume* paramNew = tmpServiceVec[i];
+      if (segments.size() > 1) {
+        std::ostringstream ostr;
+        ostr << "_" << i + 1;
+        paramNew->addLabel(ostr.str());
+      }
+      paramNew->setOrigVolume(volumeTotal);
+      m_volumes.push_back(paramNew);
+    }
+  }
+
+// This takes care of cone like volumes and adjust the radius according to the adjusted z.
+  void
+  VolumeSplitter::adjustR(const ServiceVolume& param, ServiceVolume* paramNew) {
+    double z1 = param.zmin();
+    double z2 = param.zmax();
+    double z1New = paramNew->zmin();
+    double z2New = paramNew->zmax();
+    double rmin1 = param.rmin();
+    double rmin2 = param.rmin2();
+    double rmax1 = param.rmax();
+    double rmax2 = param.rmax2();
+
+    // Make sure z1 < z2
+    // as r1, r2 order assumes this
+    if (z1 > z2) std::swap(z1, z2);
+    if (z1New > z2New) std::swap(z1New, z2New);
+
+    // Avoid divide by zero.
+    if (z1 == z2) return;
+
+    if (z1 != z1New || z2 != z2New) {
+      if (rmin2 > 0 && rmax2 > 0 && (rmin1 != rmin2 || rmax1 != rmax2)) {
+        double slopeMin = (rmin2 - rmin1) / (z2 - z1);
+        double slopeMax = (rmax2 - rmax1) / (z2 - z1);
+
+        double rmin1New = (z1New - z1) * slopeMin + rmin1;
+        double rmin2New = (z2New - z1) * slopeMin + rmin1;
+
+        double rmax1New = (z1New - z1) * slopeMax + rmax1;
+        double rmax2New = (z2New - z1) * slopeMax + rmax1;
+
+        paramNew->setRmin(rmin1New);
+        paramNew->setRmax(rmax1New);
+        paramNew->setRmin2(rmin2New);
+        paramNew->setRmax2(rmax2New);
+      }
+    }
+  }
+} // end namespace
diff --git a/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitterUtils.cxx b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitterUtils.cxx
new file mode 100755
index 000000000..e06e2a4b4
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerGeoModelUtils/src/VolumeSplitterUtils.cxx
@@ -0,0 +1,432 @@
+/*
+   Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+ */
+
+
+#include "TrackerGeoModelUtils/VolumeSplitterUtils.h"
+#include "GeoModelKernel/GeoTube.h"
+#include "GeoModelKernel/GeoPcon.h"
+#include <iostream>
+
+namespace TrackerDD {
+  const SegmentList&
+  SegmentSplitter::split(const Zone* zone, const Ray& ray) {
+    addChildSegment(zone, ray);
+    return m_segments;
+  }
+
+  Ray
+  SegmentSplitter::addChildSegment(const Zone* zone, const Ray& ray) {
+    //std::cout << "addChildSegment: " << zone->label() << " " << ray << std::endl;
+    // Point startPoint = ray.start();
+    // If start point is not yet know to be in current zone. We need to search children.
+    // If not in children searchPoint will return a copy of ray. Otherwise it will
+    // add segments of the child and return a ray that starts from the exit of the child.
+    Ray nextRay = ray;
+
+    if (!ray.foundStart()) {
+      nextRay = searchPoint(zone, ray);
+    }
+    bool exit = false;
+    while (nextRay.valid() && !exit) {
+      Point nextPoint = getNextBoundary(zone, nextRay);
+      addSegment(zone, nextRay.start(), nextPoint);
+
+      //std::cout << "Next boundary: " << nextPoint;
+      //if (nextPoint.last()) std::cout << " Last ";
+      //if (nextPoint.exit()) std::cout << " Exit ";
+      //if (nextPoint.child()) std::cout << " Child: " << nextPoint.child()->label();
+      //std::cout <<  std::endl;
+
+      if (nextPoint.last()) { // last indicates end of ray. ie ray ended before exit or child entry.
+        nextRay.setInvalid();
+      } else {
+        nextRay.set(nextPoint, nextRay.end());
+      }
+      exit = nextPoint.exit();
+      if (nextPoint.child()) {
+        nextRay = addChildSegment(nextPoint.child(), nextRay);
+      }
+    }
+    return nextRay;
+  }
+
+  void
+  SegmentSplitter::addSegment(const Zone* zone, const Point& start, const Point& end) {
+    m_segments.add(zone->label(), start, end, zone->rotated());
+  }
+
+  Point
+  SegmentSplitter::getNextBoundary(const Zone* zone, const Ray& ray) {
+    Point nextPoint; //invalid
+
+    // Search children
+    for (Zone::ChildIterator iter = zone->begin(); iter != zone->end(); ++iter) {
+      const Zone* child = *iter;
+      // return invalid if not crossed.
+      Point newPoint = child->findEntry(ray);
+      nextPoint = nearestPoint(newPoint, nextPoint);
+    }
+    //search exit
+    nextPoint = nearestPoint(zone->findExit(ray), nextPoint);
+    if (!nextPoint.valid()) {
+      // Return endpoint
+      return ray.end();
+    }
+    return nextPoint;
+  }
+
+  Point
+  SegmentSplitter::nearestPoint(const Point& point1, const Point& point2) {
+    if (!point2.valid()) return point1;
+
+    if (!point1.valid()) return point2;
+
+    if ((point2.r() == point1.r() && point2.z() < point1.z()) ||
+        (point2.z() == point1.z() && point2.r() < point1.r())) {
+      return point2;
+    }
+    return point1;
+    //return first point. If either invalid return the other.
+    // If both invalid return invalid
+  }
+
+  Ray
+  SegmentSplitter::searchPoint(const Zone* zone, const Ray& ray) {
+    // If not found in children return original ray.
+    //std::cout << "Searching for point " << ray.start() << std::endl;
+    Ray nextRay = ray;
+
+    for (Zone::ChildIterator iter = zone->begin(); iter != zone->end(); ++iter) {
+      const Zone* child = *iter;
+      if (child->inSide(ray.start())) {
+        //std::cout << "Point " << ray.start() << " found in zone " << child->label() << std::endl;
+        nextRay = addChildSegment(child, ray);
+        break;
+      }
+    }
+    nextRay.setFound();
+    return nextRay;
+  }
+
+  Zone::Zone(const std::string& label, bool rotated)
+    : m_label(label),
+    m_rotated(rotated)
+  {}
+
+  Zone::~Zone() {
+    for (ChildIterator iter = begin(); iter != end(); ++iter) {
+      delete *iter;
+    }
+  }
+
+  void
+  Zone::add(const Zone* zone) {
+    m_children.push_back(zone);
+  }
+
+  UnboundedZone::UnboundedZone(const std::string& label)
+    : Zone(label)
+  {}
+
+  bool
+  UnboundedZone::inSide(const Point&) const {
+    return true;
+  }
+
+  Point
+  UnboundedZone::findEntry(const Ray&) const {
+    // Will never be called.
+    return Point();
+  }
+
+  Point
+  UnboundedZone::findExit(const Ray&) const {
+    // Invalid means no exit point.
+    return Point();
+  }
+
+  TubeZone::TubeZone(const std::string& label, double zmin, double zmax, double rmin, double rmax, bool rotated)
+    : Zone(label, rotated),
+    m_zmin(zmin),
+    m_zmax(zmax),
+    m_rmin(rmin),
+    m_rmax(rmax)
+  {}
+
+  TubeZone::TubeZone(const std::string& label, const GeoTube* shape, double zOffset, bool rotated)
+    : Zone(label, rotated),
+    m_zmin(zOffset - shape->getZHalfLength()),
+    m_zmax(zOffset + shape->getZHalfLength()),
+    m_rmin(shape->getRMin()),
+    m_rmax(shape->getRMax())
+  {}
+
+
+  bool
+  TubeZone::inSide(const Point& point) const {
+    return(inZ(point.z()) && inR(point.r()));
+  }
+
+  bool
+  TubeZone::inZ(double z) const {
+    return(z >= m_zmin && z < m_zmax);
+  }
+
+  bool
+  TubeZone::inR(double r) const {
+    return(r >= m_rmin && r < m_rmax);
+  }
+
+// Assume either vertical or horizontal.
+  Point
+  TubeZone::findEntry(const Ray& ray) const {
+    if (ray.horizontal()) {
+      if (inR(ray.start().r()) && ray.start().z() < m_zmin && ray.end().z() > m_zmin) {
+        Point p(m_zmin, ray.start().r());
+        p.setChild(this);
+        return p;
+      }
+    } else if (ray.vertical()) {
+      if (inZ(ray.start().z()) && ray.start().r() < m_rmin && ray.end().r() > m_rmin) {
+        Point p(ray.start().z(), m_rmin);
+        p.setChild(this);
+        return p;
+      }
+    } else {
+      std::cout << "Unexpected case" << std::endl;
+    }
+    // Return invalid point since doesn't intersect.
+    return Point(); // invalid point
+  }
+
+// Assume already inside.
+  Point
+  TubeZone::findExit(const Ray& ray) const {
+    if (ray.horizontal()) {
+      if (ray.end().z() > m_zmax) {
+        Point p(m_zmax, ray.start().r());
+        p.setExit();
+        return p;
+      }
+    } else if (ray.vertical()) {
+      if (ray.end().r() > m_rmax) {
+        Point p(ray.start().z(), m_rmax);
+        p.setExit();
+        return p;
+      }
+    } else {
+      std::cout << "Unexpected case" << std::endl;
+    }
+    // ends with. Return invalid point.
+    return Point();
+  }
+
+  PconZone::PconZone(const std::string& label, bool rotated)
+    : Zone(label, rotated)
+  {}
+
+  PconZone::PconZone(const std::string& label, const GeoPcon* shape, bool rotated)
+    : Zone(label, rotated) {
+    for (unsigned int i = 0; i < shape->getNPlanes(); ++i) {
+      addPlane(shape->getZPlane(i), shape->getRMinPlane(i), shape->getRMaxPlane(i));
+    }
+  }
+
+  void
+  PconZone::addPlane(double z, double rmin, double rmax) {
+    m_z.push_back(z);
+    m_rmin.push_back(rmin);
+    m_rmax.push_back(rmax);
+  }
+
+  bool
+  PconZone::inSide(const Point& point) const {
+    // Assume comes in pairs with same CLHEP::radii.
+    for (unsigned int i = 0; i + 1 < m_z.size(); i += 2) {
+      if (inZ(i, point.z()) && inR(i, point.r())) return true;
+    }
+    return false;
+  }
+
+  bool
+  PconZone::inZ(unsigned int i, double z) const {
+    return(z >= m_z[i] && z < m_z[i + 1]);
+  }
+
+  bool
+  PconZone::inR(unsigned int i, double r) const {
+    if (i >= m_z.size()) return false;
+
+    return(r >= m_rmin[i] && r < m_rmax[i]);
+  }
+
+// Assume either vertical or horizontal.
+  Point
+  PconZone::findEntry(const Ray& ray) const {
+    if (ray.horizontal()) {
+      for (unsigned int i = 0; i + 1 < m_z.size(); i += 2) {
+        if (inR(i, ray.start().r()) && ray.start().z() < m_z[i] && ray.end().z() > m_z[i]) {
+          Point p(m_z[i], ray.start().r());
+          p.setChild(this);
+          return p;
+        }
+      }
+    } else if (ray.vertical()) {
+      for (unsigned int i = 0; i + 1 < m_z.size(); i += 2) {
+        if (inZ(i, ray.start().z()) && ray.start().r() < m_rmin[i] && ray.end().r() > m_rmin[i]) {
+          Point p(ray.start().z(), m_rmin[i]);
+          p.setChild(this);
+          return p;
+        }
+      }
+    } else {
+      std::cout << "Unexpected case" << std::endl;
+    }
+    // Return invalid point since doesn't intersect.
+    return Point(); // invalid point
+  }
+
+// Assume already inside.
+  Point
+  PconZone::findExit(const Ray& ray) const {
+    if (ray.horizontal()) {
+      for (unsigned int i = 0; i + 1 < m_z.size(); i += 2) {
+        if (inZ(i, ray.start().z()) && ray.end().z() > m_z[i + 1] && !inR(i + 2, ray.start().r())) {
+          Point p(m_z[i + 1], ray.start().r());
+          p.setExit();
+          return p;
+        }
+      }
+    } else if (ray.vertical()) {
+      for (unsigned int i = 0; i + 1 < m_z.size(); i += 2) {
+        if (inZ(i, ray.start().z()) && ray.end().r() > m_rmax[i]) {
+          Point p(ray.start().z(), m_rmax[i]);
+          p.setExit();
+          return p;
+        }
+      }
+    } else {
+      std::cout << "Unexpected case" << std::endl;
+    }
+    // ends with. Return invalid point.
+    return Point();
+  }
+
+  Ray::Ray()
+    : m_valid(false),
+    m_found(false),
+    m_horizontal(false),
+    m_vertical(false)
+  {}
+
+  Ray::Ray(const Point& start, const Point& end)
+    : m_valid(true),
+    m_found(false),
+    m_start(start),
+    m_end(end) {
+    m_end.setLast();
+    setDirection();
+  }
+
+  void
+  Ray::set(const Point& start, const Point& end) {
+    m_start = start;
+    m_end = end;
+    setDirection();
+  }
+
+  void
+  Ray::setDirection() {
+    m_vertical = (m_start.z() == m_end.z());
+    m_horizontal = (m_start.r() == m_end.r());
+    if (m_vertical && m_horizontal) {
+      m_vertical = false;
+      m_horizontal = false;
+    }
+  }
+
+  Point::Point()
+    : m_valid(false),
+    m_exit(false),
+    m_last(false),
+    m_z(0),
+    m_r(0),
+    m_child(0)
+  {}
+
+  Point::Point(double z, double r)
+    : m_valid(true),
+    m_exit(false),
+    m_last(false),
+    m_z(z),
+    m_r(r),
+    m_child(0)
+  {}
+
+  Segment::Segment(const std::string& label, const Point& start, const Point& end, bool rotated)
+    : m_label(label),
+    m_rotated(rotated),
+    m_zmin(start.z()),
+    m_zmax(end.z()),
+    m_rmin(start.r()),
+    m_rmax(end.r())
+  {}
+
+  void
+  SegmentList::add(const std::string& label, const Point& start, const Point& end, bool rotated) {
+    m_segments.push_back(Segment(label, start, end, rotated));
+  }
+
+  void
+  SegmentList::add(const Segment& segment) {
+    m_segments.push_back(segment);
+  }
+
+  bool
+  SegmentList::horizontal() const {
+    if (size() > 0) {
+      const Segment& seg = m_segments[0];
+      return(seg.rmin() == seg.rmax());
+    }
+    // Not relevant if array empty.
+    return true;
+  }
+
+  void
+  SegmentList::print() const {
+    for (std::vector<Segment>::const_iterator iter = m_segments.begin(); iter != m_segments.end(); ++iter) {
+      iter->print();
+    }
+  }
+
+  void
+  Segment::print() const {
+    std::cout << m_label << " "
+              << m_zmin << " "
+              << m_zmax << " "
+              << m_rmin << " "
+              << m_rmax
+              << std::endl;
+  }
+
+  std::ostream&
+  operator << (std::ostream& os, const TrackerDD::Ray& ray) {
+    if (!ray.valid()) {
+      os << "INVALID";
+    } else {
+      os << ray.start() << " --> " << ray.end();
+    }
+    return os;
+  }
+
+  std::ostream&
+  operator << (std::ostream& os, const TrackerDD::Point& point) {
+    if (!point.valid()) {
+      os << "INVALID";
+    } else {
+      os << "(" << point.z() << ", " << point.r() << ")";
+    }
+    return os;
+  }
+}
diff --git a/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml
index 6f2758240..3e3b41ea2 100644
--- a/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml
+++ b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml
@@ -5,30 +5,31 @@
   </field>
 
   <field name="station" >
-    <label name="Upstream"   value="0" />
-    <label name="Central"    value="1" />
-    <label name="Downstream" value="2" />
+    <label name="Upstream"   value="-1" />
+    <label name="Central"    value="0" />
+    <label name="Downstream" value="1" />
   </field>
 
-  <field name="plane" >
+  <field name="layer" >
     <label name="Upstream"   value="0" />
     <label name="Central"    value="1" />
     <label name="Downstream" value="2" />
   </field>
 
-  <field name="row">
-    <label name="Bottom" value="0" />
-    <label name="Top"    value="1" />
+  <field name="phi_module">
+    <label name="Bottom"       value="0" /> 
+    <label name="LowerMiddle"  value="1" />
+    <label name="UpperMiddle"  value="2" />
+    <label name="Top"          value="3" />
   </field>
 
-  <field name="module">
-  <!-- facing downstream
+  <field name="eta_module">
+  <!-- facing downstream (hence "starboard" and "port")
        x must increase right to left for a right-handed
        coordinate system -->
-    <label name="FarRight"    value="0" /> 
-    <label name="CenterRight" value="1" />
-    <label name="CenterLeft"  value="2" />
-    <label name="FarLeft"     value="3" />
+  <!-- numbers straddle zero for consistency with ATLAS -->       
+    <label name="Starboard"   value="-1" />
+    <label name="Port"        value="+1" />
   </field>
 
   <field name="side">
@@ -37,13 +38,13 @@
   </field>
 
   <region>
-    <range field="part"    value="SCT" />
-    <range field="station" values="Upstream Central Downstream" />
-    <range field="plane"   values="Upstream Central Downstream" />
-    <range field="row"     values="Bottom Top" />
-    <range field="module"  values="FarRight CenterRight CenterLeft FarLeft" />
-    <range field="side"    values="Upstream Downstream" />
-    <range field="strip"   minvalue="0" maxvalue="767" />
+    <range field="part"       value="SCT" />
+    <range field="station"    values="Upstream Central Downstream" />
+    <range field="layer"      values="Upstream Central Downstream" />
+    <range field="phi_module" values="Bottom LowerMiddle UpperMiddle Top" wraparound="FALSE" />
+    <range field="eta_module" values="Starboard Port" wraparound="FALSE" />
+    <range field="side"       values="Upstream Downstream" />
+    <range field="strip"      minvalue="0" maxvalue="767" />
   </region>
 
 </IdDictionary>
\ No newline at end of file
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/CMakeLists.txt b/Tracker/TrackerDetDescr/TrackerIdentifier/CMakeLists.txt
new file mode 100644
index 000000000..0e9efc6b6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/CMakeLists.txt
@@ -0,0 +1,39 @@
+################################################################################
+# Package: TrackerIdentifier
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrackerIdentifier )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaKernel
+                          DetectorDescription/FaserDetDescr
+                          DetectorDescription/IdDict
+                          DetectorDescription/Identifier
+                          PRIVATE
+                          DetectorDescription/IdDictParser
+                          GaudiKernel )
+
+# External dependencies:
+find_package( ROOT COMPONENTS Core Tree MathCore Hist RIO pthread )
+
+# Component(s) in the package:
+atlas_add_library( TrackerIdentifier
+                   src/FaserSCT_ID.cxx
+                   PUBLIC_HEADERS TrackerIdentifier
+                   PRIVATE_INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                   LINK_LIBRARIES AthenaKernel FaserDetDescr IdDict Identifier
+                   PRIVATE_LINK_LIBRARIES ${ROOT_LIBRARIES} IdDictParser GaudiKernel )
+
+atlas_add_dictionary( TrackerIdentifierDict
+                      TrackerIdentifier/TrackerIdentifierDict.h
+                      TrackerIdentifier/selection.xml
+                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} FaserDetDescr IdDict Identifier IdDictParser GaudiKernel TrackerIdentifier )
+
+atlas_add_executable( test_tracker_id
+                      test/test_tracker_id.cxx
+                      INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                      LINK_LIBRARIES ${ROOT_LIBRARIES} FaserDetDescr IdDict Identifier IdDictParser GaudiKernel TrackerIdentifier )
+
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/FaserSCT_ID.h b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/FaserSCT_ID.h
new file mode 100644
index 000000000..10d31628b
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/FaserSCT_ID.h
@@ -0,0 +1,808 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef TRACKERIDENTIFIER_FASERSCT_ID_H
+#define TRACKERIDENTIFIER_FASERSCT_ID_H
+/**
+ * @file FaserSCT_ID.h
+ *
+ * @brief This is an Identifier helper class for the SCT
+ *  subdetector. This class is a factory for creating compact
+ *  Identifier objects and IdentifierHash or hash ids. And it also
+ *  allows decoding of these ids.
+ *
+ * @author RD Schaffer <R.D.Schaffer@cern.ch>
+ *
+ * $Id: SCT_ID.h,v 1.30 2008-12-13 07:11:00 dquarrie Exp $
+ */
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "FaserDetDescr/FaserDetectorID.h"
+#include "Identifier/Identifier.h"
+#include "Identifier/IdentifierHash.h"
+#include "Identifier/Range.h"
+#include "Identifier/IdHelper.h"
+#include "IdDict/IdDictFieldImplementation.h"
+#include "AthenaKernel/CLASS_DEF.h"
+
+#include <string>
+#include <assert.h>
+#include <algorithm>
+
+//<<<<<< PUBLIC DEFINES                                                 >>>>>>
+//<<<<<< PUBLIC CONSTANTS                                               >>>>>>
+//<<<<<< PUBLIC TYPES                                                   >>>>>>
+
+class IdDictDictionary;
+
+//<<<<<< PUBLIC VARIABLES                                               >>>>>>
+//<<<<<< PUBLIC FUNCTIONS                                               >>>>>>
+//<<<<<< CLASS DECLARATIONS                                             >>>>>>
+
+/**
+ **  @class FaserSCT_ID
+ **  
+ **  @brief This is an Identifier helper class for the SCT
+ **  subdetector. This class is a factory for creating compact
+ **  Identifier objects and IdentifierHash or hash ids. And it also
+ **  allows decoding of these ids.
+ **
+ **  Definition and the range of values for the levels of the
+ **  identifier are:
+ **
+ ** @verbatim
+ **    element           range              meaning
+ **    -------           -----              -------
+ **
+ **    station         -1 to +1             upstream to downstream 
+ **    layer            0 to 2              three layers per station
+ **    phi_module       0 to 3              precision/vertical direction
+ **    eta_module                           non-precision/horizontal direction
+ **                    -1                   starboard = right, facing beam direction
+ **                    +1                   port = left, facing beam direction)     
+ **    side             0 to 1              upstream/downstream of pairs of Si crystals
+ **    strip            0 to 767   strip number
+ ** @endverbatim
+ **
+ */
+class FaserSCT_ID : public FaserDetectorID
+{
+public:
+        
+    /// @name public typedefs
+    //@{
+    typedef Identifier::size_type                       size_type; 
+    typedef std::vector<Identifier>::const_iterator     const_id_iterator;
+    typedef MultiRange::const_identifier_factory        const_expanded_id_iterator;
+    //@}
+
+    /// @name strutors
+    //@{
+    FaserSCT_ID(void);
+    virtual ~FaserSCT_ID(void) = default;
+    //@}
+        
+    /// @name Creators for wafer ids and pixel ids
+    //@{
+    /// For a single crystal
+    Identifier  module_id ( int station, 
+                            int layer, 
+                            int phi_module, 
+                            int eta_module ) const;
+    Identifier  module_id ( int station, 
+                            int layer, 
+                            int phi_module, 
+                            int eta_module,
+                            bool checks) const;
+
+    /// For a module from a wafer id
+    Identifier  module_id ( const Identifier& wafer_id ) const;
+
+    /// For a single crystal
+    Identifier  wafer_id ( int station, 
+                           int layer, 
+                           int phi_module, 
+                           int eta_module,   
+                           int side ) const;
+    Identifier  wafer_id ( int station, 
+                           int layer, 
+                           int phi_module, 
+                           int eta_module,   
+                           int side,
+                           bool checks) const;
+
+    /// For a single crystal from a strip id
+    Identifier  wafer_id ( const Identifier& strip_id ) const;
+
+    /// From hash - optimized
+    Identifier  wafer_id ( IdentifierHash wafer_hash ) const;
+
+    /// For an individual strip
+    Identifier  strip_id ( int station, 
+                           int layer, 
+                           int phi_module, 
+                           int eta_module,   
+                           int side,      
+                           int strip) const;
+    Identifier  strip_id ( int station, 
+                           int layer, 
+                           int phi_module, 
+                           int eta_module,   
+                           int side,      
+                           int strip,
+                           bool check) const;
+
+    Identifier  strip_id ( int station,
+			               int layer,
+			               int phi_module,
+			               int eta_module,
+			               int side,
+			               int row,
+			               int strip) const;
+    Identifier  strip_id ( int station,
+			               int layer,
+			               int phi_module,
+			               int eta_module,
+			               int side,
+			               int row,
+			               int strip,
+                           bool checks) const;
+
+
+
+    Identifier  strip_id ( const Identifier& wafer_id, 
+                           int strip ) const;
+
+    Identifier  strip_id ( const Identifier& wafer_id,
+	                   int row, int strip ) const;
+
+
+    //@}
+
+
+    /// @name Hash table maximum sizes
+    //@{
+    size_type   wafer_hash_max          (void) const;
+    size_type   strip_hash_max          (void) const;
+    //@}
+
+    /// @name Access to all ids
+    //@{
+    /// Iterators over full set of ids. Wafer iterator is sorted
+    const_id_iterator   wafer_begin                     (void) const;
+    const_id_iterator   wafer_end                       (void) const;
+    /// For strip ids, only expanded id iterators are available. Use
+    /// following "strip_id" method to obtain a compact identifier
+    const_expanded_id_iterator  strip_begin             (void) const;  
+    const_expanded_id_iterator  strip_end               (void) const;
+    //@}
+    
+
+    /// @name Optimized accessors  - ASSUMES id IS a sct id, i.e. NOT pixel or other
+    //@{
+    /// wafer hash from id - optimized
+    IdentifierHash      wafer_hash      (Identifier wafer_id) const;
+
+    /// Test for barrel - WARNING: id MUST be sct id, otherwise answer is not accurate. 
+    // bool        is_barrel       (const Identifier& id) const;  
+
+    /// Values of different levels (failure returns 0)
+    int         station         (const Identifier& id) const;  
+    int         layer           (const Identifier& id) const; 
+    int         phi_module      (const Identifier& id) const; 
+    int         eta_module      (const Identifier& id) const; 
+    int         side            (const Identifier& id) const;
+    int         row             (const Identifier& id) const;
+    int         strip           (const Identifier& id) const;
+
+    /// Max/Min values for each field (-999 == failure)
+    int         layer_max       (const Identifier& id) const;
+    int         phi_module_max  (const Identifier& id) const;
+    int         eta_module_max  (const Identifier& id) const;
+    int         eta_module_min  (const Identifier& id) const;
+    int         strip_max       (const Identifier& id) const;
+    //@}
+
+    /// @name module eta/phi navigation
+    //@{
+    /// Previous wafer hash in phi (return == 0 for neighbor found)
+    int         get_prev_in_phi (const IdentifierHash& id, IdentifierHash& prev) const;
+    /// Next wafer hash in phi (return == 0 for neighbor found)
+    int         get_next_in_phi (const IdentifierHash& id, IdentifierHash& next) const;
+    /// Previous wafer hash in eta (return == 0 for neighbor found)
+    int         get_prev_in_eta (const IdentifierHash& id, IdentifierHash& prev) const;
+    /// Next wafer hash in eta (return == 0 for neighbor found)
+    int         get_next_in_eta (const IdentifierHash& id, IdentifierHash& next) const;
+    /// Wafer hash on other side
+    int         get_other_side  (const IdentifierHash& id, IdentifierHash& other) const;
+    
+    // To check for when phi wrap around may be needed, use
+    bool        is_phi_module_max(const Identifier& id) const;
+    /// For the barrel
+    bool        is_eta_module_min(const Identifier& id) const;
+    /// For the barrel
+    bool        is_eta_module_max(const Identifier& id) const;
+    //@}
+
+    /// @name contexts to distinguish wafer id from pixel id
+    //@{
+    IdContext   wafer_context           (void) const;
+    IdContext   strip_context           (void) const;
+    //@}
+
+    /// @name methods from abstract interface - slower than opt version
+    //@{
+    /// Create compact id from hash id (return == 0 for OK)
+    virtual int         get_id          (const IdentifierHash& hash_id,
+                                         Identifier& id,
+                                         const IdContext* context = 0) const;
+    
+    /// Create hash id from compact id (return == 0 for OK)
+    virtual int         get_hash        (const Identifier& id, 
+                                         IdentifierHash& hash_id,
+                                         const IdContext* context = 0) const;
+    //@}
+
+    /// Return the lowest bit position used in the channel id
+    int                 base_bit        (void) const;
+
+    /// Calculate a channel offset between the two identifiers.
+    Identifier::diff_type calc_offset(const Identifier& base,
+                                      const Identifier& target) const;
+
+    /// Create an identifier with a given base and channel offset
+    Identifier strip_id_offset(const Identifier& base,
+                               Identifier::diff_type offset) const;
+
+    /// @name interaction with id dictionary
+    //@{
+    /// Create strip Identifier from expanded id, which is returned by the
+    /// id_iterators
+    Identifier          strip_id        (const ExpandedIdentifier& strip_id) const;
+
+    /// Create expanded id from compact id (return == 0 for OK)
+    void                get_expanded_id (const Identifier& id,
+                                         ExpandedIdentifier& exp_id,
+                                         const IdContext* context = 0) const;
+
+    /// Initialization from the identifier dictionary
+    virtual int         initialize_from_dictionary(const IdDictMgr& dict_mgr);
+
+    /// Tests of packing
+    void        test_wafer_packing      (void) const;
+    //@}
+    
+private:
+        
+    enum {NOT_VALID_HASH        = 64000};
+
+    typedef std::vector<Identifier>     id_vec;
+    typedef id_vec::const_iterator      id_vec_it;
+    typedef std::vector<unsigned short> hash_vec;
+    typedef hash_vec::const_iterator    hash_vec_it;
+
+    void  wafer_id_checks ( int station, 
+                            int layer, 
+                            int phi_module, 
+                            int eta_module,   
+                            int side ) const;
+
+    void strip_id_checks ( int station, 
+                           int layer, 
+                           int phi_module, 
+                           int eta_module,   
+                           int side,      
+                           int strip) const;
+
+    void strip_id_checks ( int station,
+			   int layer,
+			   int phi_module,
+			   int eta_module,
+			   int side,
+			   int row,
+			   int strip) const;
+
+
+
+    int         initLevelsFromDict(void);
+
+    int         init_hashes(void);
+
+    int         init_neighbors(void);
+
+    // Temporary method for adapting an identifier for the MultiRange
+    // check - MR is missing the InnerDetector level
+    Identifier  idForCheck      (const Identifier& id) const;
+
+    size_type                   m_sct_region_index;
+    size_type                   m_TRACKER_INDEX;
+    size_type                   m_SCT_INDEX;
+    size_type                   m_STATION_INDEX;
+    size_type                   m_LAYER_INDEX;
+    size_type                   m_PHI_MODULE_INDEX;
+    size_type                   m_ETA_MODULE_INDEX;
+    size_type                   m_SIDE_INDEX;
+    size_type                   m_STRIP_INDEX;
+        
+    size_type                   m_ROW_INDEX;
+
+    const IdDictDictionary*     m_dict;
+    MultiRange                  m_full_wafer_range;
+    MultiRange                  m_full_strip_range;
+    size_type                   m_wafer_hash_max;
+    size_type                   m_strip_hash_max;
+    // Range::field                m_station_field;
+    id_vec                      m_wafer_vec;
+    hash_vec                    m_prev_phi_wafer_vec;
+    hash_vec                    m_next_phi_wafer_vec;
+    hash_vec                    m_prev_eta_wafer_vec;
+    hash_vec                    m_next_eta_wafer_vec;   
+    bool 			m_hasRows	;
+
+    IdDictFieldImplementation   m_tracker_impl	;
+    IdDictFieldImplementation   m_sct_impl	;
+    IdDictFieldImplementation   m_station_impl	;
+    IdDictFieldImplementation   m_layer_impl	;
+    IdDictFieldImplementation   m_phi_mod_impl	;
+    IdDictFieldImplementation   m_eta_mod_impl	;
+    IdDictFieldImplementation   m_side_impl	;
+    IdDictFieldImplementation   m_row_impl	;
+    IdDictFieldImplementation   m_strip_impl	;
+};
+    
+
+//<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
+
+/////////////////////////////////////////////////////////////////////////////
+//<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
+/////////////////////////////////////////////////////////////////////////////
+
+//using the macros below we can assign an identifier (and a version)
+//This is required and checked at compile time when you try to record/retrieve
+CLASS_DEF(FaserSCT_ID, 205618430, 1)
+
+//----------------------------------------------------------------------------
+inline Identifier  
+FaserSCT_ID::module_id ( int station, 
+                    int layer, 
+                    int phi_module, 
+                    int eta_module,
+                    bool checks) const
+{
+    
+    // Build identifier
+    Identifier result((Identifier::value_type)0);
+
+    // Pack fields independently
+    m_tracker_impl.pack  (tracker_field_value(), result);
+    m_sct_impl.pack      (sct_field_value(),     result);
+    m_station_impl.pack  (station,               result);
+    m_layer_impl.pack    (layer,                 result);
+    m_phi_mod_impl.pack  (phi_module,            result);
+    m_eta_mod_impl.pack  (eta_module,            result);
+
+    // Do checks
+    if(checks) {
+        wafer_id_checks ( station, layer, phi_module, eta_module, 0 );
+    }
+
+    return result;
+}
+
+inline Identifier  
+FaserSCT_ID::module_id ( int station, 
+                    int layer, 
+                    int phi_module, 
+                    int eta_module ) const
+{
+  return module_id (station, layer, phi_module, eta_module, do_checks());
+}
+
+//----------------------------------------------------------------------------
+inline Identifier  
+FaserSCT_ID::module_id ( const Identifier& wafer_id ) const
+{
+    Identifier result(wafer_id);
+    //  Reset the side and strip fields
+    m_side_impl.reset(result);
+    m_strip_impl.reset(result);
+    return (result);
+}
+
+//----------------------------------------------------------------------------
+inline Identifier
+FaserSCT_ID::wafer_id ( int station,  
+                   int layer, 
+                   int phi_module, 
+                   int eta_module, 
+                   int side,
+                   bool checks) const
+{
+
+    // Build identifier
+    Identifier result((Identifier::value_type)0);
+
+    // Pack fields independently
+    m_tracker_impl.pack  (tracker_field_value(), result);
+    m_sct_impl.pack      (sct_field_value(),     result);
+    m_station_impl.pack  (station,               result);
+    m_layer_impl.pack    (layer,                 result);
+    m_phi_mod_impl.pack  (phi_module,            result);
+    m_eta_mod_impl.pack  (eta_module,            result);
+    m_side_impl.pack     (side,                  result);
+
+    // Do checks
+    if(checks) {
+        wafer_id_checks ( station, layer, phi_module, eta_module, side );
+    }
+
+    return result;
+}
+
+inline Identifier
+FaserSCT_ID::wafer_id ( int station,  
+                   int layer, 
+                   int phi_module, 
+                   int eta_module, 
+                   int side ) const
+{
+  return wafer_id (station, layer, phi_module, eta_module, side,
+                   do_checks());
+}
+
+
+
+//----------------------------------------------------------------------------
+inline Identifier
+FaserSCT_ID::wafer_id ( const Identifier& strip_id ) const
+{
+    Identifier result(strip_id);
+    // reset the strip field
+    m_strip_impl.reset(result);
+    return (result);
+}
+
+//----------------------------------------------------------------------------
+inline Identifier  FaserSCT_ID::wafer_id ( IdentifierHash wafer_hash ) const
+{
+    return (m_wafer_vec[wafer_hash]);
+}
+
+//----------------------------------------------------------------------------
+inline IdentifierHash      FaserSCT_ID::wafer_hash      (Identifier wafer_id) const 
+{
+    id_vec_it it = std::lower_bound(m_wafer_vec.begin(), 
+                                    m_wafer_vec.end(), 
+                                    wafer_id);
+    // Require that wafer_id matches the one in vector
+    if (it != m_wafer_vec.end() && wafer_id == (*it)) {
+        return (it - m_wafer_vec.begin());
+    }
+    IdentifierHash result;
+    return (result); // return hash in invalid state
+}
+
+//----------------------------------------------------------------------------
+inline Identifier
+FaserSCT_ID::strip_id ( int station,  
+                   int layer, 
+                   int phi_module, 
+                   int eta_module, 
+                   int side,        
+                   int strip,
+                   bool checks) const
+{
+    // Build identifier
+    Identifier result((Identifier::value_type)0);
+
+    // Pack fields independently
+    m_tracker_impl.pack  (tracker_field_value(), result);
+    m_sct_impl.pack      (sct_field_value(),     result);
+    m_station_impl.pack  (station,               result);
+    m_layer_impl.pack    (layer,                 result);
+    m_phi_mod_impl.pack  (phi_module,            result);
+    m_eta_mod_impl.pack  (eta_module,            result);
+    m_side_impl.pack     (side,                  result);
+    m_strip_impl.pack    (strip,                 result);
+
+    // Do checks
+    if(checks) {
+        strip_id_checks ( station, layer, phi_module, eta_module, side, strip );
+    }
+    return result;
+}
+
+inline Identifier
+FaserSCT_ID::strip_id ( int station,  
+                   int layer, 
+                   int phi_module, 
+                   int eta_module, 
+                   int side,        
+                   int strip) const
+{
+  return strip_id (station, layer, phi_module, eta_module, side, strip,
+                   do_checks());
+}
+
+
+
+//----------------------------------------------------------------------------
+
+inline Identifier
+FaserSCT_ID::strip_id ( 	int station,
+               		int layer,
+		        	int phi_module,
+			        int eta_module,
+			        int side,
+			        int row,
+			        int strip,
+                    bool checks) const
+{
+      
+	// Build identifier
+	Identifier result((Identifier::value_type)0);
+      
+      
+	// Pack fields independently      
+	m_tracker_impl.pack  (tracker_field_value(), result);
+	m_sct_impl.pack      (sct_field_value(),     result);
+	m_station_impl.pack  (station,               result);
+	m_layer_impl.pack    (layer,                 result);
+	m_phi_mod_impl.pack  (phi_module,            result);
+	m_eta_mod_impl.pack  (eta_module,            result);
+	m_side_impl.pack     (side,                  result); 	
+	if ( m_hasRows ){
+		m_row_impl.pack      (row,         result);
+	}
+	m_strip_impl.pack    (strip,               result);
+      
+      
+	// Do checks
+      		if(checks) {
+		  	if ( m_hasRows ) strip_id_checks ( station, layer, phi_module, eta_module, side, row, strip );
+			else		 strip_id_checks ( station, layer, phi_module, eta_module, side, strip );
+		}
+      
+		return result;
+   
+}
+
+inline Identifier
+FaserSCT_ID::strip_id ( 	int station,
+               		int layer,
+			        int phi_module,
+			        int eta_module,
+			        int side,
+			        int row,
+			        int strip) const
+{
+  return strip_id (station, layer, phi_module, eta_module,
+                   side, row, strip, do_checks());
+}
+
+
+
+
+
+
+
+
+
+
+//----------------------------------------------------------------------------
+inline Identifier               
+FaserSCT_ID::strip_id        (const ExpandedIdentifier& id) const
+{
+    // Build identifier
+    Identifier result((Identifier::value_type)0);
+
+    // Pack fields independently
+    m_tracker_impl.pack  (tracker_field_value(),    result);
+    m_sct_impl.pack      (sct_field_value(),        result);
+    m_station_impl.pack  (id[m_STATION_INDEX],      result);
+    m_layer_impl.pack    (id[m_LAYER_INDEX],        result);
+    m_phi_mod_impl.pack  (id[m_PHI_MODULE_INDEX],   result);
+    m_eta_mod_impl.pack  (id[m_ETA_MODULE_INDEX],   result);
+    m_side_impl.pack     (id[m_SIDE_INDEX],         result);
+    if ( m_hasRows ){
+    	m_row_impl.pack  (id[m_ROW_INDEX],          result);
+    }
+    m_strip_impl.pack    (id[m_STRIP_INDEX],        result);
+
+    // Do checks
+    if(m_do_checks) {
+    	if ( m_hasRows ){
+
+		strip_id_checks ( id[m_STATION_INDEX],
+		  		          id[m_LAYER_INDEX],
+				          id[m_PHI_MODULE_INDEX],
+				          id[m_ETA_MODULE_INDEX],							
+				          id[m_SIDE_INDEX],
+				          id[m_ROW_INDEX],
+				          id[m_STRIP_INDEX]);
+
+	}
+
+	else {
+        	strip_id_checks ( id[m_STATION_INDEX],  
+                          	  id[m_LAYER_INDEX], 
+                          	  id[m_PHI_MODULE_INDEX], 
+                          	  id[m_ETA_MODULE_INDEX], 
+                          	  id[m_SIDE_INDEX],       
+                          	  id[m_STRIP_INDEX]);    
+	}
+    }
+    return result;
+}
+
+//----------------------------------------------------------------------------
+inline Identifier  
+FaserSCT_ID::strip_id ( const Identifier& wafer_id, int strip ) const
+{
+	// Build identifier
+   	Identifier result(wafer_id);
+  
+   	// Reset strip and then add in value
+   	m_strip_impl.reset   (result);
+ 	m_strip_impl.pack    (strip, result);
+  
+   	if(m_do_checks) {
+               
+		strip_id_checks ( station(result), 
+		    		      layer(result), 
+	             		  phi_module(result), 
+	            		  eta_module(result),   
+	                      side(result), 
+	                      strip );
+	}
+	return result;
+      
+}
+
+//----------------------------------------------------------------------------
+inline Identifier  
+FaserSCT_ID::strip_id ( const Identifier& wafer_id, int row, int strip ) const
+{
+    // Build identifier
+    Identifier result(wafer_id);
+
+    // Reset strip and then add in value
+    if ( m_hasRows ) {
+    	m_row_impl.reset   (result);
+        m_row_impl.pack    (row, result);
+    }
+    m_strip_impl.reset   (result);
+    m_strip_impl.pack    (strip, result);
+
+    if(m_do_checks) {
+        if (m_hasRows){
+
+            strip_id_checks ( station(result),
+                            layer(result),
+                            phi_module(result),
+                            eta_module(result),
+                            side(result),
+                            row,
+                            strip );
+
+
+        }
+        else
+        {
+            strip_id_checks ( station(result), 
+                            layer(result), 
+                            phi_module(result), 
+                            eta_module(result),   
+                            side(result), 
+                            strip );
+        }
+    }
+    return result;
+}
+
+//----------------------------------------------------------------------------
+inline Identifier::diff_type
+FaserSCT_ID::calc_offset(const Identifier& base, const Identifier& target) const
+{
+  Identifier::diff_type tval = static_cast<Identifier::diff_type>(target.get_compact() >> base_bit());
+  Identifier::diff_type bval = static_cast<Identifier::diff_type>(base.get_compact() >> base_bit());
+  return (tval - bval);
+}
+
+//----------------------------------------------------------------------------
+inline Identifier
+FaserSCT_ID::strip_id_offset(const Identifier& base,
+                        Identifier::diff_type offset) const
+{
+  Identifier::value_type bval = base.get_compact() >> base_bit();
+  return Identifier((bval + offset) << base_bit());
+}
+
+//----------------------------------------------------------------------------
+inline int
+FaserSCT_ID::base_bit ( void ) const
+{
+  int base = static_cast<int>(m_strip_impl.shift()); // lowest field base
+  return (base > 32) ? 32 : base;
+  // max base is 32 so we can still read old strip id's and differences
+  // from non-SLHC releases.
+}
+
+//----------------------------------------------------------------------------
+inline IdContext        
+FaserSCT_ID::wafer_context           (void) const
+{
+    ExpandedIdentifier id;
+    return (IdContext(id, 0, m_SIDE_INDEX));
+}
+
+//----------------------------------------------------------------------------
+inline IdContext        
+FaserSCT_ID::strip_context   (void) const
+{
+    ExpandedIdentifier id;
+    return (IdContext(id, 0, m_STRIP_INDEX));
+}
+
+// //----------------------------------------------------------------------------
+// inline bool     
+// FaserSCT_ID::is_barrel       (const Identifier& id) const
+// {
+//     // match bec field
+//     return (m_barrel_field.match(m_bec_impl.unpack(id)));
+// }
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::station       (const Identifier& id) const
+{
+    return (m_station_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::layer         (const Identifier& id) const
+{
+    return (m_layer_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::phi_module      (const Identifier& id) const
+{
+    return (m_phi_mod_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::eta_module            (const Identifier& id) const
+{
+    return (m_eta_mod_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::side            (const Identifier& id) const
+{
+    return (m_side_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int
+FaserSCT_ID::row           (const Identifier& id) const
+{
+      return (m_row_impl.unpack(id));
+}
+
+
+//----------------------------------------------------------------------------
+inline int 
+FaserSCT_ID::strip           (const Identifier& id) const
+{
+    return (m_strip_impl.unpack(id));
+}
+
+
+#endif // TRACKERIDENTIFIER_SCT_ID_H
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/TrackerIdentifierDict.h b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/TrackerIdentifierDict.h
new file mode 100644
index 000000000..4a297467d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/TrackerIdentifierDict.h
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file TrackerIdentifierDict.h
+ *
+ * @brief This file includes the class for dictionary definitions
+ *
+ * @author RD Schaffer <R.D.Schaffer@cern.ch>
+ *
+ * $Id: $
+ */
+#ifndef TRACKERIDENTIFIER_TRACKERIDENTIFIERDICT_H
+#define TRACKERIDENTIFIER_TRACKERIDENTIFIERDICT_H 
+
+#include "TrackerIdentifier/FaserSCT_ID.h"
+
+#endif // TRACKERIDENTIFIER_TRACKERIDENTIFIERDICT_H 
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/selection.xml b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/selection.xml
new file mode 100644
index 000000000..80ea1847c
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/TrackerIdentifier/selection.xml
@@ -0,0 +1,3 @@
+<lcgdict>
+  <class name="FaserSCT_ID" />
+</lcgdict>
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/src/FaserSCT_ID.cxx b/Tracker/TrackerDetDescr/TrackerIdentifier/src/FaserSCT_ID.cxx
new file mode 100644
index 000000000..b2db2f5e8
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/src/FaserSCT_ID.cxx
@@ -0,0 +1,1203 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ Tracker identifier package
+ -------------------------------------------
+***************************************************************************/
+
+//<doc><file>   $Id: FaserSCT_ID.cxx,v 1.43.2.1 2009-03-26 21:54:31 jtseng Exp $
+//<version>     $Name: not supported by cvs2svn $
+
+//<<<<<< INCLUDES                                                       >>>>>>
+#include "GaudiKernel/MsgStream.h"
+
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "Identifier/IdentifierHash.h"
+#include "IdDict/IdDictDefs.h"  
+#include <set>
+#include <algorithm>
+#include <iostream>
+
+//<<<<<< PRIVATE DEFINES                                                >>>>>>
+//<<<<<< PRIVATE CONSTANTS                                              >>>>>>
+//<<<<<< PRIVATE TYPES                                                  >>>>>>
+//<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
+//<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
+//<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
+//<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
+//<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
+//<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
+
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
+
+FaserSCT_ID::FaserSCT_ID(void)
+        :
+        m_sct_region_index(0),
+        m_TRACKER_INDEX(0),
+        m_SCT_INDEX(1),
+        m_STATION_INDEX(2),
+        m_LAYER_INDEX(3),
+        m_PHI_MODULE_INDEX(4),
+        m_ETA_MODULE_INDEX(5),
+        m_SIDE_INDEX(6),
+        m_STRIP_INDEX(7),
+        m_ROW_INDEX(999),
+        m_dict(0),
+        m_wafer_hash_max(0),
+        m_strip_hash_max(0),
+        // m_station_field(0),
+        m_hasRows(false)
+{
+}
+
+void
+FaserSCT_ID::wafer_id_checks ( int station,  
+                          int layer, 
+                          int phi_module, 
+                          int eta_module, 
+                          int side ) const
+{
+
+    // Check that id is within allowed range
+
+    // Fill expanded id
+    ExpandedIdentifier id;
+    id << tracker_field_value() << sct_field_value()
+       << station << layer << phi_module << eta_module << side;
+
+    if (!m_full_wafer_range.match(id)) {  // module range check is sufficient
+        MsgStream log(m_msgSvc, "SCT_ID");
+        log << MSG::ERROR << " FaserSCT_ID::wafer_id result is NOT ok. ID, range "
+            << (std::string)id <<  " " << (std::string)m_full_wafer_range << endmsg;
+    }
+}
+
+void
+FaserSCT_ID::strip_id_checks ( int station,  
+                          int layer, 
+                          int phi_module, 
+                          int eta_module, 
+                          int side,        
+                          int strip) const
+{
+
+    // Check that id is within allowed range
+
+    // Fill expanded id
+    ExpandedIdentifier id;
+    id << tracker_field_value() << sct_field_value()
+       << station << layer << phi_module << eta_module << side << strip;
+
+    if (!m_full_strip_range.match(id)) {  
+        MsgStream log(m_msgSvc, "SCT_ID");
+        log << MSG::ERROR << " FaserSCT_ID::strip_id result is NOT ok. ID, range "
+            << (std::string)id << " " << (std::string)m_full_strip_range << std::endl;
+    }
+}
+
+
+void
+FaserSCT_ID::strip_id_checks ( int station,
+    			  int layer,
+			  int phi_module,
+			  int eta_module,
+			  int side,
+			  int row,
+			  int strip) const
+{
+
+	// Check that id is within allowed range
+      
+     	// Fill expanded id
+      	ExpandedIdentifier id;
+	id << tracker_field_value() << sct_field_value()
+	  			  << station << layer << phi_module << eta_module << side << row << strip;
+      
+      
+	if (!m_full_strip_range.match(id)) {
+		MsgStream log(m_msgSvc, "SCT_ID");
+		log << MSG::ERROR << " FaserSCT_ID::strip_id result is NOT ok. ID, range "
+		  << (std::string)id << " " << (std::string)m_full_strip_range << std::endl;
+	}
+}
+
+
+
+
+int 
+FaserSCT_ID::layer_max(const Identifier& id) const
+{
+    // get max from dictionary
+    ExpandedIdentifier expId;
+    IdContext wafer_context1 = wafer_context();
+    get_expanded_id(id, expId, &wafer_context1);
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        if (range.match(expId)) {
+            const Range::field& layer_field = range[m_LAYER_INDEX];
+            if (layer_field.has_maximum()) {
+                return (layer_field.get_maximum());
+            }
+        }
+    }
+    return (-999);  // default
+}
+
+int 
+FaserSCT_ID::eta_module_min(const Identifier& id) const
+{
+    // get min from dictionary - note that eta modules skip 0 for
+    // sct, so we must search for absolute min
+    ExpandedIdentifier expId;
+    IdContext layer_context(expId, 0, m_LAYER_INDEX);
+    get_expanded_id(id, expId, &layer_context);
+    int result = -999;
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        if (range.match(expId)) {
+            const Range::field& eta_field = range[m_ETA_MODULE_INDEX];
+            if (eta_field.has_minimum()) {
+                int etamin = eta_field.get_minimum();
+                if (-999 == result) {
+                    result = etamin;
+                }
+                else {
+                    if (etamin < result) result = etamin;
+                }
+            }
+        }
+    }
+    return (result);
+}
+
+int 
+FaserSCT_ID::eta_module_max(const Identifier& id) const
+{
+    // get max from dictionary - note that eta modules skip 0 for
+    // sct, so we must search for absolute max
+    ExpandedIdentifier expId;
+    IdContext layer_context(expId, 0, m_LAYER_INDEX);
+    get_expanded_id(id, expId, &layer_context);
+    int result = -999;
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        if (range.match(expId)) {
+            const Range::field& eta_field = range[m_ETA_MODULE_INDEX];
+            if (eta_field.has_maximum()) {
+                int etamax = eta_field.get_maximum();
+                if (result < etamax) result = etamax;
+            }
+        }
+    }
+    return (result);
+}
+
+int     
+FaserSCT_ID::strip_max       (const Identifier& id) const
+{
+    // get max from dictionary - note that eta modules skip 0 for
+    // sct, so we must search for absolute max
+    ExpandedIdentifier expId;
+    IdContext layer_context(expId, 0, m_LAYER_INDEX);
+    get_expanded_id(id, expId, &layer_context);
+    int result = -999;
+    for (unsigned int i = 0; i < m_full_strip_range.size(); ++i) {
+        const Range& range = m_full_strip_range[i];
+        if (range.match(expId)) {
+            const Range::field& strip_field = range[m_STRIP_INDEX];
+            if (strip_field.has_maximum()) {
+                int strip = strip_field.get_maximum();
+                if (result < strip) result = strip;
+            }
+        }
+    }
+    return (result);
+}
+
+
+bool    
+FaserSCT_ID::is_eta_module_min       (const Identifier& id) const 
+{
+    // get min from dictionary
+    return (eta_module(id) == eta_module_min(id));
+}
+
+bool    
+FaserSCT_ID::is_eta_module_max       (const Identifier& id)  const
+{
+    // get max from dictionary
+    return (eta_module(id) == eta_module_max(id));
+}
+
+int 
+FaserSCT_ID::phi_module_max(const Identifier& id) const
+{
+    // get max from dictionary
+    ExpandedIdentifier expId;
+    IdContext wafer_context1 = wafer_context();
+    get_expanded_id(id, expId, &wafer_context1);
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        if (range.match(expId)) {
+            const Range::field& phi_field = range[m_PHI_MODULE_INDEX];
+            if (phi_field.has_maximum()) {
+                return (phi_field.get_maximum());
+            }
+        }
+    }
+    return -1;
+}
+
+bool    
+FaserSCT_ID::is_phi_module_max(const Identifier& id) const
+{
+    // get max from dictionary
+    return (phi_module(id) == phi_module_max(id));
+}
+
+int
+FaserSCT_ID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
+{
+    MsgStream log(m_msgSvc, "SCT_ID");
+    log << MSG::INFO << "Initialize from dictionary" << endmsg;
+  
+    // Check whether this helper should be reinitialized
+    if (!reinitialize(dict_mgr)) {
+        log << MSG::INFO << "Request to reinitialize not satisfied - tags have not changed" << endmsg;
+        return (0);
+    }
+    else {
+        if (m_msgSvc) {
+            log << MSG::DEBUG << "(Re)initialize" << endmsg;
+        }
+        else {
+            std::cout  << " DEBUG (Re)initialize" << std::endl;
+        }
+    }
+
+    // init base object
+    if(FaserDetectorID::initialize_from_dictionary(dict_mgr)) 
+    {
+        if (m_msgSvc) {
+            log << MSG::ERROR << " FaserSCT_ID::initialize_from_dict - cannot initialize base objec dictionary " << endmsg;
+        } 
+        else
+        {
+            std::cout <<" ERROR FaserSCT_ID::initialize_from_dict - cannot initialize base object" << std::endl;
+        }
+        return (1);
+    }
+
+    // Register version of Tracker dictionary 
+    if (register_dict_tag(dict_mgr, "Tracker")) return(1);
+
+    m_dict = dict_mgr.find_dictionary ("Tracker"); 
+    if(!m_dict) {
+        if (m_msgSvc) {
+            log << MSG::ERROR << " FaserSCT_ID::initialize_from_dict - cannot access Tracker dictionary " << endmsg;
+        } 
+        else
+        {
+            std::cout <<" ERROR FaserSCT_ID::initialize_from_dict - cannot access Tracker dictionary" << std::endl;
+        }
+        
+        return 1;
+    }
+
+    // Initialize the field indices
+    if(initLevelsFromDict()) return (1);
+
+    //
+    // Set barrel field for testing is_barrel
+    //
+    // int barrel_value;
+    // if (m_dict->get_label_value("barrel_endcap", "barrel", barrel_value)) {
+    //     log << MSG::ERROR << "Could not get value for label 'barrel' of field 'barrel_endcap' in dictionary " 
+    //         << m_dict->m_name
+    //         << endmsg;
+    //     return (1);
+    // }
+    // m_barrel_field.clear();
+    // m_barrel_field.add_value(barrel_value);
+    // if (m_msgSvc) {
+    //     log << MSG::DEBUG << " FaserSCT_ID::initialize_from_dict " 
+    //         << "Set barrel field values: "  
+    //         << (std::string)m_barrel_field
+    //         << endmsg;
+    // }
+    // else {
+    //     std::cout << " DEBUG FaserSCT_ID::initialize_from_dict " 
+    //               << "Set barrel field values: "  
+    //               << (std::string)m_barrel_field
+    //               << std::endl;
+    // }
+    
+
+    //
+    // Build multirange for the valid set of identifiers
+    //
+
+
+    // Find value for the field Tracker
+    const IdDictDictionary* faserDict = dict_mgr.find_dictionary ("FASER"); 
+    int trackerField   = -1;
+    if (faserDict->get_label_value("subdet", "Tracker", trackerField)) {
+        log << MSG::ERROR << "Could not get value for label 'Tracker' of field 'subdet' in dictionary " 
+            << faserDict->m_name
+            << endmsg;
+        return (1);
+    }
+
+    // Find value for the field SCT
+    int sctField   = -1;
+    if (m_dict->get_label_value("part", "SCT", sctField)) {
+        log << MSG::ERROR << "Could not get value for label 'SCT' of field 'part' in dictionary " 
+            << m_dict->m_name
+            << endmsg;
+        return (1);
+    }
+    if (m_msgSvc) {
+        log << MSG::DEBUG << " FaserSCT_ID::initialize_from_dict " 
+            << "Found field values: SCT "  
+            << sctField
+            << std::endl;
+    }
+    else {
+        std::cout << " DEBUG FaserSCT_ID::initialize_from_dict " 
+                  << "Found field values: SCT "  
+                  << sctField
+                  << std::endl;
+    }
+    
+    // Set up id for region and range prefix
+    ExpandedIdentifier region_id;
+    region_id.add(trackerField);
+    region_id.add(sctField);
+    Range prefix;
+    m_full_wafer_range = m_dict->build_multirange(region_id, prefix, "side");
+    m_full_strip_range = m_dict->build_multirange(region_id, prefix);
+
+    // Setup the hash tables
+    if(init_hashes()) return (1);
+
+    // Setup hash tables for finding neighbors
+    if(init_neighbors()) return (1);
+    
+    if (m_msgSvc) {
+        log << MSG::INFO << " FaserSCT_ID::initialize_from_dict "  << endmsg;
+        log << MSG::DEBUG  
+            << "Wafer range -> " << (std::string)m_full_wafer_range
+            <<   endmsg;
+        log << MSG::DEBUG
+            << "Strip range -> " << (std::string)m_full_strip_range
+            << endmsg;
+    }
+    else {
+        std::cout << " INFO FaserSCT_ID::initialize_from_dict "  << std::endl;
+        std::cout << " DEBUG  Wafer range -> " << (std::string)m_full_wafer_range
+                  <<   std::endl;
+        std::cout << " DEBUG Strip range -> " << (std::string)m_full_strip_range
+                  << std::endl;
+    }
+    
+    return 0;
+}
+
+int
+FaserSCT_ID::init_hashes(void)
+{
+
+    //
+    // create a vector(s) to retrieve the hashes for compact ids. For
+    // the moment, we implement a hash for wafers but NOT for strips
+    // (too many)
+    //
+    MsgStream log(m_msgSvc, "SCT_ID");
+    // wafer hash
+    m_wafer_hash_max = m_full_wafer_range.cardinality();
+    m_wafer_vec.resize(m_wafer_hash_max);
+    unsigned int nids = 0;
+    std::set<Identifier> ids;
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        Range::const_identifier_factory first = range.factory_begin();
+        Range::const_identifier_factory last  = range.factory_end();
+        for (; first != last; ++first) {
+            const ExpandedIdentifier& exp_id = (*first);
+            Identifier id = wafer_id(exp_id[m_STATION_INDEX],
+                                     exp_id[m_LAYER_INDEX], 
+                                     exp_id[m_PHI_MODULE_INDEX],
+                                     exp_id[m_ETA_MODULE_INDEX],
+                                     exp_id[m_SIDE_INDEX]);
+            if(!(ids.insert(id)).second) {
+                log << MSG::ERROR << " FaserSCT_ID::init_hashes "
+                    << " Error: duplicated id for wafer id. nid " << nids
+                    << " compact id " << id.getString()
+                    << " id " << (std::string)exp_id << endmsg;
+                return (1);
+            }
+            nids++;
+        }
+    }
+    if(ids.size() != m_wafer_hash_max) {
+        log << MSG::ERROR << " FaserSCT_ID::init_hashes "
+            << " Error: set size NOT EQUAL to hash max. size " << ids.size()
+            << " hash max " << m_wafer_hash_max 
+            << endmsg;
+        return (1);
+    }
+
+    nids = 0;
+    std::set<Identifier>::const_iterator first = ids.begin();
+    std::set<Identifier>::const_iterator last  = ids.end();
+    for (; first != last && nids < m_wafer_vec.size(); ++first) {
+        m_wafer_vec[nids] = (*first);
+        nids++;
+    }
+
+    // strip hash - we do not keep a vec for the strips - too large
+    m_strip_hash_max = m_full_strip_range.cardinality();
+
+    return (0);
+}
+
+int             
+FaserSCT_ID::get_prev_in_phi(const IdentifierHash& id, IdentifierHash& prev) const
+{
+    unsigned short index = id;
+    if (index < m_prev_phi_wafer_vec.size()) {
+        if (m_prev_phi_wafer_vec[index] == NOT_VALID_HASH) return (1);
+        prev =  m_prev_phi_wafer_vec[index];
+        return (0);
+    }
+    return (1);
+}
+
+int             
+FaserSCT_ID::get_next_in_phi(const IdentifierHash& id, IdentifierHash& next) const
+{
+    unsigned short index = id;
+    if (index < m_next_phi_wafer_vec.size()) {
+        if (m_next_phi_wafer_vec[index] == NOT_VALID_HASH) return (1);
+        next =  m_next_phi_wafer_vec[index];
+        return (0);
+    }
+    return (1);
+}
+
+int             
+FaserSCT_ID::get_prev_in_eta(const IdentifierHash& id, IdentifierHash& prev) const
+{
+    unsigned short index = id;
+    if (index < m_prev_eta_wafer_vec.size()) {
+        if (m_prev_eta_wafer_vec[index] == NOT_VALID_HASH) return (1);
+        prev =  m_prev_eta_wafer_vec[index];
+        return (0);
+    }
+    return (1);
+}
+
+int
+FaserSCT_ID::get_next_in_eta(const IdentifierHash& id, IdentifierHash& next) const
+{
+    unsigned short index = id;
+    if (index < m_next_eta_wafer_vec.size()) {
+        if (m_next_eta_wafer_vec[index] == NOT_VALID_HASH) return (1);
+        next =  m_next_eta_wafer_vec[index];
+        return (0);
+    }
+    return (1);
+}
+
+int
+FaserSCT_ID::get_other_side  (const IdentifierHash& hashId, IdentifierHash& other) const
+{
+    if (m_dict) {
+        // get max from dictionary
+        Identifier id;
+        IdContext wafer_context1 = wafer_context();
+        if(!get_id(hashId, id, &wafer_context1)) {
+            other = side(id) ? hashId - 1 : hashId + 1;
+            return (0);
+        }
+    }
+    return (1);
+}
+
+int
+FaserSCT_ID::init_neighbors(void)
+{
+    //
+    // create a vector(s) to retrieve the hashes for compact ids for
+    // wafer neighbors.
+    //
+
+    MsgStream log(m_msgSvc, "SCT_ID");
+    if (m_msgSvc) {
+        log << MSG::DEBUG << "FaserSCT_ID::init_neighbors " << endmsg;
+    }
+    else {
+        std::cout << " DEBUG FaserSCT_ID::init_neighbors " << std::endl;
+    }
+  
+
+    m_prev_phi_wafer_vec.resize(m_wafer_hash_max, NOT_VALID_HASH);
+    m_next_phi_wafer_vec.resize(m_wafer_hash_max, NOT_VALID_HASH);
+    m_prev_eta_wafer_vec.resize(m_wafer_hash_max, NOT_VALID_HASH);
+    m_next_eta_wafer_vec.resize(m_wafer_hash_max, NOT_VALID_HASH);
+
+    for (unsigned int i = 0; i < m_full_wafer_range.size(); ++i) {
+        const Range& range = m_full_wafer_range[i];
+        const Range::field& phi_field = range[m_PHI_MODULE_INDEX];
+        const Range::field& eta_field = range[m_ETA_MODULE_INDEX];
+        Range::const_identifier_factory first = range.factory_begin();
+        Range::const_identifier_factory last  = range.factory_end();
+        for (; first != last; ++first) {
+            const ExpandedIdentifier& exp_id = (*first);
+            ExpandedIdentifier::element_type previous_phi;
+            ExpandedIdentifier::element_type next_phi;
+            ExpandedIdentifier::element_type previous_eta;
+            ExpandedIdentifier::element_type next_eta;
+            bool pphi = phi_field.get_previous(exp_id[m_PHI_MODULE_INDEX], previous_phi);
+            bool nphi = phi_field.get_next    (exp_id[m_PHI_MODULE_INDEX], next_phi);
+            bool peta = eta_field.get_previous(exp_id[m_ETA_MODULE_INDEX], previous_eta);
+            bool neta = eta_field.get_next    (exp_id[m_ETA_MODULE_INDEX], next_eta);
+
+            IdContext      wcontext = wafer_context();
+            
+            // First get primary hash id
+            IdentifierHash hash_id;
+            Identifier id = wafer_id(exp_id[m_STATION_INDEX],
+                                     exp_id[m_LAYER_INDEX], 
+                                     exp_id[m_PHI_MODULE_INDEX],
+                                     exp_id[m_ETA_MODULE_INDEX],
+                                     exp_id[m_SIDE_INDEX]);
+            if (get_hash(id, hash_id, &wcontext)) {
+                log << MSG::ERROR << " FaserSCT_ID::init_neighbors - unable to get hash, exp/compact "
+                    << show_to_string(id, &wcontext)
+                    << " " << (std::string)m_full_wafer_range << endmsg;
+                return (1);
+            }
+
+            // index for the subsequent arrays
+            unsigned short index = hash_id;
+            assert (hash_id < m_prev_phi_wafer_vec.size());
+            assert (hash_id < m_next_phi_wafer_vec.size());
+            assert (hash_id < m_prev_eta_wafer_vec.size());
+            assert (hash_id < m_next_eta_wafer_vec.size());
+            
+            if (pphi) {
+                // Get previous phi hash id
+                ExpandedIdentifier expId = exp_id;
+                expId[m_PHI_MODULE_INDEX] = previous_phi;
+                Identifier id = wafer_id(expId[m_STATION_INDEX],
+                                         expId[m_LAYER_INDEX], 
+                                         expId[m_PHI_MODULE_INDEX],
+                                         expId[m_ETA_MODULE_INDEX],
+                                         expId[m_SIDE_INDEX]);
+                if (get_hash(id, hash_id, &wcontext)) {
+                    log << MSG::ERROR << " FaserSCT_ID::init_neighbors - unable to get previous phi hash, exp/compact " << id.getString() << " " 
+                        << endmsg;
+                    return (1);
+                }
+                m_prev_phi_wafer_vec[index] = hash_id;
+            }
+            
+            if (nphi) {
+                // Get next phi hash id
+                ExpandedIdentifier expId = exp_id;
+                expId[m_PHI_MODULE_INDEX] = next_phi;
+                Identifier id = wafer_id(expId[m_STATION_INDEX],
+                                         expId[m_LAYER_INDEX], 
+                                         expId[m_PHI_MODULE_INDEX],
+                                         expId[m_ETA_MODULE_INDEX],
+                                         expId[m_SIDE_INDEX]);
+                if (get_hash(id, hash_id, &wcontext)) {
+                    log << MSG::ERROR << " FaserSCT_ID::init_neighbors - unable to get next phi hash, exp/compact " << id.getString() << 
+                        " " << MSG::hex << id.getString() << MSG::dec << endmsg;
+                    return (1);
+                }
+                m_next_phi_wafer_vec[index] = hash_id;
+            }
+            
+            if (peta) {
+                // Get previous eta hash id
+                ExpandedIdentifier expId = exp_id;
+                expId[m_ETA_MODULE_INDEX] = previous_eta;
+                Identifier id = wafer_id(expId[m_STATION_INDEX],
+                                         expId[m_LAYER_INDEX], 
+                                         expId[m_PHI_MODULE_INDEX],
+                                         expId[m_ETA_MODULE_INDEX],
+                                         expId[m_SIDE_INDEX]);
+                if (get_hash(id, hash_id, &wcontext)) {
+                    log << MSG::ERROR << " FaserSCT_ID::init_neighbors - unable to get previous eta hash, exp/compact " << id.getString() 
+                        << " " << std::endl;
+                    return (1);
+                }
+                m_prev_eta_wafer_vec[index] = hash_id;
+            }
+            
+            if (neta) {
+                // Get next eta hash id
+                ExpandedIdentifier expId = exp_id;
+                expId[m_ETA_MODULE_INDEX] = next_eta;
+                Identifier id = wafer_id(expId[m_STATION_INDEX],
+                                         expId[m_LAYER_INDEX], 
+                                         expId[m_PHI_MODULE_INDEX],
+                                         expId[m_ETA_MODULE_INDEX],
+                                         expId[m_SIDE_INDEX]);
+                if (get_hash(id, hash_id, &wcontext)) {
+                    log << MSG::ERROR << " FaserSCT_ID::init_neighbors - unable to get next eta hash, exp/compact " << id.getString() 
+                        << " " << endmsg;
+                    return (1);
+                }
+                m_next_eta_wafer_vec[index] = hash_id;
+            }
+            
+
+//          std::cout << " FaserSCT_ID::init_neighbors "
+//                    << " phi, previous, next " << id[m_PHI_MODULE_INDEX]
+//                    << " " << pphi
+//                    << " " << previous_phi
+//                    << " " << nphi
+//                    << " " << next_phi
+//                    << " eta, previous, next " << id[m_ETA_MODULE_INDEX]
+//                    << " " << peta
+//                    << " " << previous_eta
+//                    << " " << neta
+//                    << " " << next_eta
+//                    << " id " << (std::string)(*first) 
+//                    << std::endl;
+        }
+    }
+    return (0);
+}
+
+
+
+int     
+FaserSCT_ID::initLevelsFromDict()
+{
+
+
+    MsgStream log(m_msgSvc, "SCT_ID");
+    if(!m_dict) {
+        log << MSG::ERROR << " FaserSCT_ID::initLevelsFromDict - dictionary NOT initialized " << endmsg;
+        return (1);
+    }
+    
+    // Find out which identifier field corresponds to each level. Use
+    // names to find each field/leve.
+
+    m_TRACKER_INDEX               = 999;
+    m_SCT_INDEX                 = 999;
+    m_STATION_INDEX           = 999;
+    m_LAYER_INDEX          = 999;
+    m_PHI_MODULE_INDEX          = 999;
+    m_ETA_MODULE_INDEX          = 999;
+    m_SIDE_INDEX                = 999;
+    m_ROW_INDEX			= 999;
+    m_STRIP_INDEX               = 999;
+    m_hasRows			= false;
+    
+
+    // Save index to a SCT region for unpacking
+    ExpandedIdentifier id; 
+    id << tracker_field_value() << sct_field_value();
+    if (m_dict->find_region(id, m_sct_region_index)) {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find sct region index: id, reg "  
+            << (std::string)id << " " << m_sct_region_index
+            << endmsg;
+        return (1);
+    }
+
+    // Find a SCT region
+    IdDictField* field = m_dict->find_field("subdet");
+    if (field) {
+        m_TRACKER_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'subdet' field "  << endmsg;
+        return (1);
+    }
+    field = m_dict->find_field("part");
+    if (field) {
+        m_SCT_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'part' field "  << endmsg;
+        return (1);
+    }
+    field = m_dict->find_field("station");
+    if (field) {
+        m_STATION_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'station' field "  << endmsg;
+        return (1);
+    }
+    field = m_dict->find_field("layer");
+    if (field) {
+        m_LAYER_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'layer' field "   << endmsg;
+        return (1);
+    }
+    field = m_dict->find_field("phi_module");
+    if (field) {
+        m_PHI_MODULE_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR<< "FaserSCT_ID::initLevelsFromDict - unable to find 'phi_module' field "  << endmsg;
+        return (1);
+    }
+    field = m_dict->find_field("eta_module");
+    if (field) {
+        m_ETA_MODULE_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'eta_module' field " << endmsg;       
+        return (1);
+    }
+    field = m_dict->find_field("side");
+    if (field) {
+        m_SIDE_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'side' field "        << endmsg;
+        return (1);
+    }
+
+
+    field = m_dict->find_field("row");
+    if (field) {
+    	m_ROW_INDEX 	= field->m_index;
+	m_hasRows	= true		;
+    }
+	    
+    else {
+
+    	//log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'row' field " << endmsg;
+	//return (1);
+    }
+
+
+    field = m_dict->find_field("strip");
+    if (field) {
+        m_STRIP_INDEX = field->m_index;
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::initLevelsFromDict - unable to find 'strip' field " << endmsg;    
+        return (1);
+    }
+    
+    // Set the field implementations: for station, layer, eta/phi mod
+
+    const IdDictRegion& region = *m_dict->m_regions[m_sct_region_index];
+
+    m_tracker_impl    = region.m_implementation[m_TRACKER_INDEX]; 
+    m_sct_impl        = region.m_implementation[m_SCT_INDEX]; 
+    m_station_impl    = region.m_implementation[m_STATION_INDEX]; 
+    m_layer_impl      = region.m_implementation[m_LAYER_INDEX]; 
+    m_phi_mod_impl    = region.m_implementation[m_PHI_MODULE_INDEX]; 
+    m_eta_mod_impl    = region.m_implementation[m_ETA_MODULE_INDEX]; 
+    m_side_impl       = region.m_implementation[m_SIDE_INDEX];
+    if (m_hasRows){
+    	m_row_impl    = region.m_implementation[m_ROW_INDEX];
+    }    	
+    m_strip_impl      = region.m_implementation[m_STRIP_INDEX]; 
+
+    if (m_msgSvc) {
+        log << MSG::DEBUG << "decode index and bit fields for each level: " << endmsg;
+        log << MSG::DEBUG << "tracker  "  << m_tracker_impl.show_to_string() << endmsg;
+        log << MSG::DEBUG << "sct      "  << m_sct_impl.show_to_string() << endmsg; 
+        log << MSG::DEBUG << "station  "  << m_station_impl.show_to_string() << endmsg; 
+        log << MSG::DEBUG << "layer    "  << m_layer_impl.show_to_string() << endmsg; 
+        log << MSG::DEBUG << "phi_mod  "  << m_phi_mod_impl.show_to_string() << endmsg; 
+        log << MSG::DEBUG << "eta_mod  "  << m_eta_mod_impl.show_to_string() << endmsg; 
+        log << MSG::DEBUG << "side     "  << m_side_impl.show_to_string() << endmsg; 
+	if (m_hasRows){
+		log << MSG::DEBUG << "row      "  << m_row_impl.show_to_string() << endmsg;
+	}
+        log << MSG::DEBUG << "strip    "  << m_strip_impl.show_to_string() << endmsg; 
+    }
+    else {
+        std::cout << " DEBUG decode index and bit fields for each level: " << std::endl;
+        std::cout << " DEBUG tracker  "  << m_tracker_impl.show_to_string() << std::endl;
+        std::cout << " DEBUG sct      "  << m_sct_impl.show_to_string() << std::endl; 
+        std::cout << " DEBUG station  "  << m_station_impl.show_to_string() << std::endl; 
+        std::cout << " DEBUG layer    "  << m_layer_impl.show_to_string() << std::endl; 
+        std::cout << " DEBUG phi_mod  "  << m_phi_mod_impl.show_to_string() << std::endl; 
+        std::cout << " DEBUG eta_mod  "  << m_eta_mod_impl.show_to_string() << std::endl; 
+        std::cout << " DEBUG side     "  << m_side_impl.show_to_string() << std::endl;
+	if ( m_hasRows ){
+		log <<" DEBUG row     "  << m_row_impl.show_to_string() << std::endl;
+	}
+        std::cout << " DEBUG strip    "  << m_strip_impl.show_to_string() << std::endl; 
+    }
+    
+//      std::cout << "FaserSCT_ID::initLevelsFromDict - found levels "       << std::endl;
+//      std::cout << "subdet        "   << m_TRACKER_INDEX        << std::endl;
+//      std::cout << "part          "   << m_SCT_INDEX          << std::endl;
+//      std::cout << "barrel_endcap "   << m_STATION_INDEX    << std::endl;
+//      std::cout << "layer         "   << m_LAYER_INDEX   << std::endl;
+//      std::cout << "phi_module    "   << m_PHI_MODULE_INDEX   << std::endl;
+//      std::cout << "eta_module    "   << m_ETA_MODULE_INDEX   << std::endl;
+//      std::cout << "side          "   << m_SIDE_INDEX         << std::endl;
+//      std::cout << "strip         "   << m_STRIP_INDEX        << std::endl;
+
+    std::cout << "tracker "  << m_tracker_impl.decode_index() << " " 
+              <<   (std::string)m_tracker_impl.ored_field() << " " 
+              << std::hex    << m_tracker_impl.mask() << " " 
+              << m_tracker_impl.zeroing_mask() << " " 
+              << std::dec    << m_tracker_impl.shift() << " "
+              << m_tracker_impl.bits() << " "
+              << m_tracker_impl.bits_offset()
+              << std::endl;
+    std::cout << "sct"     << m_sct_impl.decode_index() << " " 
+              <<   (std::string)m_sct_impl.ored_field() << " " 
+              << std::hex    << m_sct_impl.mask() << " " 
+              << m_sct_impl.zeroing_mask() << " " 
+              << std::dec    << m_sct_impl.shift() << " "
+              << m_sct_impl.bits() << " "
+              << m_sct_impl.bits_offset()
+              << std::endl;
+    std::cout << "station"     << m_station_impl.decode_index() << " " 
+              <<   (std::string)m_station_impl.ored_field() << " " 
+              << std::hex    << m_station_impl.mask() << " " 
+              << m_station_impl.zeroing_mask() << " " 
+              << std::dec    << m_station_impl.shift() << " "
+              << m_station_impl.bits() << " "
+              << m_station_impl.bits_offset()
+              << std::endl;
+    std::cout << "layer"<< m_layer_impl.decode_index() << " " 
+              <<   (std::string)m_layer_impl.ored_field() << " " 
+              << std::hex    << m_layer_impl.mask() << " " 
+              << m_layer_impl.zeroing_mask() << " " 
+              << std::dec    << m_layer_impl.shift() << " "
+              << m_layer_impl.bits() << " "
+              << m_layer_impl.bits_offset()
+              << std::endl;
+    std::cout << "phi_mod" << m_phi_mod_impl.decode_index() << " " 
+              <<   (std::string)m_phi_mod_impl.ored_field() << " " 
+              << std::hex    << m_phi_mod_impl.mask() << " " 
+              << m_phi_mod_impl.zeroing_mask() << " " 
+              << std::dec    << m_phi_mod_impl.shift() << " "
+              << m_phi_mod_impl.bits() << " "
+              << m_phi_mod_impl.bits_offset()
+              << std::endl;
+    std::cout << "eta_mod" << m_eta_mod_impl.decode_index() << " " 
+              <<   (std::string)m_eta_mod_impl.ored_field() << " " 
+              << std::hex    << m_eta_mod_impl.mask() << " " 
+              << m_eta_mod_impl.zeroing_mask() << " " 
+              << std::dec    << m_eta_mod_impl.shift() << " "
+              << m_eta_mod_impl.bits() << " "
+              << m_eta_mod_impl.bits_offset()
+              << std::endl;
+    std::cout << "side"    << m_side_impl.decode_index() << " " 
+              <<   (std::string)m_side_impl.ored_field() << " " 
+              << std::hex    << m_side_impl.mask() << " " 
+              << m_side_impl.zeroing_mask() << " " 
+              << std::dec    << m_side_impl.shift() << " "
+              << m_side_impl.bits() << " "
+              << m_side_impl.bits_offset()
+              << std::endl;
+
+    if ( m_hasRows ){    
+    	std::cout << "row"    << m_row_impl.decode_index() << " "
+	  	  <<   (std::string)m_row_impl.ored_field() << " "
+		  << std::hex    << m_row_impl.mask() << " "
+		  << m_row_impl.zeroing_mask() << " "
+		  << std::dec    << m_row_impl.shift() << " "
+		  << m_row_impl.bits() << " "
+		  << m_row_impl.bits_offset()
+		  << std::endl;
+    }
+
+
+    std::cout << "strip"   << m_strip_impl.decode_index() << " " 
+              <<   (std::string)m_strip_impl.ored_field() << " " 
+              << std::hex    << m_strip_impl.mask() << " " 
+              << m_strip_impl.zeroing_mask() << " " 
+              << std::dec    << m_strip_impl.shift() << " "
+              << m_strip_impl.bits() << " "
+              << m_strip_impl.bits_offset()
+              << std::endl;
+
+    return (0);
+}
+
+FaserSCT_ID::size_type       
+FaserSCT_ID::wafer_hash_max (void) const
+{
+    return m_wafer_hash_max;
+}
+
+FaserSCT_ID::size_type       
+FaserSCT_ID::strip_hash_max (void) const
+{
+    return m_strip_hash_max;
+}
+
+FaserSCT_ID::const_id_iterator       FaserSCT_ID::wafer_begin             (void) const
+{
+    return (m_wafer_vec.begin());
+}
+
+FaserSCT_ID::const_id_iterator       FaserSCT_ID::wafer_end               (void) const
+{
+    return (m_wafer_vec.end());
+}
+
+FaserSCT_ID::const_expanded_id_iterator      FaserSCT_ID::strip_begin     (void) const
+{
+    return (m_full_strip_range.factory_begin());
+}
+
+FaserSCT_ID::const_expanded_id_iterator      FaserSCT_ID::strip_end       (void) const
+{
+    return (m_full_strip_range.factory_end());
+}
+
+// From hash get Identifier
+int     
+FaserSCT_ID::get_id          (const IdentifierHash& hash_id,
+                         Identifier& id,
+                         const IdContext* context) const
+{
+
+    int result = 1;
+    id.clear();
+
+    size_t begin = (context) ? context->begin_index(): 0;
+    // cannot get hash if end is 0:
+    size_t end   = (context) ? context->end_index()  : 0; 
+    if (0 == begin) { 
+        // No hashes yet for ids with prefixes
+        if (m_SIDE_INDEX == end) {
+            if (hash_id < (unsigned int)(m_wafer_vec.end() - m_wafer_vec.begin())) {
+                id = m_wafer_vec[hash_id];
+                result = 0;
+            }
+        }
+        else if (m_STRIP_INDEX == end) {
+            // Do not know how to calculate strip id from hash yet!!
+            std::cout << "Do not know how to calculate strip id from hash yet!!" << std::endl;
+        }
+    }
+    return (result);
+}
+
+void
+FaserSCT_ID::get_expanded_id (const Identifier& id,
+                         ExpandedIdentifier& exp_id,
+                         const IdContext* context) const
+{
+    exp_id.clear();
+    exp_id << tracker_field_value()
+           << sct_field_value()
+           << station(id)
+           << layer(id)
+           << phi_module(id)
+           << eta_module(id)
+           << side(id);
+    if(!context || context->end_index() == m_STRIP_INDEX) {
+    	if ( m_hasRows) {
+		exp_id << row(id) << strip(id);
+	}
+	else {
+        	exp_id << strip(id);
+	}
+    }
+}
+
+int     
+FaserSCT_ID::get_hash        (const Identifier& id, 
+                         IdentifierHash& hash_id,
+                         const IdContext* context) const
+{
+
+    // Get the hash code from either a vec (for wafers) or calculate
+    // it (strips). For the former, we convert to compact and call
+    // get_hash again. For the latter, we calculate the hash from the
+    // Identifier.
+
+    int result = 1;
+    hash_id = 0;
+    size_t begin = (context) ? context->begin_index(): 0;
+    size_t end   = (context) ? context->end_index()  : 0; 
+    if (0 == begin) {
+        // No hashes yet for ids with prefixes
+        if (m_SIDE_INDEX  == end) {
+            hash_id = wafer_hash(id);
+            if (hash_id.is_valid()) result = 0;
+        }
+        else if (context && context->end_index() == m_STRIP_INDEX) {
+            // Must calculate for strip hash
+            ExpandedIdentifier new_id;
+            get_expanded_id(id, new_id);
+            hash_id =  m_full_strip_range.cardinalityUpTo(new_id);
+            result = 0;
+        }
+    }
+    return (result);
+}
+
+
+void    
+FaserSCT_ID::test_wafer_packing      (void) const
+{
+    MsgStream log(m_msgSvc, "SCT_ID");
+
+    if (m_dict) {
+        
+        int nids = 0;
+        int nerr = 0;
+        IdContext context = wafer_context();
+        const_id_iterator first = m_wafer_vec.begin();
+        const_id_iterator last  = m_wafer_vec.end();
+        for (; first != last; ++first, ++nids) {
+            Identifier id = (*first);
+            ExpandedIdentifier exp_id;
+            get_expanded_id(id, exp_id, &context);
+            Identifier new_id = wafer_id(exp_id[m_STATION_INDEX],
+                                         exp_id[m_LAYER_INDEX], 
+                                         exp_id[m_PHI_MODULE_INDEX],
+                                         exp_id[m_ETA_MODULE_INDEX],
+                                         exp_id[m_SIDE_INDEX]);
+            if (id != new_id) {
+                log << MSG::ERROR << "FaserSCT_ID::test_wafer_packing: new and old compacts not equal. New/old/expanded ids " 
+                    << MSG::hex << show_to_string(id) << " " << show_to_string(new_id) << " " << MSG::dec 
+                    << (std::string)exp_id << endmsg;
+                nerr++;
+                continue;
+            }
+            // check wafer id
+            if (!exp_id[m_SIDE_INDEX]) {
+                
+                Identifier new_id1 = module_id(exp_id[m_STATION_INDEX],
+                                               exp_id[m_LAYER_INDEX], 
+                                               exp_id[m_PHI_MODULE_INDEX],
+                                               exp_id[m_ETA_MODULE_INDEX]);
+                if (id != new_id1) {
+                    log << MSG::ERROR << "FaserSCT_ID::test_wafer_packing: new and old module idsnot equal. New/old/expanded ids " 
+                        << MSG::hex << show_to_string(id) << " " << show_to_string(new_id1) << " " << MSG::dec 
+                        << (std::string)exp_id << endmsg;
+                    nerr++;
+                    continue;
+                }
+            }
+        }
+
+        if (m_msgSvc) { 
+            log << MSG::DEBUG << "FaserSCT_ID::test_wafer_packing: tested wafer and module ids. nids, errors " 
+                << nids << " " << nerr << endmsg;
+        }
+        else {
+            std::cout << " DEBUG FaserSCT_ID::test_wafer_packing: tested wafer and module ids. nids, errors " 
+                      << nids << " " << nerr << std::endl;
+        }
+        
+        nids = 0;
+        context = strip_context();
+        const_expanded_id_iterator      first_sct = strip_begin();  
+        const_expanded_id_iterator      last_sct  = strip_end();
+        for (; first_sct != last_sct; ++first_sct, ++nids) {
+            if (nids%10000 != 1) continue;
+            const ExpandedIdentifier& exp_id = *first_sct;
+            ExpandedIdentifier new_exp_id;
+
+            Identifier id = wafer_id(exp_id[m_STATION_INDEX],
+                                     exp_id[m_LAYER_INDEX], 
+                                     exp_id[m_PHI_MODULE_INDEX],
+                                     exp_id[m_ETA_MODULE_INDEX],
+                                     exp_id[m_SIDE_INDEX]);
+            get_expanded_id(id, new_exp_id, &context);
+            if (exp_id[0] != new_exp_id[0] ||
+                exp_id[1] != new_exp_id[1] ||
+                exp_id[2] != new_exp_id[2] ||
+                exp_id[3] != new_exp_id[3] ||
+                exp_id[4] != new_exp_id[4] ||
+                exp_id[5] != new_exp_id[5] ||
+                exp_id[6] != new_exp_id[6]) {
+                log << MSG::ERROR << "FaserSCT_ID::test_wafer_packing: new and old ids not equal. New/old/compact ids "
+                    << (std::string)new_exp_id << " " << (std::string)exp_id
+                    << " " << show_to_string(id) << endmsg;
+                continue;
+            }
+
+            Identifier stripid	;
+	    Identifier stripid1	;
+	    if ( m_hasRows ) {	  
+	   
+	    	stripid = strip_id (	   exp_id[m_STATION_INDEX],
+                                           exp_id[m_LAYER_INDEX], 
+                                           exp_id[m_PHI_MODULE_INDEX],
+                                           exp_id[m_ETA_MODULE_INDEX],
+                                           exp_id[m_SIDE_INDEX],
+					   exp_id[m_ROW_INDEX],					   
+                                           exp_id[m_STRIP_INDEX]);
+
+   		stripid1 = strip_id (	   station(stripid),
+		    			   layer(stripid),
+					   phi_module(stripid),
+					   eta_module(stripid),
+					   side(stripid),
+					   row(stripid),
+					   strip(stripid));
+
+	    }
+	    
+	    else {
+	    
+            	stripid = strip_id (       exp_id[m_STATION_INDEX],
+		    			   exp_id[m_LAYER_INDEX],
+					   exp_id[m_PHI_MODULE_INDEX],
+					   exp_id[m_ETA_MODULE_INDEX],
+					   exp_id[m_SIDE_INDEX],
+					   exp_id[m_STRIP_INDEX]);
+
+
+	   	stripid1 = strip_id (	    station(stripid),
+                                            layer(stripid),
+                                            phi_module(stripid),
+                                            eta_module(stripid),
+                                            side(stripid),
+                                            strip(stripid));
+
+	    }
+
+
+            if (stripid != stripid1) {
+                log << MSG::ERROR << "FaserSCT_ID::test_wafer_packing: new and old pixel ids not equal. New/old ids "
+                    << " " << show_to_string(stripid1) << " " 
+                    << show_to_string(stripid) << endmsg;
+            }
+        }
+
+
+
+        if (m_msgSvc) {
+            log << MSG::DEBUG << "FaserSCT_ID::test_wafer_packing: Successful tested " 
+                << nids << " ids. " 
+                << endmsg;
+        }
+        else {
+            std::cout << " DEBUG FaserSCT_ID::test_wafer_packing: Successful tested " 
+                      << nids << " ids. " 
+                      << std::endl;
+        }
+    }
+    else {
+        log << MSG::ERROR << "FaserSCT_ID::test_wafer_packing: Unable to test wafer is packing - no dictionary has been defined. " 
+            << endmsg;
+    }
+}
+
diff --git a/Tracker/TrackerDetDescr/TrackerIdentifier/test/test_tracker_id.cxx b/Tracker/TrackerDetDescr/TrackerIdentifier/test/test_tracker_id.cxx
new file mode 100644
index 000000000..f2ece9c3f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdentifier/test/test_tracker_id.cxx
@@ -0,0 +1,935 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// $Header: /build/atlas/cvs/atlas/offline/InnerDetector/InDetDetDescr/InDetIdentifier/test/test_indet_id.cxx,v 1.11.2.1 2009-03-26 21:54:32 jtseng Exp $ 
+  
+#include "IdDictParser/IdDictParser.h"  
+#include "Identifier/Range.h" 
+#include "Identifier/IdentifierHash.h" 
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "GaudiKernel/System.h" 
+#include <iostream> 
+ 
+typedef Identifier::size_type  size_type ;
+
+// static void tab (size_t level) 
+// { 
+//     for (size_t i = 0; i < level; ++i) std::cout << " "; 
+// } 
+ 
+//  static ExpandedIdentifier
+//  pixel_id ( int barrel_ec,  
+//  	   int layer_disk, 
+//  	   int phi_module, 
+//  	   int eta_module,      
+//  	   int phi_index,
+//  	   int eta_index) 
+//  {
+//      // Build identifier
+//      ExpandedIdentifier result;
+//      result << 1 << barrel_ec << layer_disk << phi_module << eta_module;
+//      result << phi_index << eta_index;
+
+//      assert (result.last_error () == ExpandedIdentifier::none);
+
+//      return result;
+//}
+
+static void
+check_sct_timing(IdDictMgr& idd)
+{
+    
+    std::cout << "=========>  Begin  check_sct_timing " << std::endl;
+    std::cout << "=========>  Begin  check_sct_timing " << std::endl;
+
+    // Check the timing for sct 
+
+    FaserSCT_ID sct_id;
+
+    longlong startOfUserTime    = System::userTime( System::microSec );
+    longlong startOfKernelTime  = System::kernelTime   ( System::microSec );
+    longlong startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    if(sct_id.initialize_from_dictionary (idd)) {
+	std::cout << "check_lar_neighbour_timing - cannot init from dict" << std::endl;
+    }
+
+    std::cout << "Timing for init from dictionary " << std::endl;
+    
+    /// following lines could be platform dependent!
+    longlong deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    longlong deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    longlong deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "tries, user, kernel, elapsed " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << std::endl;
+
+
+    /// Loop over all channel hashes
+    size_type hash_max = sct_id.wafer_hash_max ();
+
+    std::cout << "Number of channels " <<  hash_max
+	      << std::endl;
+
+    int nloops = 10000;
+    float num  = hash_max*nloops;
+    Identifier::value_type n = 0;
+
+
+    /// Empty loop
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    n += i;
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Empty loop " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    float user    = (float)deltaUser/num;
+    float kernel  = (float)deltaKernel/num;
+    float elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    /// Wafer Identifier access
+
+    /// Store in object the measured times
+    Identifier wafer_id;
+    IdContext channelContext = sct_id.wafer_context();
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+//    const std::vector<Identifier>*       em_vec = sct_id.em_vec();
+//    std::vector<Identifier>::const_iterator       em_vec_begin = sct_id.em_vec()->begin();
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    n += sct_id.wafer_id(i).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    /// Identifier and barrel_ec field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.station(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and access barrel_ec field " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    /// Identifier and layer_disk field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+//		sct_id.get_id(i, wafer_id, &channelContext);
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.layer(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and access layer_disk field " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+
+    /// Identifier and phi_module field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+//		sct_id.get_id(i, wafer_id, &channelContext);
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.phi_module(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and access phi_module field " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    /// Identifier and eta_module field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.eta_module(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and access eta_module field " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    /// Identifier and side field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.side(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and access side field " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    nloops = 1000;
+    num  = hash_max*nloops;
+
+    /// Identifier access and hash access again
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+//		sct_id.get_id(i, wafer_id, &channelContext);
+	    wafer_id = sct_id.wafer_id(i);
+	    n += sct_id.wafer_hash(wafer_id);
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID from hash and get hash back again " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+
+    nloops = 3000;
+    num    = hash_max*nloops;
+
+    /// Identifier and wafer fields access
+
+    /// Store in object the measured times
+    int barrel_ec;
+    int layer_disk;
+    int phi_module;
+    int eta_module;
+    int side;
+    
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+	    wafer_id   = sct_id.wafer_id(i);
+	    barrel_ec  = sct_id.station(wafer_id);
+	    layer_disk = sct_id.layer(wafer_id);
+	    phi_module = sct_id.phi_module(wafer_id);
+	    eta_module = sct_id.eta_module(wafer_id);
+	    side       = sct_id.side(wafer_id);
+	    n         += barrel_ec + layer_disk + eta_module + phi_module + side;
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID and wafer fields " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+    nloops = 1000;
+    num    = hash_max*nloops;
+
+
+    /// Identifier and wafer fields access and wafer ID again
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<hash_max; ++i) {
+	    ++n;
+//		sct_id.get_id(i, wafer_id, &channelContext);
+	    wafer_id = sct_id.wafer_id(i);
+	    barrel_ec  = sct_id.station(wafer_id);
+	    layer_disk = sct_id.layer(wafer_id);
+	    phi_module = sct_id.phi_module(wafer_id);
+	    eta_module = sct_id.eta_module(wafer_id);
+	    side       = sct_id.side(wafer_id);
+	    n         += barrel_ec + layer_disk + eta_module + phi_module + side +
+              sct_id.wafer_id(barrel_ec, layer_disk, phi_module, eta_module, side).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get ID and wafer fields and wafer ID again " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    nloops = 100000;
+
+    // Save sct ids
+
+    unsigned int nstripids = 20000;
+    num     = nstripids*nloops;
+    Identifier stripid;
+    std::vector<Identifier> stripids(nstripids);
+
+    FaserSCT_ID::const_expanded_id_iterator	first_sct = sct_id.strip_begin();  
+    FaserSCT_ID::const_expanded_id_iterator	last_sct  = sct_id.strip_end();
+    unsigned int nids = 0;
+    for (; first_sct != last_sct && nids < nstripids; ++first_sct, ++nids) {
+	const ExpandedIdentifier& exp_id = *first_sct;
+	stripids[nids] =  sct_id.strip_id (exp_id[2],
+					   exp_id[3], 
+					   exp_id[4],
+					   exp_id[5],
+					   exp_id[6],
+					   exp_id[7]);
+    }
+
+    /// sct Identifier access - empty loop
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+//    const std::vector<Identifier>*       em_vec = sct_id.em_vec();
+//    std::vector<Identifier>::const_iterator       em_vec_begin = sct_id.em_vec()->begin();
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    n += i;
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct ID empty loop " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+
+    nloops = 10000;
+    num    = nstripids*nloops;
+
+    /// Get sct id
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+//    const std::vector<Identifier>*       em_vec = sct_id.em_vec();
+//    std::vector<Identifier>::const_iterator       em_vec_begin = sct_id.em_vec()->begin();
+
+    n = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    n += stripid.get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct ID from vector " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+
+    nloops = 1000;
+    num    = nstripids*nloops;
+
+    int strip;
+    
+    /// sct Identifier field access
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    nids = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    barrel_ec  = sct_id.station(stripid);
+	    layer_disk = sct_id.layer(stripid);
+	    phi_module = sct_id.phi_module(stripid);
+	    eta_module = sct_id.eta_module(stripid);
+	    side       = sct_id.side(stripid);
+	    strip      = sct_id.strip(stripid);
+	    n         += barrel_ec + layer_disk + eta_module + phi_module + 
+              side + strip + stripid.get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct ID fields " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    nloops = 300;
+    num    = nstripids*nloops;
+
+    /// sct Identifier field access and id back
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    nids = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    barrel_ec  = sct_id.station(stripid);
+	    layer_disk = sct_id.layer(stripid);
+	    phi_module = sct_id.phi_module(stripid);
+	    eta_module = sct_id.eta_module(stripid);
+	    side       = sct_id.side(stripid);
+	    strip      = sct_id.strip(stripid);
+	    n         += barrel_ec + layer_disk + eta_module + phi_module + 
+              side + strip + stripid .get_compact()+ 
+              sct_id.strip_id(barrel_ec, 
+                              layer_disk,
+                              phi_module,
+                              eta_module,
+                              side,
+                              strip).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct ID fields and sct id back " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+
+    /// sct Identifier get wafer id
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    nids = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    n         +=  stripid.get_compact() + sct_id.wafer_id(stripid).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct ID then wafer id " << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+
+    /// sct Identifier get wafer id and eta/phi index
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    nids = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    strip      = sct_id.strip(stripid);
+	    n         += strip + stripid.get_compact() +
+              sct_id.wafer_id(stripid).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct, wafer id and and eta/phi index" << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+    
+
+    /// sct Identifier get wafer id and eta/phi index and strip id again
+
+    /// Store in object the measured times
+    startOfUserTime    = System::userTime( System::microSec );
+    startOfKernelTime  = System::kernelTime   ( System::microSec );
+    startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+    n = 0;
+    nids = 0;
+    for (int j = 0; j < nloops; ++j) {
+	for (size_type i=0; i<nstripids; ++i) {
+	    ++n;
+	    stripid = stripids[i];
+	    strip      = sct_id.strip(stripid);
+	    wafer_id   = sct_id.wafer_id(stripid);
+	    n         += strip + stripid.get_compact() + wafer_id.get_compact() +
+              sct_id.strip_id(wafer_id, strip).get_compact();
+	}
+    }
+
+    /// following lines could be platform dependent!
+    deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "Get sct, wafer id and and eta/phi index and stripid again" << std::endl;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << n << " " 
+	      << std::endl;
+    user    = (float)deltaUser/num;
+    kernel  = (float)deltaKernel/num;
+    elapsed = (float)deltaElapsed/num;
+    std::cout << "tries, user, kernel, elapsed " 
+	      << num << " " 
+	      << user << " " 
+	      << kernel << " "
+	      << elapsed << " " 
+	      << std::endl;
+    
+
+}
+
+static void
+check_sct_decoding(IdDictMgr& idd)
+{
+    
+    std::cout << "=========>  check_sct_decoding" << std::endl;
+    std::cout << "=========>  check_sct_decoding" << std::endl;
+
+    FaserSCT_ID sct_id;
+
+    if(sct_id.initialize_from_dictionary (idd)) {
+	std::cout << "check_sct_decoding - cannot init from dict" << std::endl;
+    }
+
+    sct_id.set_do_checks(true);
+
+    sct_id.test_wafer_packing	();
+
+}
+
+int main (int argc, char* argv[])  
+{  
+    if (argc < 2) return (1);  
+  
+
+    longlong startOfUserTime    = System::userTime( System::microSec );
+    longlong startOfKernelTime  = System::kernelTime   ( System::microSec );
+    longlong startOfElapsedTime = System::ellapsedTime ( System::microSec );
+
+
+
+    IdDictParser parser;  
+
+    
+//    parser.register_external_entity("InnerDetector", "InDetIdDictFiles/IdDictInnerDetector_IBL-01.xml");
+//    parser.register_external_entity("LArCalorimeter", "IdDictLArCalorimeter_H8_2004.xml");
+//    parser.register_external_entity("InnerDetector", "IdDictInnerDetector_slhc.xml");
+//    parser.register_external_entity("InnerDetector", "IdDictInnerDetector_Cosmic.xml");
+//    parser.register_external_entity("InnerDetector", "IdDictInnerDetector_CTB2004.xml");
+
+    IdDictMgr& idd = parser.parse (argv[1]);  
+//    IdDictMgr& idd = parser.parse (argv[1], "initial_layout");  
+
+
+    std::cout << "Timing for parsing dictionaries " << std::endl;
+    
+    /// following lines could be platform dependent!
+    longlong deltaUser    = System::userTime    ( System::microSec ) - startOfUserTime   ;
+    ///
+    longlong deltaKernel  = System::kernelTime  ( System::microSec ) - startOfKernelTime ;
+    ///
+    longlong deltaElapsed = System::ellapsedTime( System::microSec ) - startOfElapsedTime ;
+
+    std::cout << "tries, user, kernel, elapsed " 
+	      << deltaUser << " " 
+	      << deltaKernel << " "
+	      << deltaElapsed << " " 
+	      << std::endl;
+
+
+
+
+    std::cout << "got dict mgr " << std::endl;
+//      std::cout << "regenerate for tag = initial_layout " << std::endl;
+//      idd.generate_implementation ("initial_layout");  
+
+
+    check_sct_decoding(idd);
+    check_sct_timing(idd);
+
+    return 0;  
+}  
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/CMakeLists.txt b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/CMakeLists.txt
new file mode 100644
index 000000000..13dbf391a
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/CMakeLists.txt
@@ -0,0 +1,44 @@
+################################################################################
+# Package: TrackerReadoutGeometry
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrackerReadoutGeometry )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaBaseComps
+                          Control/AthenaKernel
+                          Control/CxxUtils
+                          Control/StoreGate
+                          DetectorDescription/FaserDetDescr
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          DetectorDescription/GeoModel/GeoModelFaserUtilities
+                          DetectorDescription/GeoPrimitives
+                          DetectorDescription/Identifier
+                          GaudiKernel
+                          InnerDetector/InDetConditions/InDetCondTools
+                          Tracker/TrackerDetDescr/TrackerIdentifier
+                          Tracking/TrkDetDescr/TrkDetElementBase
+                          Tracking/TrkDetDescr/TrkSurfaces
+                          Tracking/TrkEvent/TrkEventPrimitives
+                          DetectorDescription/DetDescrCond/DetDescrConditions
+                          PRIVATE
+                          Database/AthenaPOOL/AthenaPoolUtilities
+                          DetectorDescription/IdDictDetDescr
+                        )
+
+# External dependencies:
+find_package( CLHEP )
+find_package( Eigen )
+find_package( GeoModel )
+
+# Component(s) in the package:
+atlas_add_library( TrackerReadoutGeometry
+                   src/*.cxx
+                   PUBLIC_HEADERS TrackerReadoutGeometry
+                   INCLUDE_DIRS ${CLHEP_INCLUDE_DIRS} ${EIGEN_INCLUDE_DIRS}
+                   DEFINITIONS ${CLHEP_DEFINITIONS}
+                   LINK_LIBRARIES ${CLHEP_LIBRARIES} ${EIGEN_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel CxxUtils FaserDetDescr GeoModelUtilities GeoModelFaserUtilities GeoPrimitives Identifier GaudiKernel TrackerIdentifier TrkDetElementBase TrkSurfaces TrkEventPrimitives StoreGateLib SGtests AthenaBaseComps DetDescrConditions
+                   PRIVATE_LINK_LIBRARIES AthenaPoolUtilities IdDictDetDescr )
+
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ATLAS_CHECK_THREAD_SAFETY b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ATLAS_CHECK_THREAD_SAFETY
new file mode 100644
index 000000000..e7b2f6455
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ATLAS_CHECK_THREAD_SAFETY
@@ -0,0 +1 @@
+InnerDetector/InDetDetDescr/InDetReadoutGeometry
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ExtendedAlignableTransform.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ExtendedAlignableTransform.h
new file mode 100755
index 000000000..c6f73b51e
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/ExtendedAlignableTransform.h
@@ -0,0 +1,57 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// ExtendedAlignableTransform.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
+#define TRACKERREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+
+namespace TrackerDD {
+
+    /** @class ExtendedAlignableTransform 
+    
+    Class to hold alignable transform plus a pointer to the child volume and
+    optionally a frame volume.
+
+    @author: Grant Gorfine
+    - modified & maintained: Nick Styles & Andreas Salzburger 
+    */
+    
+    class ExtendedAlignableTransform
+    {
+    
+    public:
+    
+      ExtendedAlignableTransform(GeoAlignableTransform * alignableTransform, 
+    			     const GeoVFullPhysVol * child,
+    			     const GeoVFullPhysVol * frame = 0)
+        : m_alignableTransform(alignableTransform),
+          m_child(child),
+          m_frame(frame)
+      {};
+    
+      GeoAlignableTransform * alignableTransform() {return m_alignableTransform;}
+      const GeoVFullPhysVol * child()  {return m_child;}
+      const GeoVFullPhysVol * frame()  {return m_frame;}
+    
+    private:
+      
+      GeoAlignableTransform * m_alignableTransform;
+      const GeoVFullPhysVol * m_child;
+      const GeoVFullPhysVol * m_frame;
+    
+    };
+
+
+} // end namespace 
+
+#endif // TRACKERREADOUTGEOMETRY_EXTENDEDALIGNABLETRANSFORM_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h
new file mode 100755
index 000000000..ba35ab2bf
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h
@@ -0,0 +1,224 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_BarrelModuleSideDesign.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SCT_BARRELMODULESIDEDESIGN_H
+#define TRACKERREADOUTGEOMETRY_SCT_BARRELMODULESIDEDESIGN_H
+
+// Base class
+#include "TrackerReadoutGeometry/SCT_ModuleSideDesign.h"
+
+namespace Trk{
+ class RectangleBounds;
+ class SurfaceBounds;
+}
+
+namespace TrackerDD {
+
+  class SiDiodesParameters;
+
+   /** @class SCT_BarrelModuleSideDesign
+
+      Barrel module design description for the SCT.
+
+      @author Szymon Gadomski, Alessandro Fornaini
+      - modified: Grant Gorfine, Andreas Salzburger
+   */
+
+  class SCT_BarrelModuleSideDesign : public SCT_ModuleSideDesign {
+
+  ///////////////////////////////////////////////////////////////////
+  // Public methods:
+  ///////////////////////////////////////////////////////////////////
+    public:
+
+      /** Copy constructor:*/
+      SCT_BarrelModuleSideDesign(const SCT_BarrelModuleSideDesign &design);
+
+      /** Constructor with parameters:
+          strip pitch, 80 um in barrel SCT
+          strip length
+          geom position on G4 volume, care needed
+          geom position on G4 volume, care needed
+          includes detector edge and gap between decetors*/
+      SCT_BarrelModuleSideDesign(const double thickness,
+                             const int crystals,
+			     const int diodes,
+			     const int cells,
+			     const int shift,
+			     const bool swapStripReadout,
+			     TrackerDD::CarrierType carrierType,
+			     const double stripPitch,
+			     const double stripLength,
+			     const double xEtaStripPatternCentre,
+			     const double xPhiStripPatternCentre,
+			     const double totalDeadLength,
+			     int readoutSide = -1);
+
+      /** Destructor: */
+      virtual ~SCT_BarrelModuleSideDesign();
+
+      /** Assignment operator: */
+      SCT_BarrelModuleSideDesign &operator=(const SCT_BarrelModuleSideDesign &design);
+
+      ///////////////////////////////////////////////////////////////////
+      // Const methods:
+      ///////////////////////////////////////////////////////////////////
+
+      /** strip pitch */
+      virtual double stripPitch() const;
+
+      /** strip length */
+      double stripLength() const;
+
+      /** centre of the strip pattern in eta */
+      double etaStripPatternCentre() const;
+
+      /** centre of the strip pattern in phi*/
+      double phiStripPatternCentre() const;
+
+     /** Returns distance to nearest detector active edge 
+         +ve = inside
+         -ve = outside */
+      virtual void distanceToDetectorEdge(const SiLocalPosition & localPosition, double & etaDist, double & phiDist) const;
+
+      /** Test if near bond gap within tolerances */
+      virtual bool nearBondGap(const SiLocalPosition & localPosition, double etaTol) const;
+
+      /** check if the position is in active area */
+      virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap = true) const;
+
+      /** distance to the nearest diode in units of pitch, from 0.0 to 0.5, 
+          this method should be fast as it is called for every surface charge
+          in the SCT_SurfaceChargesGenerator
+           an active area check, done in the Generator anyway, is removed here*/
+      virtual double scaledDistanceToNearestDiode(const SiLocalPosition &chargePos) const;
+  
+      /** give the strip pitch (dependence on position needed for forward)  */
+      virtual double stripPitch(const SiLocalPosition & chargePos) const;
+
+      /** readout or diode id -> position, size */
+      virtual SiDiodesParameters parameters(const SiCellId & cellId) const;
+      virtual SiLocalPosition localPositionOfCell(const SiCellId & cellId) const;
+      virtual SiLocalPosition localPositionOfCluster(const SiCellId & cellId, int clusterSize) const;
+
+      /** position -> id */
+      virtual SiCellId cellIdOfPosition(const SiLocalPosition & localPos) const;
+    
+      /** this method returns the ends of the strip */
+      virtual std::pair<SiLocalPosition,SiLocalPosition> endsOfStrip(const SiLocalPosition &position) const;
+
+      /** method for stereo angle computation - returns a vector parallel to the strip being hit */
+      virtual HepGeom::Vector3D<double> phiMeasureSegment(const SiLocalPosition & ) const;
+
+      /** Method to calculate length of a module*/
+      virtual double length() const;
+
+      /** Method to calculate average width of a module */
+      virtual double width() const;
+
+      /** Method to calculate minimum width of a module */
+      virtual double minWidth() const;
+
+      /** Method to calculate maximum width of a module */
+      virtual double maxWidth() const;
+
+      /** give length of dead area */
+      virtual double deadAreaLength() const;
+
+      /** give upper boundary of dead area */
+      virtual double deadAreaUpperBoundary() const;
+
+      /** give lower boundary of dead area */
+      virtual double deadAreaLowerBoundary() const;
+  
+      /** Pitch in phi direction */
+      virtual double phiPitch() const;
+
+      /* Pitch in phi direction */
+      virtual double phiPitch(const SiLocalPosition & localPosition) const;
+
+      /** Pitch in eta direction */
+      virtual double etaPitch() const;
+
+      /** Return the surface bounds */
+      virtual const Trk::SurfaceBounds & bounds() const; 
+
+  private:
+
+      SCT_BarrelModuleSideDesign();
+
+      ///////////////////////////////////////////////////////////////////
+      // Private data:
+      ///////////////////////////////////////////////////////////////////
+
+  private:
+      double m_stripPitch; //!< strip pitch, 80 um in barrel SCT
+      double m_stripLength; //!< strip length
+      double m_xEtaStripPatternCentre; //!< geom position on G4 volume, care needed
+      double m_xPhiStripPatternCentre; //!< geom position on G4 volume, care needed
+      double m_totalDeadLength; //!< includes detector edge and gap between decetors
+      double m_xPhiAbsSize; //!< size in xPhi/2 for active area
+      double m_xEtaAbsSizeLow, m_xEtaAbsSizeHigh; //!< active area in xEta
+      Trk::RectangleBounds * m_bounds; //!< surface bound description
+  };
+
+  ///////////////////////////////////////////////////////////////////
+  // Inline methods:
+  ///////////////////////////////////////////////////////////////////
+  inline double SCT_BarrelModuleSideDesign::stripPitch() const
+  {
+    return m_stripPitch;
+  }
+
+  // this method is non trivial in forward, but in barrel it can
+  // be an inline function
+  inline double SCT_BarrelModuleSideDesign::stripPitch(const SiLocalPosition &) const
+  {
+    return m_stripPitch;
+  }
+
+
+  inline double SCT_BarrelModuleSideDesign::stripLength() const
+  {
+    return m_stripLength;
+  }
+
+  inline double SCT_BarrelModuleSideDesign::etaStripPatternCentre() const
+  {
+    return m_xEtaStripPatternCentre;
+  }
+
+  inline double SCT_BarrelModuleSideDesign::phiStripPatternCentre() const
+  {
+    return  m_xPhiStripPatternCentre;
+  }
+
+  // Same as stripPitch
+  inline double SCT_BarrelModuleSideDesign::phiPitch(const SiLocalPosition &) const
+  {
+    return m_stripPitch;
+  }
+
+  // Same as stripPitch
+  inline double SCT_BarrelModuleSideDesign::phiPitch() const
+  {
+    return m_stripPitch;
+  }
+
+  // Same as active length
+  inline double SCT_BarrelModuleSideDesign::etaPitch() const
+  {
+    return length();
+  }
+
+} // namespace TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_SCT_BARRELMODULESIDEDESIGN_H
+
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_DetectorManager.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_DetectorManager.h
new file mode 100755
index 000000000..27058fe74
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_DetectorManager.h
@@ -0,0 +1,166 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_DetectorManager.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SCT_DETECTORMANAGER_H
+#define TRACKERREADOUTGEOMETRY_SCT_DETECTORMANAGER_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+
+#include "GeoModelKernel/GeoVPhysVol.h"
+
+#include "TrackerReadoutGeometry/SiDetectorManager.h"
+#include "TrackerReadoutGeometry/SiDetectorElementCollection.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+
+#include "TrackerIdentifier/FaserSCT_ID.h"
+  
+class StoreGateSvc;
+class Identifier; 
+class IdentifierHash;
+class GeoAlignableTransform;
+class GeoVFullPhysVol;
+class GeoVPhysVol;
+class GeoVAlignmentStore;
+class CondAttrListCollection;
+
+namespace TrackerDD {
+
+  class SiDetectorElement;
+  class ExtendedAlignableTransform;
+  class SCT_ModuleSideDesign;
+
+  /** @class SCT_DetectorManager
+  
+      Dedicated detector manager extending the functionality of the SiDetectorManager
+      with dedicated SCT information, access.
+      
+      @author: Grant Gorfine
+      - modified and maintained by Nick Styles & Andreas Salzburger
+      */
+      
+  class SCT_DetectorManager : public SiDetectorManager  {
+
+    public:
+    
+      // Constructor
+      SCT_DetectorManager( StoreGateSvc* detStore );
+     
+      // Destructor
+      virtual ~SCT_DetectorManager();
+     
+      /** Access Raw Geometry */
+      virtual unsigned int getNumTreeTops()           const override;
+      virtual PVConstLink  getTreeTop(unsigned int i) const override;
+      /** Add tree top */
+      void addTreeTop(PVLink); 
+    
+    
+      //
+      // Access Readout Elements
+      //
+    
+      /** access to individual elements via Identifier */
+      virtual SiDetectorElement * getDetectorElement(const Identifier &id) const override;
+
+      /** access to individual elements via IdentifierHash */
+      virtual SiDetectorElement * getDetectorElement(const IdentifierHash &idHash) const override;
+      
+      /** access to individual elements via module numbering schema */
+      SiDetectorElement * getDetectorElement(int barrel_endcap, int layer_wheel, int phi_module, int eta_module, int side) const;
+    
+      /** access to whole collectiom via iterators */
+      virtual const SiDetectorElementCollection * getDetectorElementCollection() const override;
+      virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const override;
+      virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd() const override;
+    
+      /** Add elememts during construction */
+      virtual void addDetectorElement(SiDetectorElement * element) override;
+    
+      /** Add alignable transforms. No access to these, they will be changed by manager: */
+      virtual void addAlignableTransform (int level,
+    				                      const Identifier &id, 
+    				                      GeoAlignableTransform *xf,
+    				                      const GeoVFullPhysVol * child);
+      
+      /**  As above but does a dynamic_cast to GeoVFullPhysVol */
+      virtual void addAlignableTransform (int level,
+    				                      const Identifier &id, 
+    				                      GeoAlignableTransform *xf,
+    				                      const GeoVPhysVol * child); 
+    
+      // DEPRECATED
+      virtual void addAlignableTransform (int, const Identifier &, GeoAlignableTransform *) override {}; // For backward compatibility
+    
+      /** Initialize the neighbours. This can only be done when all elements are built. */
+      virtual void initNeighbours() override;
+        
+      /** Check identifier is for this detector */
+      virtual bool identifierBelongs(const Identifier & id) const override;
+    
+      /** Access to module design, casts to SCT_ModuleSideDesign */
+      const SCT_ModuleSideDesign * getSCT_Design(int i) const;
+
+      /** Process new global DB folders for L1 and L2 **/
+      virtual
+      bool processGlobalAlignment(const std::string &, int level, FrameType frame,
+                                  const CondAttrListCollection* obj,
+                                  GeoVAlignmentStore* alignStore) const override;
+
+      // comply with InDetDetectorManager interface
+      bool processSpecialAlignment(const std::string & key,
+                                   TrackerDD::AlignFolderType alignfolder) const override;
+
+      bool processSpecialAlignment(const std::string& key,
+                                   const CondAttrListCollection* obj=nullptr,
+                                   GeoVAlignmentStore* alignStore=nullptr) const override;
+
+
+    private:
+      /** implements the main alignment update for delta transforms in different frames,
+          it translates into the LocalDelta or GlobalDelta function of SiDetectorManager
+      */
+      virtual bool setAlignableTransformDelta(int level, 
+                                              const Identifier & id, 
+                                              const Amg::Transform3D & delta,
+                                              FrameType frame,
+                                              GeoVAlignmentStore* alignStore) const override;
+      
+      /** Prevent copy and assignment */
+      const SCT_DetectorManager & operator=(const SCT_DetectorManager &right);
+      SCT_DetectorManager(const SCT_DetectorManager &right); 
+    
+      virtual const FaserSCT_ID  * getIdHelper() const override;
+       
+      // Private member data
+      std::vector<PVLink>                                           m_volume;  
+      SiDetectorElementCollection                                   m_elementCollection;
+      typedef std::map<Identifier, ExtendedAlignableTransform *>    AlignableTransformMap;
+      std::vector< AlignableTransformMap >                          m_higherAlignableTransforms;
+      std::vector< ExtendedAlignableTransform *>                    m_alignableTransforms; 
+      std::vector< ExtendedAlignableTransform *>                    m_moduleAlignableTransforms; 
+      const FaserSCT_ID*                                                 m_idHelper;
+      
+      /** This variable switches the how the local alignment corrections are applied
+          If true they will be calcualted on top  of all of other corrections but in the default reference frame
+          If false they will be calcualted  on top  of all of other corrections but in the globally aligned reference frame    
+      */
+      bool                                                          m_isLogical;      
+      
+      
+    };
+
+} // namespace TrackerDD
+
+#ifndef GAUDI_NEUTRAL
+#include "AthenaKernel/CLASS_DEF.h" 
+CLASS_DEF(TrackerDD::SCT_DetectorManager, 56285158, 1) 
+#endif
+
+#endif // TRACKERREADOUTGEOMETRY_SCT_DETECTORMANAGER_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ModuleSideDesign.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ModuleSideDesign.h
new file mode 100755
index 000000000..7fa3eaf9f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ModuleSideDesign.h
@@ -0,0 +1,259 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_ModuleSideDesign.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+
+#ifndef TRACKERREADOUTGEOMETRY_SCT_MODULESIDEDESIGN_H
+#define TRACKERREADOUTGEOMETRY_SCT_MODULESIDEDESIGN_H
+
+// Base class
+#include "TrackerReadoutGeometry/SiDetectorDesign.h"
+
+// Data member class
+#include "TrackerReadoutGeometry/SCT_ReadoutScheme.h"
+
+// Other includes
+#include "TrackerIdentifier/FaserSCT_ID.h"
+
+namespace TrackerDD {
+/** @class SCT_ModuleSideDesign
+
+   Base class for the SCT module side design,
+   extended by the Forward and Barrel module design
+
+    @author Alessandro Fornaini, Grant Gorfine
+ */
+
+class SCT_ModuleSideDesign: public SiDetectorDesign {
+public:
+    /** Constructor with parameters:
+       local axis corresponding to eta direction
+       local axis corresponding to phi direction
+       local axis corresponding to depth direction
+       thickness of silicon sensor
+       number of crystals within module side
+       number of diodes within crystal
+       number of cells within module side
+       index of diode connected to cell with index 0 */
+    SCT_ModuleSideDesign(const double thickness,
+                         const bool phiSymmetric,
+                         const bool etaSymmetric,
+                         const bool depthSymmetric,
+                         const int crystals,
+                         const int diodes,
+                         const int cells,
+                         const int shift,
+                         const bool swapStripReadout,
+                         TrackerDD::CarrierType carrierType,
+                         int readoutSide);
+
+    /** Constructor with parameters with access to enum Axis:
+       local axis corresponding to eta direction
+       local axis corresponding to phi direction
+       local axis corresponding to depth direction
+       thickness of silicon sensor
+       number of crystals within module side
+       number of diodes within crystal
+       number of cells within module side
+       index of diode connected to cell with index 0 */
+    SCT_ModuleSideDesign(const double thickness,
+                         const bool phiSymmetric,
+                         const bool etaSymmetric,
+                         const bool depthSymmetric,
+                         const int crystals,
+                         const int diodes,
+                         const int cells,
+                         const int shift,
+                         const bool swapStripReadout,
+                         TrackerDD::CarrierType carrierType,
+                         int readoutSide,
+                         const SiDetectorDesign::Axis stripDirection,
+                         const SiDetectorDesign::Axis thicknessDirection);
+
+    /** Destructor: */
+    virtual ~SCT_ModuleSideDesign() = default;
+
+    /** readout id -> id of connected diodes
+        Not particularly useful for the SCT but implemented to keep a uniform interface.
+           */
+    virtual int numberOfConnectedCells(const SiReadoutCellId &readoutId) const;
+    virtual SiCellId connectedCell(const SiReadoutCellId &readoutId, int number) const;
+
+    /** If cell is ganged return the other cell, otherwise return an invalid id.
+        Not particularly useful for the SCT but implemented to keep a uniform interface.
+        For SCT always returns an invalid id. */
+    virtual SiCellId gangedCell(const SiCellId &cellId) const;
+
+    /** diode id -> readout id */
+    virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const;
+
+    /** position -> id */
+    virtual SiReadoutCellId readoutIdOfPosition(const SiLocalPosition &localPos) const;
+
+    /** id -> position */
+    virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const = 0;
+    virtual SiLocalPosition localPositionOfCluster(const SiCellId &cellId,
+                                                   int cluserSize) const = 0;
+
+    /** Check if cell is in range. Returns the original cellId if it is in range,
+      otherwise it returns an invalid id. */
+    virtual SiCellId cellIdInRange(const SiCellId &cellId) const;
+
+    /** Get the neighbouring diodes of a given diode:
+        Cell for which the neighbours must be found
+         List of cells which are neighbours of the given one */
+    virtual void neighboursOfCell(const SiCellId &cellId,
+                                  std::vector<SiCellId> &neighbours) const;
+
+    /** check if the position is in active area */
+    virtual bool inActiveArea(const SiLocalPosition &chargePos, bool checkBondGap =
+                                  true) const = 0;
+
+    /** give distance to the nearest diode in units of pitch, from 0.0 to 0.5,
+       this method should be fast as it is called for every surface charge
+       in the SCT_SurfaceChargesGenerator */
+    virtual double scaledDistanceToNearestDiode(const SiLocalPosition &chargePos) const =
+        0;
+
+    /** give the strip pitch (dependence on position needed for forward)  */
+    virtual double stripPitch(const SiLocalPosition &chargePos) const = 0;
+
+    /** give the strip pitch (For Forward returns pitch at center) */
+    virtual double stripPitch() const = 0;
+
+    /** give the ends of strips */
+    virtual std::pair<SiLocalPosition, SiLocalPosition>
+    endsOfStrip(const SiLocalPosition &position) const = 0;
+
+    /** gives position of strip center
+       ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or
+       rawLocalPositionOfCell method in SiDetectorElement.
+       DEPRECATED */
+    virtual SiLocalPosition positionFromStrip(const int stripNumber) const;
+
+    /** give length of dead area */
+    virtual double deadAreaLength() const = 0;
+
+    /** give upper boundary of dead area */
+    virtual double deadAreaUpperBoundary() const = 0;
+
+    /** give lower boundary of dead area */
+    virtual double deadAreaLowerBoundary() const = 0;
+
+    /** number of crystals within module side: */
+    int crystals() const;
+
+    /** number of strips within crystal: */
+    int diodes() const;
+    virtual int diodesInRow(const int row) const; // Introduced for upgrade sensors which have several rows
+
+    /** number of readout stips within module side: */
+    int cells() const;
+
+    /** number of edge strips before first readout strip. */
+    int shift() const;
+
+    /** Return true if hit local direction is the same as readout direction. */
+    virtual bool swapHitPhiReadoutDirection() const;
+    virtual bool swapHitEtaReadoutDirection() const;
+
+    virtual int row(int stripId1Dim) const;    // For SCT, is 0; otherwise takes a 1-dim strip ID and returns its row
+    virtual int strip(int stripId1Dim) const;  // For SCT, returns stripId1Dim; otherwise returns strip within row.
+    virtual int strip1Dim(int strip, int row) const;   // For SCT, returns strip. Else inverse of above two.
+private:
+    SCT_ModuleSideDesign();
+
+    // Copy constructor:
+    SCT_ModuleSideDesign(const SCT_ModuleSideDesign &design);
+
+    // Assignment operator:
+    SCT_ModuleSideDesign &operator = (const SCT_ModuleSideDesign &design);
+
+protected:
+    SCT_ReadoutScheme m_scheme; // !< connection between diodes and readout cells
+
+    ///////////////////////////////////////////////////////////////////
+    // Private data:
+    ///////////////////////////////////////////////////////////////////
+private:
+    bool m_swapStripReadout;    // !< Flag to indicate if readout direction is opposite
+                                // !< to hit local phi direction
+};
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline int SCT_ModuleSideDesign::crystals() const {
+    return m_scheme.crystals();
+}
+
+inline int SCT_ModuleSideDesign::diodes() const {
+    return m_scheme.diodes();
+}
+
+inline int SCT_ModuleSideDesign::diodesInRow(const int /* row */) const {
+    return m_scheme.diodes();
+}
+
+inline int SCT_ModuleSideDesign::cells() const {
+    return m_scheme.cells();
+}
+
+inline int SCT_ModuleSideDesign::shift() const {
+    return m_scheme.shift();
+}
+
+inline int SCT_ModuleSideDesign::numberOfConnectedCells(const SiReadoutCellId &readoutId)
+const {
+    return m_scheme.numberOfConnectedCells(readoutId);
+}
+
+inline SiCellId SCT_ModuleSideDesign::connectedCell(const SiReadoutCellId &readoutId,
+                                                    int number) const {
+    return m_scheme.connectedCell(readoutId, number);
+}
+
+inline SiCellId SCT_ModuleSideDesign::gangedCell(const SiCellId &) const {
+    // No ganged cells in SCT so always return invalid id.
+    return SiCellId();
+}
+
+inline SiReadoutCellId SCT_ModuleSideDesign::readoutIdOfCell(const SiCellId &cellId) const
+{
+    return m_scheme.readoutIdOfCell(cellId);
+}
+
+inline SiReadoutCellId SCT_ModuleSideDesign::readoutIdOfPosition(
+    const SiLocalPosition &localPos) const {
+    // Get the cellId then convert it to a readoutId.
+    // NEED to think about active area and bond gap check
+    return readoutIdOfCell(cellIdOfPosition(localPos));
+}
+
+inline bool SCT_ModuleSideDesign::swapHitPhiReadoutDirection() const {
+    return m_swapStripReadout;
+}
+
+inline bool SCT_ModuleSideDesign::swapHitEtaReadoutDirection() const {
+    return false;
+}
+
+inline int SCT_ModuleSideDesign::row(int /*stripId1Dim not used */) const {
+    return -1; // Use -1 to realise this is an SCT module without rows
+}
+
+inline int SCT_ModuleSideDesign::strip(int stripId1Dim) const {
+    return stripId1Dim;
+}
+
+inline int SCT_ModuleSideDesign::strip1Dim(int strip, int /*row not used */) const {
+    return strip;
+}
+} // namespace TrackerDD
+#endif // TRACKERREADOUTGEOMETRY_SCT_MODULESIDEDESIGN_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ReadoutScheme.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ReadoutScheme.h
new file mode 100755
index 000000000..f48b82e61
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SCT_ReadoutScheme.h
@@ -0,0 +1,150 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_ReadoutScheme.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SCT_READOUTSCHEME_H
+#define TRACKERREADOUTGEOMETRY_SCT_READOUTSCHEME_H
+
+#include "TrackerReadoutGeometry/SiCellId.h"
+#include "TrackerReadoutGeometry/SiReadoutCellId.h"
+
+#include <list>
+
+namespace TrackerDD {
+
+    /** @class SCT_ReadoutScheme
+    
+        Definition of the readout scheme in the SCT detector describing,
+        number of sides, cells, crystals per module.
+    
+        @author Alessandro Fornaini, Grant Gorfine
+    */
+    
+    class SCT_ReadoutScheme {
+    
+        ///////////////////////////////////////////////////////////////////
+        // Public methods:
+        ///////////////////////////////////////////////////////////////////
+      public:
+      
+        // Copy constructor:
+        SCT_ReadoutScheme(const SCT_ReadoutScheme &scheme);
+      
+        // Constructor with parameters:
+        //   number of crystals within module side
+        //   number of diodes within crystal
+        //   number of cells within module side
+        //   index of diode connected to cell with index 0
+        SCT_ReadoutScheme(const int crystals,const int diodes,
+      		    const int cells,const int shift);
+      
+        // Destructor:
+        virtual ~SCT_ReadoutScheme() = default;
+      
+        // Assignment operator:
+        SCT_ReadoutScheme &operator=(const SCT_ReadoutScheme &scheme);
+
+        void setDiodes(int numDiodes);
+        void setCells(int numReadoutCells);
+      
+        ///////////////////////////////////////////////////////////////////
+        // Const methods:
+        ///////////////////////////////////////////////////////////////////
+      
+        // number of crystals within module side:
+        int crystals() const;
+      
+        // number of diodes within crystal:
+        int diodes() const;
+      
+        // number of cells within module side:
+        int cells() const;
+      
+        // index of diode connected to cell with index 0:
+        int shift() const;
+      
+        // readout id -> id of connected diodes
+        int numberOfConnectedCells(const SiReadoutCellId & readoutId) const;
+        SiCellId connectedCell(const SiReadoutCellId & readoutId, int number) const;
+       
+        // diode id -> readout id
+        SiReadoutCellId readoutIdOfCell(const SiCellId & cellId) const;
+      
+      
+      
+        ///////////////////////////////////////////////////////////////////
+        // Non-const methods:
+        ///////////////////////////////////////////////////////////////////
+      
+        ///////////////////////////////////////////////////////////////////
+        // Private methods:
+        ///////////////////////////////////////////////////////////////////
+      private:
+      
+        SCT_ReadoutScheme();
+      
+        ///////////////////////////////////////////////////////////////////
+        // Private data:
+        ///////////////////////////////////////////////////////////////////
+      private:
+        int m_crystals; // number of crystals within module side
+        int m_diodes; // number of diodes within crystal
+        int m_cells; // number of cells within module side
+        int m_shift; // index of diode connected to cell with index 0
+};
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline void SCT_ReadoutScheme::setDiodes(int numDiodes) {
+  m_diodes = numDiodes;
+}
+
+inline void SCT_ReadoutScheme::setCells(int numReadoutCells) {
+  m_cells = numReadoutCells;
+}
+
+inline int SCT_ReadoutScheme::crystals() const
+{
+  return m_crystals;
+}
+
+inline int SCT_ReadoutScheme::diodes() const
+{
+  return m_diodes;
+}
+
+inline int SCT_ReadoutScheme::cells() const
+{
+  return m_cells;
+}
+
+inline int SCT_ReadoutScheme::shift() const
+{
+  return m_shift;
+}
+
+inline int SCT_ReadoutScheme::numberOfConnectedCells(const SiReadoutCellId & readoutId) const
+{
+  // Assume an in range readout id is used. No checks are made.
+  // Always 1 to 1 correspondence in SCT 
+  return (readoutId.isValid()) ? 1 : 0;
+}
+
+
+inline SiCellId SCT_ReadoutScheme::connectedCell(const SiReadoutCellId & readoutId, int) const
+{
+  // Assume a valid readout id is used.
+  // Always 1 to 1 correspondence in SCT 
+  return readoutId; // Allowed to convert a SiReadoutCellId to a SiCellId.
+}
+
+} // namespace InDetDD
+
+#endif // TRACKERREADOUTGEOMETRY_SCT_READOUTSCHEME_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCellId.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCellId.h
new file mode 100755
index 000000000..240cc3826
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCellId.h
@@ -0,0 +1,160 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiCellId.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SICELLID_H
+#define TRACKERREADOUTGEOMETRY_SICELLID_H
+
+#include <iostream>
+
+namespace TrackerDD {
+
+  /**  @class SiCellId
+    
+    Identifier for the strip or pixel cell.
+    Just the strip number for SCT or phi_index, eta_index for pixel.
+    Packs the numbers in an int.
+    Supports negative indices and is initialized in an invalid state 
+    when using the default constructor.
+
+    @author Grant Gorfine 
+  */
+
+  class SiCellId {
+
+  ///////////////////////////////////////////////////////////////////
+  // Public methods:
+  ///////////////////////////////////////////////////////////////////
+    public:
+
+  /// Constructor. Set in invalid state. 
+  SiCellId(); 
+  /// Construct with strip number. 
+  SiCellId(int strip);
+  /// Construct with phi, eta index. 
+  SiCellId(int phiIndex, int etaIndex);
+
+  ///////////////////////////////////////////////////////////////////
+  // Const methods:
+  ///////////////////////////////////////////////////////////////////
+
+  // Get the indices
+  // NB. phiIndex() and strip() are equivalent.
+  /// Get eta index.
+  int etaIndex() const;
+  /// Get phi index. Equivalent to strip().
+  int phiIndex() const;
+  /// Get strip number. Equivalent to phiIndex().
+  int strip() const;
+
+  /// Test if its in a valid state
+  bool isValid() const;
+
+  /// Test equality.
+  bool operator==(const SiCellId & other) const;
+  /// Test inequality.
+  bool operator!=(const SiCellId & other) const;
+  
+  /// Operator for sorting
+  bool operator<(const SiCellId & other) const;
+
+  unsigned int word() const { return m_word; } 
+  
+private:
+  unsigned int m_word;
+
+  // Masks and shift values.
+  // bits 0 - 15  : phi_index
+  // bits 16 - 30 : eta_index
+  // bit  31      : valid flag
+  enum MaskAndShiftConstants {
+    PHI_MASK  = 0x0000ffff,
+    PHI_NEG   = 0x00008000, //  (PHI_MASK >> 1 + 1)
+    ETA_MASK  = 0x00007fff,
+    ETA_SHIFT = 16,
+    ETA_NEG   = 0x40000000, // ((ETA_MASK >> 1 + 1) << ETA_SHIFT) 
+    VALID     = 0x80000000
+  };
+
+};
+
+std::ostream & operator << (std::ostream & os, const SiCellId & cellId);
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline SiCellId::SiCellId()
+{
+  // set in invalid state
+  // This sets the invalid bit plus set phi and eta index to there most negative value
+  m_word = VALID | ETA_NEG | PHI_NEG ;
+}
+
+inline SiCellId::SiCellId(int phiIndex, int etaIndex)
+{
+  // The negative check is not really necessary if negative numbers are represented as twos complement but
+  // I don't think that assumption is guaranteed to be portable.
+  if (phiIndex < 0) phiIndex = PHI_MASK + phiIndex + 1; // For negative number store as two's complement
+  if (etaIndex < 0) etaIndex = ETA_MASK + etaIndex + 1;
+  m_word = (phiIndex  & PHI_MASK) | ((etaIndex & ETA_MASK) << ETA_SHIFT);
+}
+
+inline SiCellId::SiCellId(int strip)
+{
+  if (strip < 0) strip = PHI_MASK + strip + 1;
+  m_word = strip & PHI_MASK;
+}
+
+inline int SiCellId::etaIndex() const
+{
+  if (m_word & ETA_NEG) { // Negative index
+    return ((m_word >> ETA_SHIFT) & ETA_MASK) - ETA_MASK - 1;
+  } 
+  return (m_word >> ETA_SHIFT) & ETA_MASK;
+}
+
+inline int SiCellId::phiIndex() const
+{
+  if (m_word & PHI_NEG) { // Negative index
+    return (m_word & PHI_MASK) - PHI_MASK - 1;
+  } 
+  return (m_word & PHI_MASK);
+
+}
+
+inline int SiCellId::strip() const
+{
+  return phiIndex();
+}
+
+inline bool SiCellId::isValid() const
+{
+  return !(m_word & VALID);
+}
+
+inline bool SiCellId::operator==(const SiCellId & other) const
+{
+  return (m_word == other.m_word);
+} 
+
+inline bool SiCellId::operator!=(const SiCellId & other) const
+{
+  return (m_word != other.m_word);
+} 
+
+inline bool SiCellId::operator<(const SiCellId & other) const
+{
+  return (m_word < other.m_word);
+} 
+
+
+} // namespace TrackerDD
+
+
+#endif // TRACKERREADOUTGEOMETRY_SICELLID_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCommonItems.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCommonItems.h
new file mode 100755
index 000000000..6f03083b3
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiCommonItems.h
@@ -0,0 +1,95 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiCommonItems.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SICOMMONITEMS_H
+#define TRACKERREADOUTGEOMETRY_SICOMMONITEMS_H
+
+class FaserDetectorID;
+
+// Message Stream Member
+#include "AthenaKernel/MsgStreamMember.h"
+#include "CxxUtils/checker_macros.h"
+#include "InDetCondTools/ISiLorentzAngleTool.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/RCBase.h"
+
+
+#include "GaudiKernel/ServiceHandle.h"
+#include "CLHEP/Geometry/Transform3D.h"
+
+#include <mutex>
+
+// mutable Athena::MsgStreamMember issues warnings.
+ATLAS_NO_CHECK_FILE_THREAD_SAFETY;
+
+namespace TrackerDD {
+
+    /** @class SiCommonItems
+    
+        Helper class to concentrate common items, such as the pointer to the IdHelper,
+        the lorentzAngle service or the information about the solenoidal frame.
+        
+        To be used for SCT.
+        
+        @author: Grant Gorfine
+        mondified & maintained: Nick Styles, Andreas Salzburger
+        */
+
+    class SiCommonItems: public RCBase 
+    {
+    
+        public:
+        
+          SiCommonItems(const FaserDetectorID* const idHelper);
+          
+          const FaserDetectorID* getIdHelper() const;
+          const HepGeom::Transform3D & solenoidFrame() const;
+          void setSolenoidFrame(const HepGeom::Transform3D & transform) const; 
+          void setLorentzAngleTool(const ISiLorentzAngleTool* lorentzAngleTool);
+          const ISiLorentzAngleTool * lorentzAngleTool() const;
+
+          //Declaring the Message method for further use
+          MsgStream& msg (MSG::Level lvl) const { return m_msg.get() << lvl; }
+        
+          //Declaring the Method providing Verbosity Level
+          bool msgLvl (MSG::Level lvl) const { return m_msg.get().level() <= lvl; }
+        
+        private:
+        
+          //Declaring private message stream member.
+          mutable Athena::MsgStreamMember m_msg;
+          
+          const FaserDetectorID* m_idHelper; 
+          mutable HepGeom::Transform3D m_solenoidFrame ATLAS_THREAD_SAFE; // Guarded by m_mutex
+          const ISiLorentzAngleTool *m_lorentzAngleTool;
+
+          mutable std::mutex m_mutex;
+    };
+    
+    
+    inline const FaserDetectorID* SiCommonItems::getIdHelper() const
+    {
+      return m_idHelper;
+    }
+    
+    
+    inline const HepGeom::Transform3D & SiCommonItems::solenoidFrame() const
+    {
+      std::lock_guard<std::mutex> lock{m_mutex};
+      return m_solenoidFrame;
+      // This reference might be changed by setSolenoidFrame.
+      // However, it occurrs very rarely.
+    }
+    
+    
+
+} // End namespace InDetDD
+
+#endif // TRACKERREADOUTGEOMETRY_SICOMMONITEMSS_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorDesign.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorDesign.h
new file mode 100755
index 000000000..b8a01fddc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorDesign.h
@@ -0,0 +1,305 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDetectorDesign.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SIDETECTORDESIGN_H
+#define TRACKERREADOUTGEOMETRY_SIDETECTORDESIGN_H
+
+// Input/output classes
+#include "TrackerReadoutGeometry/SiDiodesParameters.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "CLHEP/Geometry/Point3D.h"
+#include "CLHEP/Geometry/Vector3D.h"
+#include "FaserDetDescr/FaserDetectorID.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "GeoModelKernel/RCBase.h"
+#include "TrackerDD_Defs.h"
+
+#include <list>
+#include <vector>
+
+
+class Identifier;
+
+namespace Trk {
+class SurfaceBounds;
+}
+
+namespace TrackerDD {
+class SiReadoutCellId;
+class SiCellId;
+class SiDiode;
+class SiReadoutCell;
+class SiLocalPosition;
+class SiIntersect;
+
+enum DetectorShape {
+  Box=0, Trapezoid, Annulus,Other
+};
+
+/** @class SiDetectorDesign
+
+   Base class for the detector design classes for Pixel and SCT.
+   These hold the local description of the detector elements which are
+   shared by a number of detector elements.
+
+    @author A. Calvet, Grant Gorfine
+ */
+
+class SiDetectorDesign: public RCBase {
+public:
+    enum Axis {
+        xAxis=0, yAxis, zAxis
+    };
+
+
+    ///////////////////////////////////////////////////////////////////
+    // Public methods:
+    ///////////////////////////////////////////////////////////////////
+public:
+    /** Constructor
+         @param thickness: Thickness of sensor
+         @param phiSymmetric, etaSymmetric, depthSymmetric: Flag to indicate if
+          element is symmetric about these axes. ie for rectangular sensor they
+          are all true, for trapezoidal sensor etaSymmetric
+          is false. They can also be used to force element not to swap directions.
+         @param carrierType: Carrier type that drifts to readout
+          (ie electrons for pixels and holes for SCT)
+          @param readoutSide: Readout side, +ve = positive Depth Side, -ve = negative
+             Depth Side */
+    SiDetectorDesign(double thickness,
+                     bool phiSymmetric,
+                     bool etaSymmetric,
+                     bool depthSymmetric,
+                     TrackerDD::CarrierType carrierType,
+                     int readoutSide);
+
+    SiDetectorDesign(double thickness,
+                     bool phiSymmetric,
+                     bool etaSymmetric,
+                     bool depthSymmetric,
+                     TrackerDD::CarrierType carrierType,
+                     int readoutSide,
+                     SiDetectorDesign::Axis stripDirection,
+                     SiDetectorDesign::Axis depthDirection);
+
+
+    /** Destructor: */
+    virtual ~SiDetectorDesign();
+
+    ///////////////////////////////////////////////////////////////////
+    // Const methods:
+    ///////////////////////////////////////////////////////////////////
+
+    /** Test if point is in the active part of the detector with specified tolerances */
+    SiIntersect inDetector(const SiLocalPosition &localPosition, double phiTol,
+                           double etaTol) const;
+
+    /** Test if near bond gap within tolerances, only relevant for SCT. */
+    virtual bool nearBondGap(const SiLocalPosition &localPosition,
+                             double etaTol) const = 0;
+
+    /** local axis corresponding to eta direction: */
+    Axis etaAxis() const;
+
+    /** local axis corresponding to phi direction: */
+    Axis phiAxis() const;
+
+    /** local axis corresponding to depth direction: */
+    Axis depthAxis() const;
+
+    bool phiSymmetric() const;
+    bool etaSymmetric() const;
+    bool depthSymmetric() const;
+
+    /** ReadoutSide. +1 = postive depth side, -1 = negative depth side. */
+    int readoutSide() const;
+
+    /** Override default symmetries to prevent swapping of axes.
+       NB. Flags can be changed from true to false but not false to true. */
+    void setSymmetry(bool phiSymmetric, bool etaSymmetric, bool depthSymmetric);
+
+
+    ///////////////////////////////////////////////////////////////////
+    // Pure virtual methods:
+    ///////////////////////////////////////////////////////////////////
+
+    /** Returns distance to nearest detector active edge
+       +ve = inside
+       -ve = outside */
+    virtual void distanceToDetectorEdge(const SiLocalPosition &localPosition,
+                                        double &etaDist, double &phiDist) const = 0;
+
+
+
+    /** Helper method for stereo angle computation, DEPRECATED */
+    virtual HepGeom::Vector3D<double> phiMeasureSegment(const SiLocalPosition &position)
+    const = 0;
+
+    /** Special method for SCT to retrieve the two ends of a "strip" */
+    virtual std::pair<SiLocalPosition, SiLocalPosition> endsOfStrip(
+        const SiLocalPosition &position) const = 0;
+
+    /** Method to calculate length of a module */
+    virtual double length() const = 0;
+
+    /** Method to calculate average width of a module */
+    virtual double width() const = 0;
+
+    /** Method to calculate minimum width of a module */
+    virtual double minWidth() const = 0;
+
+    /** Method to calculate maximum width of a module */
+    virtual double maxWidth() const = 0;
+
+    /** Method which returns thickness of the silicon wafer */
+    double thickness() const;
+
+    /** Pitch in phi direction */
+    virtual double phiPitch() const = 0;
+
+    /** Pitch in phi direction */
+    virtual double phiPitch(const SiLocalPosition &localPosition) const = 0;
+
+    // ** Pitch in eta direction */
+    virtual double etaPitch() const = 0;
+
+    /** Return carrier type (ie electrons or holes) */
+    TrackerDD::CarrierType carrierType() const;
+
+    /** Return true if hit local direction is the same as readout direction. */
+    virtual bool swapHitPhiReadoutDirection() const = 0;
+    virtual bool swapHitEtaReadoutDirection() const = 0;
+
+    /** Shape of element */
+    virtual DetectorShape shape() const;
+
+    /**  Element boundary */
+    virtual const Trk::SurfaceBounds &bounds() const = 0;
+
+
+    ///////////////////////////////////////////////////////////
+    //
+    // The following will replace existing methods but are not all implemented yet
+    //
+
+    /** readout or diode id -> position, size */
+    virtual SiDiodesParameters parameters(const SiCellId &cellId) const = 0;
+
+    /** readout or diode id -> position. */
+    virtual SiLocalPosition localPositionOfCell(const SiCellId &cellId) const = 0;
+
+    /** number of connected cells. Generally 1 except for ganged pixels which will be 2.
+      */
+    virtual int numberOfConnectedCells(const SiReadoutCellId &readoutId) const = 0;
+
+    /** readout id -> id of connected diodes.
+       parameter number = 0 will refer to the primary diode and in general the
+       cell number will be the same.
+       NB. SiCellId cellId = connectedCell(readoutId, 0) will in general be equivalent to
+           SiCellId cellId = readoutId */
+    virtual SiCellId connectedCell(const SiReadoutCellId &readoutId,
+                                   int number) const = 0;
+
+    /** If cell is ganged return the id of the other cell which shares the readout
+        for this cell, otherwise return an invalid id. */
+    virtual SiCellId gangedCell(const SiCellId &cellId) const = 0;
+
+    /** diode id -> readout id
+        NB assignment of a SiReadoutCellId to a SiCellId is allowed so you are can
+        pass SiReadoutCellId variables to functions expecting a SiCellId.  */
+    virtual SiReadoutCellId readoutIdOfCell(const SiCellId &cellId) const = 0;
+
+    /** position -> id */
+    virtual SiReadoutCellId readoutIdOfPosition(const SiLocalPosition &localPos) const =
+        0;
+
+    /** position -> id */
+    virtual SiCellId cellIdOfPosition(const SiLocalPosition &localPos) const = 0;
+
+    /** Get the neighbouring diodes of a given diode:
+         Cell for which the neighbours must be found
+       List of cells which are neighbours of the given one */
+    virtual void neighboursOfCell(const SiCellId &cellId,
+                                  std::vector<SiCellId> &neighbours) const = 0;
+
+    /** Check if cell is in range. Returns the original cellId if it is in range,
+      otherwise it returns an invalid id. */
+    virtual SiCellId cellIdInRange(const SiCellId &cellId) const = 0;
+
+
+    ///////////////////////////////////////////////////////////////////
+    // Private methods:
+    ///////////////////////////////////////////////////////////////////
+private:
+    SiDetectorDesign();
+
+    ///////////////////////////////////////////////////////////////////
+    // Private data:
+    ///////////////////////////////////////////////////////////////////
+private:
+    Axis m_etaAxis; // !< local axis corresponding to eta direction
+    Axis m_phiAxis; // !< local axis corresponding to phi direction
+    Axis m_depthAxis; // !< local axis corresponding to depth direction
+    double m_thickness; // !< thickness of silicon sensor
+    TrackerDD::CarrierType m_carrierType; // !< carrier type that drifts towards readout
+    // !< (ie holes fro SCT and electrons for pixel)
+    bool m_phiSymmetric;
+    bool m_etaSymmetric;
+    bool m_depthSymmetric;
+
+    bool m_readoutSidePosDepth; // !< Control which side readout is on.
+                                // !< true = positive Depth Side, false = negative Depth
+                                // Side
+
+    // Disallow Copy and assignment;
+    SiDetectorDesign(const SiDetectorDesign &design);
+    SiDetectorDesign &operator = (const SiDetectorDesign &design);
+};
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline SiDetectorDesign::Axis SiDetectorDesign::etaAxis() const {
+    return m_etaAxis;
+}
+
+inline SiDetectorDesign::Axis SiDetectorDesign::phiAxis() const {
+    return m_phiAxis;
+}
+
+inline SiDetectorDesign::Axis SiDetectorDesign::depthAxis() const {
+    return m_depthAxis;
+}
+
+inline double SiDetectorDesign::thickness() const {
+    return m_thickness;
+}
+
+inline TrackerDD::CarrierType SiDetectorDesign::carrierType() const {
+    return m_carrierType;
+}
+
+inline bool SiDetectorDesign::phiSymmetric() const {
+    return m_phiSymmetric;
+}
+
+inline bool SiDetectorDesign::etaSymmetric() const {
+    return m_etaSymmetric;
+}
+
+inline bool SiDetectorDesign::depthSymmetric() const {
+    return m_depthSymmetric;
+}
+
+inline int SiDetectorDesign::readoutSide() const {
+    return (m_readoutSidePosDepth) ? +1 : -1;
+}
+}  // namespace TrackerDD
+#endif // TRACKERREADOUTGEOMETRY_SIDETECTORDESIGN_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h
new file mode 100644
index 000000000..ebb1b3151
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.h
@@ -0,0 +1,689 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file SiDetectorElement.h
+ **/
+
+#ifndef TRACKERREADOUTGEOMETRY_SIDETECTORELEMENT_H
+#define TRACKERREADOUTGEOMETRY_SIDETECTORELEMENT_H
+
+// Base class.
+#include "TrkDetElementBase/TrkDetElementBase.h"
+
+// Data member classes
+#include "CxxUtils/CachedUniquePtr.h"
+#include "GeoModelKernel/GeoDefinitions.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "Identifier/Identifier.h"
+#include "Identifier/IdentifierHash.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "TrackerReadoutGeometry/SiCellId.h"
+#include "TrackerReadoutGeometry/SiCommonItems.h"
+#include "TrackerReadoutGeometry/SiDetectorDesign.h"
+#include "TrackerReadoutGeometry/SiIntersect.h"
+#include "TrackerReadoutGeometry/SiLocalPosition.h"
+#include "TrkEventPrimitives/ParamDefs.h"
+
+#include "CLHEP/Geometry/Point3D.h"
+
+#include <atomic>
+#include <mutex>
+
+class FaserDetectorID;
+class GeoAlignmentStore;
+class GeoVFullPhysVol;
+
+namespace Trk {
+  class Surface;
+  class SurfaceBounds;
+}
+
+namespace TrackerDD {
+
+  class SiReadoutCellId;
+
+  /**
+  
+     @class SiDetectorElement
+  
+     Class to hold geometrical description of a silicon detector element. 
+     A detector element is one side of a module in the SCT.
+    
+     @par Coordinate Frames.
+  
+     The following coordinate frames are used in these elements.
+  
+     - Global frame:\n
+     Currently global frame in G4/GeoModel. Probably eventually
+     will be global frame most suitable for reconstruction 
+     (eg solenoid axis).
+  
+     - Local hit frame:\n 
+     Local frame for hits. It is the same as local frame in G4 and GeoModel. 
+     I also refer to this as the local simulation frame. 
+     By convention elements are orientated such that:
+     - hitDepth = local x
+     - hitPhi   = local y
+     - hitEta   = local z
+     . 
+     Directions of these correspond to the physical wafer. Consequently hitDepth and hitPhi axes go in 
+     different directions depending on the orientation of the module.
+     The readout side is determined from design()->readoutSide(). 
+  
+     - Local reconstruction frame:\n 
+     - distPhi  = local x
+     - distEta  = local y  
+     - distDepth = local z
+     .
+     The directions of the axes are defined as
+     - distPhi in direction of increasing phi
+     - distEta in direction of increasing z in barrel and increasing r in endcap.
+     - distDepth (normal) choosen to give right-handed coordinate. 
+     =>  away from intersection point for barrel, decreasing z for endcap
+     
+     @par Overview of Methods 
+  
+     Methods are grouped into the the following categories
+  
+     -  Identification
+     -  Navigation
+     -  Transformation/Orientation
+     -  Module Frame
+     -  Element Extent
+     -  Design methods
+     -  Intersection Tests
+     -  Lorentz Correction
+     -  Readout cell id
+     -  Miscellaneous
+     -  Cache handling.
+  
+  
+     @author Grant Gorfine
+     - modified & maintained: Nick Styles, Andreas Salzburger
+     - modified Nigel Hessey: get directions from the design instead of hard-wiring them   
+
+  */  
+
+  /**
+   * Some notes on Thread safety for  AthenaMT
+   * The private methods of this class do not have locks
+   * 
+   * The method updateCache of is of particular interest as 
+   * it set all cache values and at the end sets the  
+   * m_cacheValid atomic variable to true.
+   *
+   * The const methods call the updateCache() under a mutex lock
+   * when the need to perform  lazy initialization
+   * std::lock_guard<std::mutex> lock(m_mutex);
+   *    if (!m_cacheValid) updateCache();
+   *
+   * So as concurrent const operations are valid 
+   * and do not race with each other. 
+   *
+   * The non-const methods do not use a mutex lock. They can set the state
+   * of the cache or the cache itself (invalidate/setCache methods etc)
+   *
+   * Note: Synchronisation of creating SiDetElements for different events 
+   * and accessing for each events 
+   * can be done via write/read handles or similar EventContext aware 
+   * framework machinery. 
+   */
+ 
+
+  class SiDetectorElement : public Trk::TrkDetElementBase {
+
+    ///////////////////////////////////////////////////////////////////
+    // Public methods:
+    ///////////////////////////////////////////////////////////////////
+  public:
+    
+    
+    /// Constructor:
+    SiDetectorElement(const Identifier& id, 
+                      const SiDetectorDesign* design,
+                      const GeoVFullPhysVol* geophysvol,
+                      const SiCommonItems* commonItems,
+                      const GeoAlignmentStore* geoAlignStore=nullptr);
+    
+    /// Destructor:
+    virtual ~SiDetectorElement();
+    
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Identification
+    /// Methods to identify the element and identifier manipulation.
+    // 
+    ///////////////////////////////////////////////////////////////////
+    
+    //@{
+    
+    /// identifier of this detector element (inline)
+    Identifier identify() const;
+    
+    /// identifier hash (inline)
+    IdentifierHash identifyHash() const;
+    
+    /// Returns the id helper (inline)
+    const FaserDetectorID* getIdHelper() const;
+    
+    // Identifier <-> SiCellId (ie strip number or pixel eta_index,phi_index)
+    
+    /// Identifier from SiCellId (ie strip number or pixel eta_index,phi_index)
+    Identifier identifierFromCellId(const SiCellId &cellId) const;
+    
+    /// SiCellId from Identifier
+    SiCellId cellIdFromIdentifier(const Identifier& identifier) const;
+      
+    //@}
+    
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Navigation
+    /// Methods to access neighbours. 
+    //
+    ///////////////////////////////////////////////////////////////////
+    
+    //@{
+    const SiDetectorElement* nextInEta() const; // inline
+    const SiDetectorElement* prevInEta() const; // inline
+    const SiDetectorElement* nextInPhi() const; // inline
+    const SiDetectorElement* prevInPhi() const; // inline
+    const SiDetectorElement* otherSide() const; // Useful for SCT only, inline
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Transformation/Orientation
+    //
+    ///////////////////////////////////////////////////////////////////
+    
+    //@{
+    // Position 
+    /// Local (simulation/hit frame) to global transform
+    virtual const GeoTrf::Transform3D& transformHit() const;
+    /// Local (reconstruction frame) to global transform
+    const Amg::Transform3D& transform() const;
+    /// Default Local (reconstruction frame) to global transform
+    /// ie with no misalignment. 
+    const HepGeom::Transform3D defTransformCLHEP() const;
+    const Amg::Transform3D defTransform() const;
+    /// Center in global coordinates
+    const Amg::Vector3D& center() const;
+    
+    const HepGeom::Transform3D& transformCLHEP() const;
+    
+    /// Simulation/Hit local frame to reconstruction local frame. 2D.
+    //  TODO: Will change order of parameters at some point.
+    Amg::Vector2D hitLocalToLocal(double xEta, double xPhi) const;
+    /// Same as previuos method but 3D.
+    HepGeom::Point3D<double> hitLocalToLocal3D(const HepGeom::Point3D<double>& hitPosition) const;
+    
+    /// Transform to go from local reconstruction frame to local hit frame.
+    const HepGeom::Transform3D recoToHitTransform() const;
+    
+    /// Directions of hit depth,phi,eta axes relative to reconstruction local position
+    /// axes (LocalPosition). Returns +/-1. inline
+    double hitDepthDirection() const;
+    /// See previous method. inline
+    double hitPhiDirection() const;
+    /// See previous method. inline
+    double hitEtaDirection() const;
+    
+    // To determine if readout direction between online and offline needs swapping, see methods
+    // swapPhiReadoutDirection() and swapEtaReadoutDirection() below in "Readout Cell id" section
+    
+    
+    // Orientation. 
+    // Directions.
+    //  phiAxis - in same direction as increasing phi and identifier phi_index/strip. 
+    //            NB. This requires some flipping of axes with repsect to the hits.  
+    //  etaAxis - in direction of increasing z in the barrel and increasing r in the endcap. 
+    //  normal  - choosen to give right-handed coordinate frame (x=normal,y=phiAxis,z=etaAxis)
+    //            NB. This requires some flipping of axes with repsect to the hits.  
+      
+    /// Get reconstruction local phi axes in global frame. 
+    /// In same direction as increasing phi and identifier phi_index/strip. 
+    const Amg::Vector3D& phiAxis() const;
+    const HepGeom::Vector3D<double>& phiAxisCLHEP() const;
+    /// Get reconstruction local eta axes in global frame. 
+    /// In direction of increasing z in the barrel and increasing r in the endcap. 
+    const Amg::Vector3D& etaAxis() const;
+    const HepGeom::Vector3D<double>& etaAxisCLHEP() const;
+    /// Get reconstruction local normal axes in global frame. Choosen to give right-handed coordinate frame.
+    const Amg::Vector3D& normal() const;
+     
+    /// transform a hit local position into a global position (inline):
+    HepGeom::Point3D<double> globalPositionHit(const HepGeom::Point3D<double>& simulationLocalPos) const;
+    Amg::Vector3D globalPositionHit(const Amg::Vector3D& simulationLocalPos) const;
+      
+    /// transform a reconstruction local position into a global position (inline):
+    HepGeom::Point3D<double> globalPosition(const HepGeom::Point3D<double>& localPos) const;
+    Amg::Vector3D globalPosition(const Amg::Vector3D& localPos) const;
+
+    /// as in previous method but for 2D local position (inline)
+    HepGeom::Point3D<double> globalPositionCLHEP(const Amg::Vector2D& localPos) const;
+    Amg::Vector3D globalPosition(const Amg::Vector2D& localPos) const;
+    
+    /// transform a global position into a 2D local position (reconstruction frame) (inline)
+    Amg::Vector2D localPosition(const HepGeom::Point3D<double>& globalPosition) const;
+    Amg::Vector2D localPosition(const Amg::Vector3D& globalPosition) const;
+    
+    /// Compute sin(tilt angle) at a given position:
+    /// at center
+    double sinTilt() const; // At center
+    /// at given local position
+    double sinTilt(const Amg::Vector2D& localPos) const;
+    /// at given global position
+    double sinTilt(const HepGeom::Point3D<double>& globalPosition) const;
+    
+    /// Compute sin(stereo angle) at a given position: at center
+    double sinStereo() const; // At center
+    /// at given local position
+    double sinStereo(const Amg::Vector2D& localPos) const;
+    /// at given global position
+    double sinStereo(const HepGeom::Point3D<double>& globalPosition) const;
+    
+    /// Check if it is the stereo side (useful for SCT) 
+    bool isStereo() const;
+    
+    /// Angle of strip in local frame with respect to the etaAxis. 
+    /// Zero for all elements except trapezoidal detectors (ie SCT forward modules).
+    double sinStereoLocal(const Amg::Vector2D& localPos) const;
+    /// See previous method
+    double sinStereoLocal(const HepGeom::Point3D<double>& globalPos) const;
+    
+    /// Element Surface
+    virtual Trk::Surface& surface();
+    virtual const Trk::Surface& surface() const;
+    
+    //@}
+
+    /** Returns the full list of surfaces associated to this detector element */
+    virtual const std::vector<const Trk::Surface*>& surfaces() const;
+
+    /**
+      
+       @name Module Frame 
+       Methods to help work with the module frame. 
+       This is mainly of of use in the SCT where the module frame can
+       in general be different from the element frame. It is actully
+       defined as the frame of one of the sides (currently the axial
+       side), but using these methods one does not need to make any
+       assumptions about what the actual frame is.  In the following
+       methods the local element frame is the local reconstruction
+       frame of this element.
+    */
+      
+    //@{
+    
+    /// Module to global frame transform. 
+    /// Includes misalignment. The module frame is defined to be the
+    /// local reconstruction frame of the axial layer in the SCT. For
+    /// the pixel it is the same as the element.
+    //const HepGeom::Transform3D & moduleTransform() const;
+    const Amg::Transform3D& moduleTransform() const;
+    
+    /// Default module to global frame transform, ie with no misalignment. 
+    /// The module frame is defined to be the
+    /// local reconstruction frame of the axial layer in the SCT. For
+    /// the pixel it is the same as the element.
+    Amg::Transform3D defModuleTransform() const;
+      
+    
+    /// Take a transform of the local element frame and return its equivalent in the module frame.
+    //HepGeom::Transform3D localToModuleFrame(const HepGeom::Transform3D & localTransform) const;
+    Amg::Transform3D localToModuleFrame(const Amg::Transform3D& localTransform) const;
+    
+    /// Transformation from local element to module frame.  This can be
+    /// used to take a local position in the element frame and transform
+    /// it to a position in the module frame. If one is already in the
+    /// module frame it will return the Identity transform.
+    //HepGeom::Transform3D localToModuleTransform() const;
+    Amg::Transform3D localToModuleTransform() const;
+    
+    /// Check if the element and module frame are the same.
+    bool isModuleFrame() const;
+    
+    
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Element Extent
+    /// Methods to get extent of element in r,phi and z.  
+    ///////////////////////////////////////////////////////////////////
+    
+    //@{
+    // Extent in r,z and phi (inline)
+    double rMin() const;
+    double rMax() const;
+    double zMin() const;
+    double zMax() const;
+    double phiMin() const;
+    double phiMax() const;
+    
+    /// Method for building up region of interest table.
+    /// Get eta/phi extent for the element. Returns min/max eta and phi
+    /// and r (for barrel) or z (for endcap) Takes as input the vertex
+    /// spread in z (-deltaZ to +deltaZ)
+    // void getEtaPhiRegion(double deltaZ, 
+    //                      double& etaMin, double& etaMax,
+    //                      double& phiMin, double& phiMax,
+    //                      double& rz) const;
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Design methods
+    //
+    ///////////////////////////////////////////////////////////////////
+    //@{
+    
+    /// access to the local description (inline):
+    const SiDetectorDesign& design() const;
+    
+    // Methods from design (inline)
+    double width() const; // Width in phi direction. For the SCT endcap it returns the average width. 
+    double minWidth() const; // Min, max width. Needed for the SCT endcap. 
+    double maxWidth() const;
+    double length() const; // Length in eta direction (z - barrel, r - endcap)
+    double thickness() const;
+    TrackerDD::CarrierType carrierType() const; // carrier type for readout. ie holes for SCT 
+    // and electrons for pixels.
+
+    virtual const Trk::SurfaceBounds& bounds() const;
+    
+    // Pitch 
+    //
+    // NOTE: phiPitch is ambiguous for the Forward SCT where it varies along the strip.
+    //       etaPitch is ambiguous for the pixel which has long pixels between FE chips.
+    //
+    // For these cases:
+    //
+    // phiPitch:  For SCT Forward returns pitch at center.
+    // etaPitch:  For pixel returns average pitch. (Active_length/number_of_cells)
+    //
+    // All return pitch in distance units. 
+    //
+    double etaPitch() const; // inline
+    double phiPitch() const; // inline
+    double phiPitch(const Amg::Vector2D& localPosition) const; // Useful for SCT Forward. inline
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Intersection Tests
+    //
+    ///////////////////////////////////////////////////////////////////
+    
+    //@{
+    // Test if near bond gap within tolerances
+    bool nearBondGap(const Amg::Vector2D& localPosition, double etaTol) const;
+    bool nearBondGap(const HepGeom::Point3D<double>& globalPosition, double etaTol) const;
+    
+    // Test that it is in the active region
+    // Intersect has 3 states
+    // bool SiIntersect::in() const // definitely in
+    // bool SiIntersect::out() const // definitely out
+    // bool SiIntersect::nearBoundary() const // near a boundary within the tolerances 
+    // bool SiIntersect::mayIntersect() const // in() OR nearBoundary()
+    SiIntersect inDetector(const Amg::Vector2D& localPosition, double phiTol, double etaTol) const;
+    SiIntersect inDetector(const HepGeom::Point3D<double>& globalPosition, double phiTol, double etaTol) const;
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Readout cell id
+    /// Cell id's are the strip number in SCT and phi_index,eta_index in the pixel
+    /// as defined in the offline identifier. Their direction runs in the distPhi, distEta
+    /// direction in the Reconstruction local frame. 
+    ///
+    /// For methods taking a SiCellId (basically phi,eta index for pixel or strip for SCT) you
+    /// can do the following fro example:
+    ///   - For pixel\n 
+    ///      localPositionOfCell(SiCellId(phi_index,eta_index));\n
+    ///   - For SCT\n
+    ///      localPositionOfCell(SiCellId(strip));\n
+    //
+    ///////////////////////////////////////////////////////////////////
+    //@{
+    
+    /// Determine if readout direction between online and offline needs swapping.
+    /// Returns true if online and offline numbers run in opposite directions.
+    /// For strip/phi_index (inline)
+    bool swapPhiReadoutDirection() const;
+    /// For eta_index (only relevant for pixel) (inline)
+    bool swapEtaReadoutDirection() const;
+    
+    /// Full identifier of the cell for a given position:
+    /// assumes a raw local position (no Lorentz shift)
+    Identifier identifierOfPosition(const Amg::Vector2D& localPos) const;
+    /// As in previous method but returns SiCellId 
+    SiCellId cellIdOfPosition(const Amg::Vector2D& localPos) const;
+    
+    /// Returns position (center) of cell. These are the raw positions *NOT* corrected for the Lorentz shift
+    Amg::Vector2D rawLocalPositionOfCell(const SiCellId & cellId) const;
+    /// As above
+    Amg::Vector2D rawLocalPositionOfCell(const Identifier& id) const;
+    
+    /// Test if readout cell has more than one diode associated with it.
+    /// Number of cells sharing the same readout as this cell.
+    /// ie generally 1 except for ganged pixels which will be 2.
+    int numberOfConnectedCells(const SiCellId cellId) const;
+    /// Get the cell ids sharing the readout for this cell.
+    /// number = 0 will return the primary readout cell id.
+    SiCellId connectedCell(const SiCellId cellId, int number) const;
+    
+    /// If cell is ganged return the id of the other cell which shares the readout
+    /// for this cell, otherwise return an invalid id.
+    /// This is a more convenient (and slightly faster) alternative than 
+    /// using the above two methods.
+    /// Only relevant for pixel. For SCT always returns an invalid ID. (inline)
+    SiCellId gangedCell(const SiCellId& cellId) const;
+    
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Miscellaneous
+    //
+    ///////////////////////////////////////////////////////////////////
+    //@{
+    /// Special method for SCT to retrieve the two ends of a "strip"
+    /// Returned coordinates are in global frame.
+    std::pair<Amg::Vector3D,Amg::Vector3D> endsOfStrip(const Amg::Vector2D& position) const;
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Cache handling.
+    //
+    ///////////////////////////////////////////////////////////////////
+    //@{.
+    //   - Methods to handle invalidating and updating caches. The cached values include values that are affected by alignment
+    //     Surface are only created on demand.  The method updateAllCaches also creates the surfaces as well as calling updateCache.
+    //     Conditions cache contains Lorentz angle related quantities.
+     
+    /// Signal that cached values are no longer valid.
+    /// Invalidate general cache (inline)
+    void invalidate();
+   
+    ///Set/calculate cache values (inline)
+    void setCache();
+
+    ///Set/calculate all cache values including  surfaces. (inline)
+    void setAllCaches();
+   
+    //@}
+    
+    ///////////////////////////////////////////////////////////////////
+    //
+    /// @name Methods to satisfy TrkDetElementBase interface (inline)
+    //
+    ///////////////////////////////////////////////////////////////////
+    //{@
+    virtual const Amg::Transform3D& transform(const Identifier&) const;
+    virtual const Trk::Surface& surface(const Identifier&) const;
+    virtual const Amg::Vector3D& center(const Identifier&) const;
+    virtual const Amg::Vector3D& normal(const Identifier&) const;
+    virtual const Trk::SurfaceBounds& bounds(const Identifier&) const;
+    //@}
+    
+    //////////////////////////////////////////////////////////////////////////////////////
+    //////////////////////////////////////////////////////////////////////////////////////
+    
+    ///////////////////////////////////////////////////////////////////
+    /// @name Non-const methods:
+    /// These are not needed by most clients.
+    ///////////////////////////////////////////////////////////////////
+    //@{
+    // Set neighbours. (inline)
+    
+    void setNextInEta(const SiDetectorElement* element);
+    void setPrevInEta(const SiDetectorElement* element);
+    void setNextInPhi(const SiDetectorElement* element);
+    void setPrevInPhi(const SiDetectorElement* element);
+    void setOtherSide(const SiDetectorElement* element); // For SCT only
+    
+    //@}
+
+    const SiCommonItems* getCommonItems() const;
+    
+    ///////////////////////////////////////////////////////////////////
+    // Private methods:
+    ///////////////////////////////////////////////////////////////////
+    
+  private:
+    /*
+     * Private Methods do not use locks
+     * the methods calling them especially if const 
+     * do
+     */
+
+    /// Recalculate  cached values. 
+    void updateCache() const;
+   
+    /// Update all caches including surfaces.
+    void updateAllCaches() const;
+
+    /// Determine m_isStereo variable and m_stereoCacheValid variable.
+    void determineStereo() const;
+    
+    // Common code for constructors.
+    void commonConstructor();
+    
+    // Calculate extent in r,z and phi. The values are cached and there
+    // are rMin(), rMax etc methods.
+    // It is only used from updateCache
+    void getExtent(double& rMin, double& rMax,
+                   double& zMin, double& zMax,
+                   double& phiMin, double& phiMax) const;
+    
+    // Return the four corners of an element in local coordinates.
+    // Pass it an array of length 4.
+    // This function is used by getEtaPhiRegion()
+    void getCorners(HepGeom::Point3D<double>* corners) const;
+    
+    // Get eta and phi coresponding to a point in local coordinates. 
+    // Requires as input the vertex spread. Returns etaMin, etaMax, and phi.
+    // This function is used by getEtaPhiRegion()
+    // void getEtaPhiPoint(const HepGeom::Point3D<double>& point, double deltaZ,
+    //                     double& etaMin, double& etaMax, double& phi) const;
+
+    // Private recoToHitTransform Implementation method with no lock
+    const HepGeom::Transform3D recoToHitTransformImpl() const;
+ 
+    // Private Implementation  methods with no lock
+    double sinStereoImpl() const; // At center
+    // at given global position
+    double sinStereoImpl(const HepGeom::Point3D<double>& globalPosition) const;
+ 
+    // Declaring the Message method for further use (inline)
+    MsgStream& msg(MSG::Level lvl) const;
+    
+    // Declaring the Method providing Verbosity Level (inline)
+    bool msgLvl(MSG::Level lvl) const;
+    
+    // Don't allow copying and moving.
+    SiDetectorElement() = delete;
+    SiDetectorElement(const SiDetectorElement&) = delete;
+    SiDetectorElement& operator=(const SiDetectorElement&) = delete;
+    SiDetectorElement(SiDetectorElement&&) = delete;
+    SiDetectorElement& operator=(SiDetectorElement&&) = delete;
+
+    ///////////////////////////////////////////////////////////////////
+    // Protected data:
+    ///////////////////////////////////////////////////////////////////
+  protected:
+    Identifier m_id; // identifier of this detector element
+    IdentifierHash m_idHash; // hash id
+    const SiDetectorDesign* m_design; // local description of this detector element
+    //const AtlasDetectorID* m_idHelper; // id helper
+    const SiCommonItems* m_commonItems;
+    
+    const SiDetectorElement* m_nextInEta;
+    const SiDetectorElement* m_prevInEta;
+    const SiDetectorElement* m_nextInPhi;
+    const SiDetectorElement* m_prevInPhi;
+    const SiDetectorElement* m_otherSide;
+    
+    //
+    // Cached values.
+    //
+    // Axes
+    SiDetectorDesign::Axis m_hitEta;
+    SiDetectorDesign::Axis m_hitPhi;
+    SiDetectorDesign::Axis m_hitDepth;
+
+    // Directions of axes. These are true if the hit/simulation and reconstruction local frames are
+    // in the same direction and false if they are opposite.
+    mutable bool m_depthDirection ATLAS_THREAD_SAFE; // Guarded by m_mutex // Direction of depth axis. 
+    // Also direction of readout implant (n+ for pixel, p+ for SCT).
+    mutable bool m_phiDirection ATLAS_THREAD_SAFE;
+    mutable bool m_etaDirection ATLAS_THREAD_SAFE;
+
+    mutable std::atomic_bool m_cacheValid; // Alignment associated quatities.
+    mutable std::atomic_bool m_firstTime;
+    // Since m_isStereo depends on m_otherSide->sinStereo(), a dedicated validity variable is needed.
+    mutable std::atomic_bool m_stereoCacheValid;
+    mutable bool m_isStereo ATLAS_THREAD_SAFE;
+
+    mutable std::mutex m_mutex;
+
+    mutable Amg::Transform3D m_transform ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable HepGeom::Transform3D m_transformCLHEP ATLAS_THREAD_SAFE; // Guarded by m_mutex
+
+    mutable Amg::Vector3D m_normal ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable Amg::Vector3D m_etaAxis ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable HepGeom::Vector3D<double> m_etaAxisCLHEP ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable Amg::Vector3D m_phiAxis ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable HepGeom::Vector3D<double> m_phiAxisCLHEP ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable Amg::Vector3D m_center ATLAS_THREAD_SAFE; // Guarded by m_mutex
+    mutable HepGeom::Vector3D<double> m_centerCLHEP ATLAS_THREAD_SAFE; // Guarded by m_mutex
+
+    mutable double m_minZ   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+    mutable double m_maxZ   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+    mutable double m_minR   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+    mutable double m_maxR   ATLAS_THREAD_SAFE;// Guarded by m_mutex
+    mutable double m_minPhi ATLAS_THREAD_SAFE;// Guarded by m_mutex
+    mutable double m_maxPhi ATLAS_THREAD_SAFE;// Guarded by m_mutex
+
+    CxxUtils::CachedUniquePtrT<Trk::Surface> m_surface;
+    mutable std::vector<const Trk::Surface*> m_surfaces ATLAS_THREAD_SAFE; // Guarded by m_mutex
+
+    const GeoAlignmentStore* m_geoAlignStore{};
+  };
+    
+} // namespace TrackerDD
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+#include "TrackerReadoutGeometry/SiDetectorElement.icc"
+
+#endif // TRACKERREADOUTGEOMETRY_SIDETECTORELEMENT_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc
new file mode 100644
index 000000000..5936a08d4
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElement.icc
@@ -0,0 +1,374 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file SiDetectorElement.icc
+ **/
+
+namespace TrackerDD {
+
+  ///////////////////////////////////////////////////////////////////
+  // Inline methods:
+  ///////////////////////////////////////////////////////////////////
+    
+  inline Identifier SiDetectorElement::identify() const
+  {
+    return m_id;
+  }
+    
+  inline IdentifierHash SiDetectorElement::identifyHash() const
+  {
+    return m_idHash;
+  }
+        
+  inline const FaserDetectorID* SiDetectorElement::getIdHelper() const
+  {
+    return m_commonItems->getIdHelper();
+  }
+        
+  inline const SiDetectorElement * SiDetectorElement::nextInEta() const
+  {
+    return m_nextInEta;
+  }
+    
+  inline const SiDetectorElement * SiDetectorElement::prevInEta() const
+  {
+    return m_prevInEta;
+  }
+    
+  inline const SiDetectorElement * SiDetectorElement::nextInPhi() const
+  {
+    return m_nextInPhi;
+  }
+    
+  inline const SiDetectorElement * SiDetectorElement::prevInPhi() const
+  {
+    return m_prevInPhi;
+  }
+    
+  inline const SiDetectorElement * SiDetectorElement::otherSide() const
+  {
+    return m_otherSide;
+  }
+    
+  inline double SiDetectorElement::hitDepthDirection() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return (m_depthDirection) ? 1. : -1.;
+  }
+    
+  inline double SiDetectorElement::hitPhiDirection() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return (m_phiDirection) ? 1. : -1.;
+  }
+    
+  inline double SiDetectorElement::hitEtaDirection() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return (m_etaDirection) ? 1. : -1.;
+  }
+    
+  inline HepGeom::Point3D<double> SiDetectorElement::globalPositionHit(const HepGeom::Point3D<double>& simulationLocalPos) const
+  {
+    return Amg::EigenTransformToCLHEP(transformHit())*simulationLocalPos;
+  }
+
+  inline Amg::Vector3D SiDetectorElement::globalPositionHit(const Amg::Vector3D& simulationLocalPos) const
+  {
+    return transformHit() * simulationLocalPos;
+  }
+
+  inline HepGeom::Point3D<double> SiDetectorElement::globalPosition(const HepGeom::Point3D<double>& localPos) const
+  {
+    return transformCLHEP() * localPos;
+  }
+    
+  inline Amg::Vector3D SiDetectorElement::globalPosition(const Amg::Vector3D& localPos) const
+  {
+    return transform() * localPos;
+  }
+    
+  inline HepGeom::Point3D<double> SiDetectorElement::globalPositionCLHEP(const Amg::Vector2D& localPos) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_centerCLHEP + localPos[Trk::distEta] * m_etaAxisCLHEP + localPos[Trk::distPhi] * m_phiAxisCLHEP;
+  }
+
+  inline Amg::Vector3D SiDetectorElement::globalPosition(const Amg::Vector2D& localPos) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_center + localPos[Trk::distEta] * m_etaAxis + localPos[Trk::distPhi] * m_phiAxis;
+  }
+
+  inline Amg::Vector2D SiDetectorElement::localPosition(const HepGeom::Point3D<double>& globalPosition) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    HepGeom::Vector3D<double> relativePos = globalPosition - m_centerCLHEP;
+    return Amg::Vector2D(relativePos.dot(m_phiAxisCLHEP), relativePos.dot(m_etaAxisCLHEP));
+  }
+
+  inline Amg::Vector2D SiDetectorElement::localPosition(const Amg::Vector3D& globalPosition) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    Amg::Vector3D relativePos = globalPosition - m_center;
+    return Amg::Vector2D(relativePos.dot(m_phiAxis), relativePos.dot(m_etaAxis));
+  }
+
+  inline double SiDetectorElement::rMin() const 
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_minR;
+  }
+    
+  inline double SiDetectorElement::rMax() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_maxR;
+  }
+    
+  inline double SiDetectorElement::zMin() const 
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_minZ;
+  }
+    
+  inline double SiDetectorElement::zMax() const 
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_maxZ;
+  }
+    
+  inline double SiDetectorElement::phiMin() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_minPhi;
+  }
+    
+  inline double SiDetectorElement::phiMax() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_maxPhi;
+  }
+    
+  inline const SiDetectorDesign& SiDetectorElement::design() const
+  {
+    return *m_design;
+  }
+    
+  inline double SiDetectorElement::width() const
+  {
+    return m_design->width();
+  }
+    
+  inline double SiDetectorElement::minWidth() const
+  {
+    return m_design->minWidth();
+  }
+    
+  inline double SiDetectorElement::maxWidth() const
+  {
+    return m_design->maxWidth();
+  }
+    
+  inline double SiDetectorElement::length() const
+  {
+    return m_design->length();
+  }
+    
+  inline double SiDetectorElement::thickness() const
+  {
+    return m_design->thickness();
+  }
+    
+  inline TrackerDD::CarrierType SiDetectorElement::carrierType() const
+  {
+    return m_design->carrierType();
+  }
+    
+  inline double SiDetectorElement::etaPitch() const
+  {
+    return m_design->etaPitch();
+  }
+    
+  inline double SiDetectorElement::phiPitch() const
+  {
+    return m_design->phiPitch();
+  }
+    
+  inline double SiDetectorElement::phiPitch(const Amg::Vector2D& localPosition) const
+  {
+    return m_design->phiPitch(localPosition);
+  }
+    
+  inline bool SiDetectorElement::swapPhiReadoutDirection() const
+  {
+    if (m_firstTime) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (m_firstTime) updateCache(); // In order to set m_phiDirection
+    }
+    // equivalent to (m_design->swapHitPhiReadoutDirection() xor !m_phiDirection)
+    return ((!m_design->swapHitPhiReadoutDirection() && !m_phiDirection)
+          || (m_design->swapHitPhiReadoutDirection() &&  m_phiDirection));
+  }
+    
+  inline bool SiDetectorElement::swapEtaReadoutDirection() const
+  {
+    if (m_firstTime) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (m_firstTime) updateCache(); // In order to set m_etaDirection
+    }
+    // equivalent to (m_design->swapHitEtaReadoutDirection() xor !m_etaDirection)
+    return ((!m_design->swapHitEtaReadoutDirection() && !m_etaDirection)
+          || (m_design->swapHitEtaReadoutDirection() &&  m_etaDirection));
+  }
+    
+  inline SiCellId SiDetectorElement::gangedCell(const SiCellId& cellId) const
+  {
+    return m_design->gangedCell(cellId);
+  }
+    
+  inline void SiDetectorElement::invalidate()
+  {
+    m_cacheValid = false;
+  }
+    
+  inline void SiDetectorElement::setCache()
+  {
+    updateCache();
+  } 
+    
+  inline void SiDetectorElement::setAllCaches()
+  {
+    updateAllCaches();
+  } 
+ 
+  inline void SiDetectorElement::updateAllCaches() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    if (not m_surface) surface();
+  }
+
+  inline const Amg::Transform3D& SiDetectorElement::transform(const Identifier&) const
+  {
+    return transform();
+  }
+
+  inline const Trk::Surface& SiDetectorElement::surface(const Identifier&) const
+  {
+    return surface();
+  }
+
+  inline const Amg::Vector3D& SiDetectorElement::center(const Identifier&) const
+  {
+    return center();
+  }
+
+  inline const Amg::Vector3D& SiDetectorElement::normal(const Identifier&) const
+  {
+    return normal();
+  }
+
+  inline const Trk::SurfaceBounds& SiDetectorElement::bounds(const Identifier&) const
+  {
+    return bounds();
+  }
+
+  inline void SiDetectorElement::setNextInEta(const SiDetectorElement* element)
+  {
+    m_nextInEta = element;
+  }
+    
+  inline void SiDetectorElement::setPrevInEta(const SiDetectorElement* element)
+  {
+    m_prevInEta = element;
+  }
+    
+  inline void SiDetectorElement::setNextInPhi(const SiDetectorElement* element)
+  {
+    m_nextInPhi = element;
+  }
+    
+  inline void SiDetectorElement::setPrevInPhi(const SiDetectorElement* element)
+  {
+    m_prevInPhi = element;
+  }
+    
+  inline void SiDetectorElement::setOtherSide(const SiDetectorElement* element) // For SCT only
+  {
+    m_otherSide = element;
+  }
+
+  inline const SiCommonItems* SiDetectorElement::getCommonItems() const
+  {
+    return m_commonItems;
+  }
+
+  inline MsgStream& SiDetectorElement::msg(MSG::Level lvl) const
+  {
+    return m_commonItems->msg(lvl);
+  }
+
+  inline bool SiDetectorElement::msgLvl(MSG::Level lvl) const
+  {
+    return m_commonItems->msgLvl(lvl);
+  }
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElementCollection.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElementCollection.h
new file mode 100755
index 000000000..f376eb742
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorElementCollection.h
@@ -0,0 +1,43 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDetectorElementCollection.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+
+#ifndef TRACKERREADOUTGEOMETRY_SIDETECTORELEMENTCOLLECTION_H
+#define TRACKERREADOUTGEOMETRY_SIDETECTORELEMENTCOLLECTION_H
+
+#include <vector>
+
+class IdentifierHash;
+
+namespace TrackerDD {
+
+    class SiDetectorElement;
+
+    /** @class SiDetectorElementCollection
+      
+       Class to hold the SiDetectorElement objects to be put in the detector store
+
+       @author Grant Gorfine
+    */
+
+    class SiDetectorElementCollection : public std::vector<SiDetectorElement *> {
+     public:
+      ~SiDetectorElementCollection();
+      const SiDetectorElement* getDetectorElement(const IdentifierHash& hash) const;
+    };
+
+} // namespace TrackerDD
+
+#include "AthenaKernel/CLASS_DEF.h"
+CLASS_DEF( TrackerDD::SiDetectorElementCollection , 1278082324 , 1 )
+#include "AthenaKernel/CondCont.h"
+CONDCONT_DEF( TrackerDD::SiDetectorElementCollection, 1336075348 );
+
+#endif // TRACKERREADOUTGEOMETRY_SIDETECTORELEMENTCOLLECTION_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorManager.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorManager.h
new file mode 100755
index 000000000..f9e0cff6c
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDetectorManager.h
@@ -0,0 +1,152 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDetectorManager.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SIDETECTORMANAGER_H
+#define TRACKERREADOUTGEOMETRY_SIDETECTORMANAGER_H
+
+#include "TrackerReadoutGeometry/TrackerDetectorManager.h"
+
+#include "TrackerReadoutGeometry/SiDetectorElementCollection.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "TrackerReadoutGeometry/SiNumerology.h"
+
+// Amg stuff
+#include "GeoPrimitives/GeoPrimitives.h"
+
+#include "CLHEP/Geometry/Transform3D.h"
+
+#include <string>
+#include <map>
+  
+class StoreGateSvc;
+class Identifier; 
+class IdentifierHash;
+class AtlasDetectorID;
+class GeoAlignableTransform;
+class GeoVAlignmentStore;
+
+namespace TrackerDD {
+
+class SiDetectorElement;
+class SiDetectorDesign;
+class ExtendedAlignableTransform;
+class SiNumerology;
+
+  /** @class SiDetectorManager
+  
+        Base class for SCT Detector managers.
+        
+        The Detector manager has methods to retrieve the Identifier
+        helper and methods to retrieve the detector elements.  It also
+        manages the alignment with methods to register the call backs
+        and infrastructure to associate the alignment transforms with
+        the appropriate alignable transform in GeoModel.
+        There is also access to the layout (Initial, Final, TestBeam) and
+        and version information.
+  
+       @author: Grant Gorfine
+       - modified and maintained by Nick Styles & Andreas Salzburger 
+       */
+
+    class SiDetectorManager : public TrackerDetectorManager  {
+    
+    
+    public:
+    
+      // Constructor
+      SiDetectorManager(StoreGateSvc * detStore, const std::string & name);
+     
+      // Destructor
+      virtual ~SiDetectorManager() {};
+    
+    
+      //
+      // Access Readout Elements
+      //
+    
+      /** access to individual elements using Identifier or IdentiferHash */
+      virtual SiDetectorElement * getDetectorElement(const Identifier &id) const = 0;
+      virtual SiDetectorElement * getDetectorElement(const IdentifierHash &idHash) const = 0;
+    
+      /** access to whole collectiom */
+      virtual const SiDetectorElementCollection * getDetectorElementCollection() const = 0;
+      virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const = 0;
+      virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd() const = 0;
+    
+    
+      /** Add elememts */
+      virtual void addDetectorElement(SiDetectorElement * element) = 0;
+    
+      /** Initialize the neighbours. This can only be done when all elements are built */
+      virtual void initNeighbours() = 0;
+    
+      /** Get tag used in dictionary */
+      const std::string & tag() const; 
+         
+      /** Add alignable transforms. No access to these, they will be changed by manager: */
+      virtual void addAlignableTransform (int level, const Identifier &id, GeoAlignableTransform *xf) = 0;
+    
+      /** Invalidate cache for all detector elements */
+      virtual void invalidateAll() const;
+    
+      /** Update all caches */
+      virtual void updateAll() const;
+    
+      
+      /** Helper method to set delta transform from a global delta - Amg interface*/
+      bool setAlignableTransformGlobalDelta(ExtendedAlignableTransform * extXF, 
+                                            const Amg::Transform3D & delta,
+                                            GeoVAlignmentStore* alignStore=nullptr) const;
+    
+      /** Helper method to set delta transform from a local delta - Amg interface */
+      bool setAlignableTransformLocalDelta(ExtendedAlignableTransform * extXF, 
+                                           const Amg::Transform3D & localToGlobalXF,
+                                           const Amg::Transform3D & delta,
+                                           GeoVAlignmentStore* alignStore=nullptr) const;
+    
+      /** Access to module design */
+      void addDesign(const SiDetectorDesign *);
+      int numDesigns() const;
+      const SiDetectorDesign * getDesign(int i) const;
+    
+      /** Access Numerology */
+      const SiNumerology & numerology() const {return m_numerology;}
+      SiNumerology & numerology() {return m_numerology;}
+    
+    private:
+      //** Prevent copy and assignment */
+      const SiDetectorManager & operator=(const SiDetectorManager &right);
+      SiDetectorManager(const SiDetectorManager &right); 
+    
+      /** This method is called by the InDetDetectorManager */
+      virtual bool setAlignableTransformDelta(int level, 
+                                              const Identifier & id, 
+                                              const Amg::Transform3D & delta,
+                                              FrameType frame,
+                                              GeoVAlignmentStore* alignStore) const = 0;
+    
+    
+    
+      std::string                               m_tag;
+      SiNumerology                              m_numerology;
+      std::vector< const SiDetectorDesign *>    m_designs;
+    
+    };
+
+
+} // namespace TrackerDD
+
+#ifndef GAUDI_NEUTRAL
+#include "AthenaKernel/CLASS_DEF.h"
+
+CLASS_DEF(TrackerDD::SiDetectorManager, 226381739, 1)
+#endif
+
+#endif // TRACKERREADOUTGEOMETRY_SIDETECTORMANAGER_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDiodesParameters.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDiodesParameters.h
new file mode 100755
index 000000000..996e7f0d2
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiDiodesParameters.h
@@ -0,0 +1,148 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDiodesParameters.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SIDIODESPARAMETERS_H
+#define TRACKERREADOUTGEOMETRY_SIDIODESPARAMETERS_H
+
+// Data members classes
+#include "TrackerReadoutGeometry/SiLocalPosition.h"
+
+namespace TrackerDD {
+   
+   /** @class SiDiodesParameters 
+   Class to handle the position of the centre and the width of a
+   diode or a cluster of diodes
+   Version 1.1 15/08/2001 David Calvet
+   */
+
+  class SiDiodesParameters {
+
+    ///////////////////////////////////////////////////////////////////
+    // Public methods:
+    ///////////////////////////////////////////////////////////////////
+    public:
+
+      /** Implicit constructor: */
+      SiDiodesParameters();
+
+      /** Copy constructor: */
+      SiDiodesParameters(const SiDiodesParameters &parameters);
+
+      /** Constructor with parameters:
+          position of the diodes centre
+          width of the diodes */
+      SiDiodesParameters(const SiLocalPosition &centre,
+    		     const SiLocalPosition &width);
+
+      /** Destructor: */
+      ~SiDiodesParameters();
+
+      /** Assignment operator: */
+      SiDiodesParameters &operator=(const SiDiodesParameters &parameters);
+
+      ///////////////////////////////////////////////////////////////////
+      // Const methods:
+      ///////////////////////////////////////////////////////////////////
+
+      /** position of the diodes centre: */
+      SiLocalPosition centre() const;
+
+      /** width of the diodes: */
+      SiLocalPosition width() const;
+      SiLocalPosition halfWidth() const;
+
+      /** boundaries of the diodes: */
+      double xEtaMin() const;
+      double xEtaMax() const;
+      double xPhiMin() const;
+      double xPhiMax() const;
+      double xDepthMin() const;
+      double xDepthMax() const;
+
+      ///////////////////////////////////////////////////////////////////
+      // Non-const methods:
+      ///////////////////////////////////////////////////////////////////
+
+      void centre(const SiLocalPosition &centre);
+
+      void width(const SiLocalPosition &width);
+
+      ///////////////////////////////////////////////////////////////////
+      // Private data:
+      ///////////////////////////////////////////////////////////////////
+    private:
+      SiLocalPosition m_centre; //!< position of the diodes centre
+      SiLocalPosition m_width; //!< width of the diodes
+  };
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline SiDiodesParameters::~SiDiodesParameters()
+{}
+
+inline SiLocalPosition SiDiodesParameters::centre() const
+{
+  return m_centre;
+}
+
+inline SiLocalPosition SiDiodesParameters::width() const
+{
+  return m_width;
+}
+
+inline SiLocalPosition SiDiodesParameters::halfWidth() const
+{
+  return m_width/2;
+}
+
+inline double SiDiodesParameters::xEtaMin() const
+{
+  return m_centre.xEta()-m_width.xEta()/2;
+}
+
+inline double SiDiodesParameters::xEtaMax() const
+{
+  return m_centre.xEta()+m_width.xEta()/2;
+}
+
+inline double SiDiodesParameters::xPhiMin() const
+{
+  return m_centre.xPhi()-m_width.xPhi()/2;
+}
+
+inline double SiDiodesParameters::xPhiMax() const
+{
+  return m_centre.xPhi()+m_width.xPhi()/2;
+}
+
+inline double SiDiodesParameters::xDepthMin() const
+{
+  return m_centre.xDepth()-m_width.xDepth()/2;
+}
+
+inline double SiDiodesParameters::xDepthMax() const
+{
+  return m_centre.xDepth()+m_width.xDepth()/2;
+}
+
+inline void SiDiodesParameters::centre(const SiLocalPosition &centre)
+{
+  m_centre=centre;
+}
+
+inline void SiDiodesParameters::width(const SiLocalPosition &width)
+{
+  m_width=width;
+}
+
+} // namespace TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_SIDIODESPARAMETERS_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiIntersect.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiIntersect.h
new file mode 100755
index 000000000..5b5d7e19f
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiIntersect.h
@@ -0,0 +1,94 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+//   SiIntersect.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SIINTERSECT_H
+#define TRACKERREADOUTGEOMETRY_SIINTERSECT_H
+
+namespace TrackerDD {
+
+  /** @class SiIntersect
+ 
+      class to run intersection tests
+
+      @author Grant Gorfine
+  */
+
+  class SiIntersect {
+
+    public:
+
+      enum IntersectState {OUT = 0, BOUNDARY = 1, IN = 2};
+
+      SiIntersect(IntersectState state = OUT);
+
+      bool in() const; // Definitely in
+      bool out() const; // Definitely out
+      bool nearBoundary() const; // Near boundary within tolerences
+      bool mayIntersect() const; // in() || nearBoundary()
+      operator bool() const; // Equivalent to mayIntersect().
+
+      void setIn();
+      void setOut();
+      void setNearBoundary();
+
+    private:
+      IntersectState m_state;
+
+  };
+
+inline SiIntersect::SiIntersect(IntersectState state) 
+  : m_state(state)
+{}
+
+inline bool SiIntersect::in() const 
+{
+  return (m_state == IN);
+}
+
+inline bool SiIntersect::out() const 
+{
+  return (m_state == OUT);
+}
+
+inline bool SiIntersect::nearBoundary() const 
+{
+  return (m_state == BOUNDARY);
+}
+
+
+inline bool SiIntersect::mayIntersect() const 
+{
+  return (m_state == BOUNDARY || m_state == IN);
+}
+
+inline SiIntersect::operator bool() const 
+{
+  return mayIntersect();
+}
+
+inline void SiIntersect::setIn()
+{
+  m_state = IN;
+}
+
+inline void SiIntersect::setOut()
+{
+  m_state = OUT;
+}
+
+inline void SiIntersect::setNearBoundary()
+{
+  m_state = BOUNDARY;
+}
+
+} // namespace TrackerDD
+
+#endif  //TRACKERREADOUTGEOMETRY_SIINTERSECT_H
+
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiLocalPosition.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiLocalPosition.h
new file mode 100755
index 000000000..f6474b1bf
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiLocalPosition.h
@@ -0,0 +1,204 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiLocalPosition.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SILOCALPOSITION_H
+#define TRACKERREADOUTGEOMETRY_SILOCALPOSITION_H
+
+#include "GeoPrimitives/GeoPrimitives.h"
+#include "TrkEventPrimitives/ParamDefs.h"
+#include <cmath>
+
+namespace Trk {
+  enum ExtraLocalPosParam {distDepth = 2}; // These will be defined in Trk soon.
+}
+
+namespace TrackerDD {
+
+    /** @class SiLocalPosition
+    Class to represent a position in the natural frame of a silicon sensor, for Pixel and SCT
+    For Pixel: eta=column, phi=row
+
+    Version 2.1 01/08/2001 David Calvet
+    */
+
+  class SiLocalPosition {
+
+
+    ///////////////////////////////////////////////////////////////////
+    // Public methods:
+    ///////////////////////////////////////////////////////////////////
+  public:
+
+    /** Default constructor: */
+    SiLocalPosition();
+    
+    /** Copy constructor: */
+    SiLocalPosition(const SiLocalPosition &position) =  default;
+
+    /** This allows one to pass a Amg::Vector2D  to a SiLocalPosition */
+    SiLocalPosition(const Amg::Vector2D &position);
+
+    /** Constructor with parameters:
+        position along eta direction
+        position along phi direction
+        position along depth direction (default is 0) */
+    SiLocalPosition(const double xEta,const double xPhi,
+  		  const double xDepth=0);
+
+    /** Destructor: */
+    ~SiLocalPosition();
+
+    /** Assignment operator: */
+    SiLocalPosition &operator=(const SiLocalPosition &) = default;
+    
+    /** Move assignment **/
+    SiLocalPosition &operator=(SiLocalPosition &&) = default;
+
+    ///////////////////////////////////////////////////////////////////
+    // Const methods:
+    ///////////////////////////////////////////////////////////////////
+
+    /** position along eta direction:*/
+    double xEta() const;
+
+    /** position along phi direction:*/
+    double xPhi() const;
+
+    /** Cylindrical coordinate r:*/
+    double r() const;
+
+    /** Cylindrical coordinate phi:*/
+    double phi() const;
+
+    /** position along depth direction: */
+    double xDepth() const;
+
+    /** positions for Pixel: */
+    double xColumn() const;
+    double xRow() const;
+
+    ///////////////////////////////////////////////////////////////////
+    // Non-const methods:
+    ///////////////////////////////////////////////////////////////////
+
+    void xEta(const double xEta);
+
+    void xPhi(const double xPhi);
+
+    void xDepth(const double xDepth);
+
+    // for Pixel:
+    void xColumn(const double xColumn);
+    void xRow(const double xRow);
+
+    // addition of positions:
+    SiLocalPosition &operator+=(const SiLocalPosition &position);
+  
+    // so we can go from SiLocalPosition to Trk::LocalPosition
+    operator Amg::Vector2D(void) const;
+
+    // scaling:
+    SiLocalPosition &operator*=(const double factor);
+    SiLocalPosition &operator/=(const double factor);
+
+    ///////////////////////////////////////////////////////////////////
+    // Private data:
+    ///////////////////////////////////////////////////////////////////
+
+  private:
+    double m_xEta; //!< position along eta direction
+    double m_xPhi; //!< position along phi direction
+    double m_xDepth; //!< position along depth direction
+  };
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+inline SiLocalPosition::~SiLocalPosition()
+{}
+
+inline double SiLocalPosition::xEta() const
+{
+  return m_xEta;
+}
+
+inline double SiLocalPosition::xPhi() const
+{
+  return m_xPhi;
+}
+
+inline double SiLocalPosition::xDepth() const
+{
+  return m_xDepth;
+}
+
+inline double SiLocalPosition::r() const
+{
+  return std::sqrt(m_xEta * m_xEta + m_xPhi * m_xPhi);
+}
+
+inline double SiLocalPosition::phi() const
+{
+  return std::atan2(m_xPhi, m_xEta);
+}
+
+inline double SiLocalPosition::xColumn() const
+{
+  return m_xEta;
+}
+
+inline double SiLocalPosition::xRow() const
+{
+  return m_xPhi;
+}
+
+inline void SiLocalPosition::xEta(const double xEta)
+{
+  m_xEta=xEta;
+}
+
+inline void SiLocalPosition::xPhi(const double xPhi)
+{
+  m_xPhi=xPhi;
+}
+
+inline void SiLocalPosition::xDepth(const double xDepth)
+{
+  m_xDepth=xDepth;
+}
+
+inline void SiLocalPosition::xColumn(const double xColumn)
+{
+  m_xEta=xColumn;
+}
+
+inline void SiLocalPosition::xRow(const double xRow)
+{
+  m_xPhi=xRow;
+}
+
+///////////////////////////////////////////////////////////////////
+// Binary operators:
+///////////////////////////////////////////////////////////////////
+SiLocalPosition operator+(const SiLocalPosition &position1,
+			  const SiLocalPosition &position2);
+
+SiLocalPosition operator*(const SiLocalPosition &position,const double factor);
+
+inline SiLocalPosition operator*(const double factor,const SiLocalPosition &position)
+{
+  return position*factor;
+}
+
+SiLocalPosition operator/(const SiLocalPosition &position,const double factor);
+
+} // namespace TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_SILOCALPOSITION_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.h
new file mode 100755
index 000000000..eaa3dbba0
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.h
@@ -0,0 +1,104 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+//   SiNumerology.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+
+#ifndef TRACKERREADOUTGEOMETRY_SINUMEROLOGY_H
+#define TRACKERREADOUTGEOMETRY_SINUMEROLOGY_H
+
+#include <vector>
+
+namespace TrackerDD {
+
+  /** @class SiNumerology
+  
+     Class to extract numerology for SCT. For example number of layers, disks, sectors, rings, etc.
+     See InnerDetector/InDetExample/InDetDetDescrExample/src/SiReadSiDetectorElements.cxx for example of usage.
+
+     @author Grant Gorfine
+   */
+
+  class SiNumerology {
+
+
+    public:
+    
+      /** Constructor: */
+      SiNumerology();
+      
+      // Accessors:
+      
+      /** Number of barrels. Normally 3. */
+      int numBarrels() const; 
+           
+      // /** Barrel/endcap identifier for each barrel. Normally barrelId(0) = -1 */
+      int barrelId(int index) const;
+           
+      /** Number of layers */
+      int numLayers() const; 
+      
+      /** Number of sectors in phi for a layer */
+      int numPhiModulesForLayer(int layer) const;
+      
+      /** Number of sectors in phi for a ring in a disk */
+      int numEtaModulesForLayer(int layer) const;
+      
+      /** First eta_module number for a layer */
+      int beginEtaModuleForLayer(int layer) const;
+      
+      /** Last eta_module number + 1 */
+      int endEtaModuleForLayer(int layer) const;
+      
+      /** Check if eta_module=0 exists */
+      bool skipEtaZeroForLayer(int layer) const;
+      
+      // Check presence of layer/disk
+      /** Check if layer exists */
+      bool useLayer(int layer) const;
+      
+      // Maximums 
+      /** Maximum number of modules in a barrel stave */
+      int maxNumBarrelEta() const;
+      
+      /** Maximum number of strips. Same as maxNumPhiCells() */
+      int maxNumStrips() const; 
+      
+      /** Maximum number of cells in phi direction. Same as maxNumStrips()  */
+      int maxNumPhiCells() const;
+      
+      // Modifiers:
+      void addBarrel(int id);
+      void setNumLayers(int nLayers); 
+      void setNumPhiModulesForLayer(int layer, int nPhiModules);
+      void setNumEtaModulesForLayer(int layer, int nEtaModules);
+      void setMaxNumEtaCells(int cells);
+      void setMaxNumPhiCells(int cells);
+      
+    private:
+      
+      int m_numLayers;
+      int m_numDisks;
+      int m_maxPhiCells;
+      int m_maxEtaCells;
+      int m_maxNumBarrelEta;
+      int m_maxNumEndcapRings;
+      int m_maxNumBarrelPhiModules;
+      int m_maxNumEndcapPhiModules;
+    
+      std::vector<int> m_barrelIds;
+      std::vector<int> m_phiModulesForLayer;
+      std::vector<int> m_etaModulesForLayer;
+
+  };
+  
+}// End namespace
+
+#include "SiNumerology.icc"
+
+#endif // TRACKERREADOUTGEOMETRY_SINUMEROLOGY_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.icc b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.icc
new file mode 100644
index 000000000..360d98650
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiNumerology.icc
@@ -0,0 +1,70 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+namespace TrackerDD {
+
+inline int SiNumerology::numBarrels() const
+{
+  return m_barrelIds.size();
+}
+
+inline int SiNumerology::barrelId(int index) const
+{
+  return m_barrelIds[index];
+}
+
+inline int SiNumerology::numLayers() const
+{
+  return m_numLayers;
+}
+
+inline int SiNumerology::numPhiModulesForLayer(int layer) const
+{
+  return m_phiModulesForLayer[layer];
+}
+
+inline int SiNumerology::numEtaModulesForLayer(int layer) const
+{
+  return m_etaModulesForLayer[layer];
+}
+
+inline int SiNumerology::beginEtaModuleForLayer(int layer) const
+{
+  // Assume symmetric about zero.
+  return -m_etaModulesForLayer[layer]/2;
+}
+
+inline int SiNumerology::endEtaModuleForLayer(int layer) const
+{
+  // Assume symmetric about zero.
+  return m_etaModulesForLayer[layer]/2+1;
+}
+  
+inline bool SiNumerology::skipEtaZeroForLayer(int layer) const
+{
+  // If even then no module at eta = 0.
+  return !(m_etaModulesForLayer[layer]%2);
+}
+
+inline int SiNumerology::maxNumBarrelEta() const
+{
+  return m_maxNumBarrelEta;
+}
+
+inline int SiNumerology::maxNumStrips() const 
+{
+  return m_maxPhiCells; 
+}
+
+inline int SiNumerology::maxNumPhiCells() const
+{
+  return m_maxPhiCells;
+}
+
+inline bool SiNumerology::useLayer(int layer) const
+{
+  return (m_phiModulesForLayer[layer] != 0);
+}
+
+} // End namespace
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiReadoutCellId.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiReadoutCellId.h
new file mode 100755
index 000000000..924bb2b89
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/SiReadoutCellId.h
@@ -0,0 +1,77 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiReadoutCellId.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_SIREADOUTCELLID_H
+#define TRACKERREADOUTGEOMETRY_SIREADOUTCELLID_H
+
+// Base class
+#include "TrackerReadoutGeometry/SiCellId.h"
+
+namespace TrackerDD {
+
+   /** @class SiReadoutCellId 
+
+   Identifier for the strip or pixel readout cell.
+  
+   SiReadoutCellId behaves identically to its base class. Its only
+   introduced to provide some type safety and distiguish between
+   diodes (base class) and readout cells (this class). This is since
+   more than one diode can be connected to a readout cell. 
+
+   The following conversion is legal
+
+        SiReadoutCellId -> SiCellId   OK   
+
+   However the oppoisite is not allowed 
+
+        SiCellId -> SiReadoutCellId   NOT ALLOWED
+
+   since a SiCellId might not have direct readout out (eg for an
+   edge strip or ganged pixel).
+   
+   @author Grant Gorfine
+   */
+
+  class SiReadoutCellId : public SiCellId {
+
+      ///////////////////////////////////////////////////////////////////
+      // Public methods:
+      ///////////////////////////////////////////////////////////////////
+     public:
+  
+      // Allow construction from base class
+      //  explicit SiReadoutCellId(const SiCellIdentifier &);
+
+      SiReadoutCellId(); // Set in invalid state.
+      SiReadoutCellId(int strip);
+      SiReadoutCellId(int phiIndex, int etaIndex);
+
+};
+
+///////////////////////////////////////////////////////////////////
+// Inline methods:
+///////////////////////////////////////////////////////////////////
+
+inline SiReadoutCellId::SiReadoutCellId() 
+  : SiCellId() 
+{}
+
+inline SiReadoutCellId::SiReadoutCellId(int phiIndex, int etaIndex)
+  : SiCellId(phiIndex, etaIndex)
+{}
+
+inline SiReadoutCellId::SiReadoutCellId(int strip)
+  : SiCellId(strip)
+{}
+
+
+} // namespace TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_SIREADOUTCELLID_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDD_Defs.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDD_Defs.h
new file mode 100755
index 000000000..befdfc9b3
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDD_Defs.h
@@ -0,0 +1,22 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// TrackerDD_Defs.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_TRACKERDD_Defs_H
+#define TRACKERREADOUTGEOMETRY_TRACKERDD_Defs_H
+
+
+namespace TrackerDD {
+  enum FrameType {local, global, other};
+  enum CarrierType {holes, electrons};
+  // new enumerator to select given align-folder structure
+  enum AlignFolderType {none = -1, static_run1 = 0, timedependent_run2 = 1};
+}
+
+#endif // TRACKERREADOUTGEOMETRY_TRACKERDD_DEFS_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDetectorManager.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDetectorManager.h
new file mode 100755
index 000000000..62c1b1500
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/TrackerDetectorManager.h
@@ -0,0 +1,204 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// TrackerDectorManager.h
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_TRACKERDETECTORMANAGER_H
+#define TRACKERREADOUTGEOMETRY_TRACKERDETECTORMANAGER_H
+
+// Amg
+#include "GeoPrimitives/GeoPrimitives.h"
+// GeoModel stuff
+#include "GeoModelKernel/GeoVDetectorManager.h"
+#include "TrackerReadoutGeometry/TrackerDD_Defs.h"
+#include "TrackerReadoutGeometry/Version.h"
+#include "CLHEP/Geometry/Transform3D.h"
+// Message Stream Member
+#include "AthenaKernel/MsgStreamMember.h"
+
+// IOV SVC for alignment:
+#include "AthenaKernel/IIOVSvc.h"
+
+#include "DetDescrConditions/AlignableTransformContainer.h"
+
+#include "CxxUtils/checker_macros.h"
+
+#include <atomic>
+#include <string>
+#include <map>
+#include <set>
+#include <list>
+
+class StoreGateSvc;
+class AlignableTransform;
+class Identifier; 
+class FaserDetectorID;
+class GeoVAlignmentStore;
+class CondAttrListCollection;
+
+// mutable Athena::MsgStreamMember issues warnings.
+ATLAS_NO_CHECK_FILE_THREAD_SAFETY;
+
+namespace TrackerDD {
+
+  typedef std::map<std::string, const void*> RawAlignmentObjects;
+
+    /** @class TrackerDetectorManager
+    
+        Virtual base class for all Tracker detector managers.
+        
+        It implements the processKey() method for alingment
+        which calls the setAlignableTransformDelta() method which
+        is specified in the extended classes. This method supports both,
+        local and global delta's in the frame and translates it to the 
+        underlying GeoModel transform. As GeoModel (CLHEP) and tracking
+        (Amg) use different geo libraries, these are the methods that
+        act as the CLHEP <--> Amg interface
+        
+        @author: Grant Gorfine
+        - modified & maintained: Nick Styles & Andreas Salzburger 
+    */
+    class TrackerDetectorManager : public GeoVDetectorManager  {
+    
+    public:
+    
+      // Constructor
+      TrackerDetectorManager(StoreGateSvc * detStore, const std::string & name);
+     
+      // Destructor
+      virtual ~TrackerDetectorManager();
+    
+      
+      /** Get version information */
+      const Version & getVersion() const; 
+      const std::string & getLayout() const; // eg Initial, Final, TestBeam 
+      void setVersion(const Version & version); 
+    
+      /** Alignment access */
+      void addChannel(const std::string & key, int level, FrameType frame);
+      void addFolder(const std::string & key);
+      void addSpecialFolder(const std::string & key);
+      void addGlobalFolder(const std::string & key); 
+      void addAlignFolderType(const AlignFolderType alignfolder);
+
+      StatusCode align( IOVSVC_CALLBACK_ARGS ) const;
+
+      StatusCode align(const RawAlignmentObjects& alignObjects, GeoVAlignmentStore* alignStore) const;
+    
+      /** Invalidate cache for all detector elements */
+      virtual void invalidateAll() const = 0;
+    
+      /** Update all caches */
+      virtual void updateAll() const = 0;
+    
+      /** Check identifier is for this detector */
+      virtual bool identifierBelongs(const Identifier & id) const = 0;
+    
+      /** Declaring the Message method for further use */
+      MsgStream& msg (MSG::Level lvl) const { return m_msg.get() << lvl; }
+
+      /** Declaring the Method providing Verbosity Level */
+      bool msgLvl (MSG::Level lvl) const { return m_msg.get().level() <= lvl; }
+
+      AlignFolderType                           m_alignfoldertype;
+    
+    protected:
+      StoreGateSvc * m_detStore;
+    
+    private:
+      /** @class LevelInfo
+         Private helper class definition.
+         */
+      class LevelInfo {
+
+        private:
+          int m_level;
+          FrameType m_type;
+        
+        public:
+          LevelInfo(): m_level(-1), m_type(TrackerDD::global) {};
+          LevelInfo(int level, FrameType frame): m_level(level), m_type(frame) {};
+        
+          int level() const {return m_level;}
+          FrameType frame() const {return m_type;} 
+          bool isGlobalDelta() const {return m_type == TrackerDD::global;}
+          bool isLocalDelta() const {return m_type == TrackerDD::local;} 
+          bool isValid() const {return (m_level >= 0);}
+        
+      };
+
+      class AlignInfo {
+
+        private:
+        AlignFolderType m_aligntype;
+
+        public:
+          AlignInfo(): m_aligntype(TrackerDD::none) {};
+          AlignInfo(AlignFolderType alignfolder): m_aligntype(alignfolder) {};
+          AlignFolderType AlignFolder() const {return m_aligntype;}
+          bool isValidAlign() const {return (m_aligntype != TrackerDD::none);}
+
+      };
+
+    
+      /** Retrieve level information */
+      const LevelInfo & getLevel(const std::string & key) const;
+
+      /** return align folder string to use **/
+      //      TrackerDD::AlignFolderType getAlignInfo();
+
+      /** Process the alignment container, calls processKey */
+      bool processAlignmentContainer(const std::string & key) const;
+      bool processAlignmentContainer(const AlignableTransformContainer* container, GeoVAlignmentStore* alignStore) const;
+
+      /** Called by processAlignmentContainer, 
+          applies only one key on the transform Collections */
+      bool processKey(const std::string key, 
+                      const AlignableTransform* transformCollection,
+                      GeoVAlignmentStore* alignStore=nullptr) const;
+    
+      /** Set method applying the delta transform (in global or local frame)
+          onto the geoModel transform : CLHEP <--> Amg interface */
+      virtual bool setAlignableTransformDelta(int level, 
+                                              const Identifier & id, 
+                                              const Amg::Transform3D & delta,
+                                              FrameType frame,
+                                              GeoVAlignmentStore* alignStore=nullptr) const = 0;
+
+      virtual bool processSpecialAlignment(const std::string & key,
+                                           TrackerDD::AlignFolderType alignfolder) const = 0;
+
+      virtual bool processSpecialAlignment(const std::string& key,
+                                           const CondAttrListCollection* obj=nullptr,
+                                           GeoVAlignmentStore* alignStore=nullptr) const = 0;
+
+      bool processGlobalAlignmentContainer(const std::string & key,
+                                           const CondAttrListCollection* obj=nullptr,
+                                           GeoVAlignmentStore* alignStore=nullptr) const;
+
+      virtual bool processGlobalAlignment(const std::string & key, int level, FrameType frame,
+                                          const CondAttrListCollection* obj=nullptr,
+                                          GeoVAlignmentStore* alignStore=nullptr) const;
+      
+      virtual const FaserDetectorID* getIdHelper() const = 0;
+    
+      //Declaring private message stream member.
+      mutable Athena::MsgStreamMember           m_msg;
+      
+      Version                                   m_version;
+      std::map<std::string, LevelInfo>          m_keys;
+      std::set<std::string>                     m_folders;
+      std::set<std::string>                     m_specialFolders;
+      std::set<std::string>                     m_globalFolders; // new time-dependent global folders
+
+      static const LevelInfo s_invalidLevel;
+    };
+
+} // namespace TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_TRACKERDETECTORMANAGER_H
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/Version.h b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/Version.h
new file mode 100755
index 000000000..3fe0d5852
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/TrackerReadoutGeometry/Version.h
@@ -0,0 +1,91 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+////////////////////////////////////////////////////////////
+// Version.h
+////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+////////////////////////////////////////////////////////////
+
+#ifndef TRACKERREADOUTGEOMETRY_VERSION 
+#define TRACKERREADOUTGEOMETRY_VERSION 
+
+#include <string>
+
+namespace TrackerDD {
+
+  /** @class Version
+
+    Class to hold version information consisting of tag, name layout and description as strings,
+    such as their integer regpresentation in the major-minor-tag scheme 
+    */
+
+  class Version {
+
+    public:
+
+      /** Constructor.  */
+      Version(const std::string & tag, 
+	  const std::string & name, 
+	  const std::string & layout, 
+	  const std::string & description, 
+	  int major,
+	  int minor,
+	  int patch);
+
+     /** Constructor. DEPRECATED */
+      Version(const std::string & name, 
+	  const std::string & layout, 
+	  const std::string & description, 
+	  int major,
+	  int minor,
+	  int patch);
+
+      /** Empty Constructor  */
+      Version();
+
+      /** Version tag */
+      const std::string & tag() const;
+
+      /** Version label */
+      const std::string & name() const;
+  
+      /** Layout (eg Initial, Final, TestBeam) */
+      const std::string & layout() const;
+
+      /** Description or comment. */
+      const std::string & description() const;
+
+      /** Major version number */
+      int majorNum() const;
+  
+      /** Minor version number */
+      int minorNum() const;
+
+      /** Patch version number  */
+      int patchNum() const;
+
+      /** Print out version number (eg. 2.00.00) */
+      std::string versionNumber() const;
+  
+      /** Full Description 
+          For example,
+          Version: SCT-DC1-00, Name: DC1, Layout: Final, Code Version: 2.00.00, Description: DC1 Geometry */
+      std::string fullDescription() const;
+
+  
+   private:
+ 
+      std::string m_tag;
+      std::string m_name;
+      std::string m_layout;
+      std::string m_description;
+      int m_major;
+      int m_minor;
+      int m_patch;
+  };
+
+} //  namespace  TrackerDD
+
+#endif // TRACKERREADOUTGEOMETRY_VERSION 
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_BarrelModuleSideDesign.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_BarrelModuleSideDesign.cxx
new file mode 100755
index 000000000..d7fb3ec84
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_BarrelModuleSideDesign.cxx
@@ -0,0 +1,279 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_BarrelModuleSideDesign.cxx
+//   Implementation file for class SCT_BarrelModuleSideDesign
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+//
+///////////////////////////////////////////////////////////////////
+// Version 1.0a 31/5/2001 Class creator tool
+// Version 1.0   9/6/2001 Szymon Gadomski
+// Version 1.0.1 20/6/2001 Alessandro Fornaini
+// 3/8/2001 Szymon Gadomski: restored correct calculation
+// in the new diode e.t.c., inActiveArea made fast
+// 15/08/2001 SG: works with new SiDiodesParameters, tested
+// 28/08/2001 SG: endsOfStrip method added
+// 29/10/2001 AF: phiMeasureSegment added
+// Modified: Grant Gorfine
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SCT_BarrelModuleSideDesign.h"
+#include "TrackerReadoutGeometry/SiDiodesParameters.h"
+
+#include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Geometry/Vector3D.h"
+
+#include "TrkSurfaces/RectangleBounds.h"
+
+#include <cmath>
+
+namespace TrackerDD {
+
+using std::abs;
+
+// Constructor with parameters:
+SCT_BarrelModuleSideDesign::SCT_BarrelModuleSideDesign(const double thickness,
+						       const int crystals,
+						       const int diodes,
+						       const int cells,
+						       const int shift,
+						       const bool swapStripReadout,
+						       TrackerDD::CarrierType carrierType,
+						       const double stripPitch,
+						       const double stripLength,
+						       const double xEtaStripPatternCentre,
+						       const double xPhiStripPatternCentre,
+						       const double totalDeadLength,
+						       int readoutSide) :
+  SCT_ModuleSideDesign(thickness, 
+		       true, true, true, // phi,eta,depth axes symmetric
+		       crystals,diodes,cells,shift,swapStripReadout,carrierType,readoutSide),
+  m_stripPitch(stripPitch),
+  m_stripLength(stripLength),
+  m_xEtaStripPatternCentre(xEtaStripPatternCentre),
+  m_xPhiStripPatternCentre(xPhiStripPatternCentre),
+  m_totalDeadLength(totalDeadLength)
+{
+  m_xPhiAbsSize = 0.5*m_stripPitch*diodes;
+  if(crystals==1) {
+    m_xEtaAbsSizeLow = m_totalDeadLength/2;
+    if (m_xEtaAbsSizeLow == 0) m_xEtaAbsSizeLow = -1.0 * CLHEP::mm; // Anything negative will do
+    m_xEtaAbsSizeHigh = m_stripLength/2;
+  }
+  else if(crystals==2) {
+    m_xEtaAbsSizeLow = m_totalDeadLength/2;
+    m_xEtaAbsSizeHigh =  m_stripLength + m_totalDeadLength/2; 
+  } else {
+    std::cout << "wrong number of crystals!\n";
+    m_xEtaAbsSizeLow = m_xEtaAbsSizeHigh = m_xPhiAbsSize = 0.0;
+  }
+  
+  m_bounds = new Trk::RectangleBounds(0.5*width(), 0.5*length());
+}
+
+
+SCT_BarrelModuleSideDesign::~SCT_BarrelModuleSideDesign()
+{
+  delete m_bounds;
+}
+
+// Returns distance to nearest detector edge 
+// +ve = inside
+// -ve = outside
+void
+SCT_BarrelModuleSideDesign::distanceToDetectorEdge(const SiLocalPosition & localPosition,
+						   double & etaDist, double & phiDist) const
+{ 
+  // As the calculation is symmetric around 0,0 we only have to test it for one side.
+  double xEta = abs(localPosition.xEta() - m_xEtaStripPatternCentre);
+  double xPhi = abs(localPosition.xPhi() - m_xPhiStripPatternCentre);
+
+  double xEtaEdge = 0.5 * length();
+  double xPhiEdge = 0.5 * width();
+
+  // Distance to top/bottom
+  etaDist = xEtaEdge - xEta;
+  
+  // Distance to right/left edge
+  phiDist = xPhiEdge - xPhi;
+
+}
+
+
+bool SCT_BarrelModuleSideDesign::nearBondGap(const SiLocalPosition & localPosition, double etaTol) const
+{
+  // Symmetric around xEta = 0 so we can use absolute value.
+  if (m_totalDeadLength==0) return false; 
+  return ( abs(localPosition.xEta()) < 0.5*m_totalDeadLength + etaTol);
+}
+
+// check if the position is in active area
+bool SCT_BarrelModuleSideDesign::inActiveArea(const SiLocalPosition &chargePos, 
+					      bool checkBondGap) const 
+{
+  // in Phi
+  if (abs(chargePos.xPhi()-m_xPhiStripPatternCentre) > m_xPhiAbsSize) return false;
+
+  // in Eta
+  double relEta = fabs(chargePos.xEta() - m_xEtaStripPatternCentre);
+  if (relEta > m_xEtaAbsSizeHigh) return false;
+
+  // bond gap
+  return !(checkBondGap && (relEta < m_xEtaAbsSizeLow));
+}
+
+
+// distance to the nearest diode in units of pitch, from 0.0 to 0.5, 
+// this method should be fast as it is called for every surface charge
+// in the SCT_SurfaceChargesGenerator
+// an active area check, done in the Generator anyway, is removed here
+double SCT_BarrelModuleSideDesign::scaledDistanceToNearestDiode(const SiLocalPosition &chargePos) const
+{
+    double dstrip=fabs(chargePos.xPhi()-m_xPhiStripPatternCentre)/m_stripPitch;
+    dstrip=dstrip-static_cast<double>(int(dstrip))-0.5;
+    // the above -0.5 is because we have an even number of strips, centre of detector
+    // is in the middle of an interstrip gap
+    return fabs(dstrip);
+}
+
+std::pair<SiLocalPosition,SiLocalPosition> SCT_BarrelModuleSideDesign::endsOfStrip(const SiLocalPosition &position) const
+{
+    // this method returns the ends of the strip
+    // assume input xPhi
+
+    SiLocalPosition end1(m_xEtaStripPatternCentre+m_xEtaAbsSizeHigh,position.xPhi());
+    SiLocalPosition end2(m_xEtaStripPatternCentre-m_xEtaAbsSizeHigh,position.xPhi());
+    
+    std::pair<SiLocalPosition,SiLocalPosition> two_ends(end1,end2);
+    return two_ends;
+}
+
+
+double SCT_BarrelModuleSideDesign::length() const
+{
+  return crystals()*m_stripLength+m_totalDeadLength;
+}
+
+double SCT_BarrelModuleSideDesign::width() const
+{
+  return m_stripPitch*diodes();
+}
+
+double SCT_BarrelModuleSideDesign::minWidth() const
+{
+  return width();
+}
+
+double SCT_BarrelModuleSideDesign::maxWidth() const
+{
+  return width();
+}
+
+
+// method for stereo angle computation - returns a vector parallel to the 
+// strip being hit
+HepGeom::Vector3D<double> SCT_BarrelModuleSideDesign::phiMeasureSegment(const SiLocalPosition& ) const
+{
+  HepGeom::Vector3D<double> segment;
+  segment[etaAxis()]=1;
+  return segment;
+}
+
+// give length of dead area
+double SCT_BarrelModuleSideDesign::deadAreaLength() const
+{
+  return m_totalDeadLength;
+}  
+
+// give upper boundary of dead area (origin in module centre)
+double SCT_BarrelModuleSideDesign::deadAreaUpperBoundary() const
+{
+  return m_totalDeadLength/2;
+}
+// give lower boundary of dead area (origin in module centre)
+double SCT_BarrelModuleSideDesign::deadAreaLowerBoundary() const
+{
+  return -m_totalDeadLength/2;
+}
+
+
+
+SiLocalPosition 
+SCT_BarrelModuleSideDesign::localPositionOfCell(const SiCellId & cellId) const
+{
+
+  // NB. No check is made that cellId is valid or in the correct range.
+
+  int strip =  cellId.strip();
+
+  // center of cluster (in units of number of strips) from detector center
+  double clusterCenter = strip - 0.5*cells() + 0.5;
+
+  double xPhi=m_xPhiStripPatternCentre + m_stripPitch * clusterCenter;
+
+  // Return the position.
+  // no matter how many crystals we have, xEta of the position is in the centre!
+  return SiLocalPosition(m_xEtaStripPatternCentre, xPhi);
+}
+
+SiLocalPosition 
+SCT_BarrelModuleSideDesign::localPositionOfCluster(const SiCellId & cellId, int clusterSize) const
+{
+  // This method returns the position of the centre of the cluster starting at cellId.strip()
+  
+  // NB. No check is made that cellId is valid or in the correct range.
+
+  if (clusterSize < 1) clusterSize = 1;
+
+  int strip =  cellId.strip();
+
+  // center of cluster (in units of number of strips) from detector center
+  double clusterCenter = strip - 0.5*cells() + 0.5;
+  if (clusterSize>1) clusterCenter += 0.5 * (clusterSize-1);
+
+  double xPhi=m_xPhiStripPatternCentre + m_stripPitch * clusterCenter;
+
+  // Return the position.
+  // no matter how many crystals we have, xEta of the position is in the centre!
+  return SiLocalPosition(m_xEtaStripPatternCentre, xPhi);
+}
+
+
+SiDiodesParameters 
+SCT_BarrelModuleSideDesign::parameters(const SiCellId & cellId) const
+{
+  // NB. We treat the two crytals as one.
+  SiLocalPosition center=localPositionOfCell(cellId);
+  double xPhiSize=m_stripPitch;
+  double xEtaSize=2*m_xEtaAbsSizeHigh;
+  SiLocalPosition width(xEtaSize,xPhiSize);
+  return SiDiodesParameters(center,width);
+}
+
+SiCellId 
+SCT_BarrelModuleSideDesign::cellIdOfPosition(const SiLocalPosition & localPosition) const
+{
+  // NB We do not distinguish between the two crystals anymore.
+  // Check if we are in the active region. No bondgap check.
+  if (!inActiveArea(localPosition, false)) return SiCellId(); // return an invalid id
+  double xPhi=localPosition.xPhi();
+  double dstrip=(xPhi-m_xPhiStripPatternCentre)/m_stripPitch+0.5*diodes();
+  if (dstrip < 0) return SiCellId(); // return an invalid id
+  int strip = static_cast<int>(dstrip);
+  if (strip > diodes())  return SiCellId();// return an invalid id if strip # greater than number of diodes.
+  return SiCellId(strip-shift()); // strip numbering starts from first readout strip. 
+                                   // Those to the left will have negative numbers.
+
+}
+
+const Trk::SurfaceBounds & 
+SCT_BarrelModuleSideDesign::bounds() const
+{
+  return *m_bounds;
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_DetectorManager.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_DetectorManager.cxx
new file mode 100755
index 000000000..47ed2b774
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_DetectorManager.cxx
@@ -0,0 +1,408 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
+
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
+#include "AthenaPoolUtilities/CondAttrListCollection.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+#include "Identifier/Identifier.h"
+#include "Identifier/IdentifierHash.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "TrackerReadoutGeometry/SiDetectorElementCollection.h"
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
+#include "TrackerReadoutGeometry/ExtendedAlignableTransform.h"
+#include "TrackerReadoutGeometry/SCT_ModuleSideDesign.h"
+#include "StoreGate/StoreGateSvc.h"
+
+#include <iostream>
+
+namespace TrackerDD {
+
+  const int FIRST_HIGHER_LEVEL = 2;
+
+  SCT_DetectorManager::SCT_DetectorManager( StoreGateSvc* detStore )
+    : SiDetectorManager(detStore, "SCT"),
+      m_idHelper(0),
+      m_isLogical(false) // Change to true to change the definition of local module corrections
+  {
+    //  
+    // Initialized the Identifier helper.
+    //
+    StatusCode sc = detStore->retrieve(m_idHelper, "FaserSCT_ID");  
+    if (sc.isFailure()) {
+      ATH_MSG_ERROR("Could not retrieve SCT id helper");
+    }
+    // Initialize the collections.
+    if (m_idHelper) {
+      m_elementCollection.resize(m_idHelper->wafer_hash_max());
+      m_alignableTransforms.resize(m_idHelper->wafer_hash_max());
+      m_moduleAlignableTransforms.resize(m_idHelper->wafer_hash_max()/2);
+    } 
+  }
+
+
+
+  SCT_DetectorManager::~SCT_DetectorManager()
+  {
+    // Clean up
+    for (size_t i=0; i < m_volume.size(); i++) {
+      m_volume[i]->unref();
+    }
+
+    for (size_t j=0; j < m_higherAlignableTransforms.size(); j++){
+      AlignableTransformMap::iterator iterMap;  
+      for (iterMap = m_higherAlignableTransforms[j].begin(); 
+           iterMap != m_higherAlignableTransforms[j].end();
+           ++iterMap) {
+        delete iterMap->second;
+      }
+    }
+
+    for (size_t k=0; k < m_alignableTransforms.size(); k++){
+      delete m_alignableTransforms[k];
+    }
+
+    for (size_t l=0; l < m_moduleAlignableTransforms.size(); l++){
+      delete m_moduleAlignableTransforms[l];
+    }
+  }
+
+  unsigned int SCT_DetectorManager::getNumTreeTops() const
+  {
+    return m_volume.size(); 
+  }
+
+  PVConstLink SCT_DetectorManager::getTreeTop(unsigned int i) const
+  {
+    return m_volume[i];
+  }
+
+  void SCT_DetectorManager::addTreeTop(PVLink vol){
+    vol->ref();
+    m_volume.push_back(vol);
+  }
+
+
+  SiDetectorElement* SCT_DetectorManager::getDetectorElement(const Identifier & id) const
+  {  
+    // NB the id helpers implementation for getting a hash is not optimal.
+    // Essentially does a binary search.
+    // Make sure it is a wafer Id
+    Identifier waferId =  m_idHelper->wafer_id(id);
+    IdentifierHash idHash = m_idHelper->wafer_hash(waferId);
+    if (idHash.is_valid()) {
+      return m_elementCollection[idHash];
+    } else {
+      return 0;
+    }
+  }
+
+  SiDetectorElement* SCT_DetectorManager::getDetectorElement(const IdentifierHash & idHash) const
+  {
+    return m_elementCollection[idHash];
+  }
+
+  SiDetectorElement* SCT_DetectorManager::getDetectorElement(int barrel_endcap, int layer_wheel, int phi_module, int eta_module, int side) const
+  {
+    return getDetectorElement(m_idHelper->wafer_id(barrel_endcap, layer_wheel, phi_module, eta_module, side));
+  }
+
+  const SiDetectorElementCollection* SCT_DetectorManager::getDetectorElementCollection() const
+  { 
+    return &m_elementCollection;
+  }
+
+  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementBegin() const
+  {
+    return m_elementCollection.begin();
+  }
+
+  SiDetectorElementCollection::const_iterator SCT_DetectorManager::getDetectorElementEnd() const
+  {
+    return m_elementCollection.end();
+  }
+
+
+  void SCT_DetectorManager::addDetectorElement(SiDetectorElement * element)
+  {
+    IdentifierHash idHash = element->identifyHash();
+    if (idHash >=  m_elementCollection.size())
+      throw std::runtime_error("SCT_DetectorManager: Error adding detector element.");
+    m_elementCollection[idHash] = element;
+  }
+
+  void SCT_DetectorManager::initNeighbours()
+  {
+    SiDetectorElementCollection::iterator iter;
+
+    // Loop over all elements and set the neighbours
+    for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
+
+      SiDetectorElement * element = *iter;
+      if (element) {
+
+        IdentifierHash idHash = element->identifyHash();
+        IdentifierHash idHashOther;
+
+        int result;
+        // If no neighbour, result != 0 in which case we leave neighbour as null
+        result = m_idHelper->get_next_in_eta(idHash, idHashOther);
+        if (result==0) element->setNextInEta(m_elementCollection[idHashOther]);
+
+        result = m_idHelper->get_prev_in_eta(idHash, idHashOther);
+        if (result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
+
+        result = m_idHelper->get_next_in_phi(idHash, idHashOther);
+        if (result==0) element->setNextInPhi(m_elementCollection[idHashOther]);
+
+        result = m_idHelper->get_prev_in_phi(idHash, idHashOther);
+        if (result==0) element->setPrevInPhi(m_elementCollection[idHashOther]);
+
+        result = m_idHelper->get_other_side(idHash, idHashOther);
+        if (result==0) element->setOtherSide(m_elementCollection[idHashOther]);
+      }
+    }
+  }
+
+
+  const FaserSCT_ID* SCT_DetectorManager::getIdHelper() const
+  {
+    return m_idHelper;
+  }
+
+
+  bool SCT_DetectorManager::setAlignableTransformDelta(int level, 
+                                                       const Identifier & id, 
+                                                       const Amg::Transform3D & delta,
+                                                       FrameType frame,
+                                                       GeoVAlignmentStore* alignStore) const
+  {
+
+    if (level == 0) { // 0 - At the element level
+
+      // We retrieve it via a hashId.
+      IdentifierHash idHash = m_idHelper->wafer_hash(id);
+      if (!idHash.is_valid()) return false;
+
+      if (frame == TrackerDD::global) { // global shift
+        // Its a global transform
+        return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash], delta, alignStore);
+
+      } else if (frame == TrackerDD::local) { // local shift
+
+        SiDetectorElement * element =  m_elementCollection[idHash];
+        if (!element) return false;
+
+
+        // Its a local transform
+        //See header file for definition of m_isLogical          
+        if( m_isLogical ){
+          //Ensure cache is up to date and use the alignment corrected local to global transform
+          element->setCache();
+          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash], element->transform(), delta, alignStore);
+        } else 
+          //Use default local to global transform
+          return setAlignableTransformLocalDelta(m_alignableTransforms[idHash], element->defTransform(), delta, alignStore);
+
+      } else {   
+        // other not supported
+        ATH_MSG_WARNING("Frames other than global or local are not supported.");
+        return false;
+      }
+
+    } else if (level == 1) { // module level
+
+      // We retrieve it via a hashId.
+      IdentifierHash idHash = m_idHelper->wafer_hash(id);
+      if (!idHash.is_valid()) return false;
+
+      int idModuleHash = idHash / 2;
+
+      if (idHash%2) {
+        ATH_MSG_WARNING("Side 1 wafer id used for module id");
+        return false;
+      }
+
+      if (frame == TrackerDD::global) { // global shift
+        // Its a global transform
+        return setAlignableTransformGlobalDelta(m_moduleAlignableTransforms[idModuleHash], delta, alignStore);
+      } else if (frame == TrackerDD::local) { // local shift
+        SiDetectorElement * element =  m_elementCollection[idHash];
+        if (!element) return false;
+       
+        // Its a local transform
+        //See header file for definition of m_isLogical          
+        if( m_isLogical ){
+          //Ensure cache is up to date and use the alignment corrected local to global transform
+          element->setCache();
+          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash], element->moduleTransform(), delta, alignStore);
+        } else 
+          //Use default local to global transform
+          return setAlignableTransformLocalDelta(m_moduleAlignableTransforms[idModuleHash],element->defModuleTransform(), delta, alignStore);
+
+      } else {
+        // other not supported
+        ATH_MSG_WARNING("Frames other than global or local are not supported.");
+        return false;
+      }
+
+    } else { // higher level
+
+      if (frame != TrackerDD::global) {
+        ATH_MSG_WARNING("Non global shift at higher levels is not supported.");
+        return false;
+      }
+
+      int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
+      if (index  >=  static_cast<int>(m_higherAlignableTransforms.size())) return false;
+
+      // We retrieve it from a map. 
+      AlignableTransformMap::const_iterator iter;    
+      iter = m_higherAlignableTransforms[index].find(id);
+      if (iter == m_higherAlignableTransforms[index].end()) return false;      
+
+      // Its a global transform
+      return setAlignableTransformGlobalDelta(iter->second, delta, alignStore);
+    }
+
+  }
+
+  void SCT_DetectorManager::addAlignableTransform (int level, 
+                                                   const Identifier & id, 
+                                                   GeoAlignableTransform *transform,
+                                                   const GeoVPhysVol * child)
+  {
+    if (m_idHelper) {
+
+      const GeoVFullPhysVol * childFPV = dynamic_cast<const GeoVFullPhysVol *>(child);
+      if (!childFPV) { 
+        ATH_MSG_ERROR("Child of alignable transform is not a full physical volume");
+      } else {
+        addAlignableTransform (level, id, transform, childFPV);
+      }
+    }
+  }
+
+  void SCT_DetectorManager::addAlignableTransform (int level, 
+                                                   const Identifier & id, 
+                                                   GeoAlignableTransform *transform,
+                                                   const GeoVFullPhysVol * child)
+  { 
+    if (m_idHelper) {
+      if (level == 0) { 
+        // Element
+        IdentifierHash idHash = m_idHelper->wafer_hash(id);
+        if (idHash.is_valid()) {
+          m_alignableTransforms[idHash]= new ExtendedAlignableTransform(transform, child);
+        } 
+      } else if (level == 1) {
+        // Module
+        IdentifierHash idHash = m_idHelper->wafer_hash(id);
+        if (idHash.is_valid()) {
+          m_moduleAlignableTransforms[idHash/2]=new ExtendedAlignableTransform(transform, child);
+        } 
+
+      } else {
+
+        // Higher levels are saved in a map. NB level=0,1 is treated above.   
+        int index = level - FIRST_HIGHER_LEVEL; // level 0 and 1 is treated separately.
+        if (index >= static_cast<int>(m_higherAlignableTransforms.size())) m_higherAlignableTransforms.resize(index+1); 
+        m_higherAlignableTransforms[index][id] = new ExtendedAlignableTransform(transform, child);
+      }  
+    }
+  }
+
+  bool
+  SCT_DetectorManager::identifierBelongs(const Identifier & id) const
+  {
+    return getIdHelper()->is_sct(id);
+  }
+
+
+  const SCT_ModuleSideDesign* SCT_DetectorManager::getSCT_Design(int i) const
+  {
+    return dynamic_cast<const SCT_ModuleSideDesign *>(getDesign(i));
+  }
+
+  // New global alignment folders
+  bool SCT_DetectorManager::processGlobalAlignment(const std::string & key, int level, FrameType frame,
+                                                   const CondAttrListCollection* obj, GeoVAlignmentStore* alignStore) const
+  {
+    ATH_MSG_INFO("Processing new global alignment containers with key " << key << " in the " << frame << " frame at level ");
+
+    const CondAttrListCollection* atrlistcol=obj;
+    if(atrlistcol==nullptr and m_detStore->retrieve(atrlistcol,key)!=StatusCode::SUCCESS) {
+      ATH_MSG_INFO("Cannot find new global align Container for key "
+                   << key << " - no new global alignment ");
+      return false;
+    }
+
+    bool alignmentChange = false;
+    Identifier ident=Identifier();
+
+    // loop over objects in collection
+    for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
+      const coral::AttributeList& atrlist=citr->second;
+      // SCT manager, therefore ignore all that is not a SCT Identifier
+      if (atrlist["det"].data<int>()!=2) continue;
+
+      ident = getIdHelper()->wafer_id(atrlist["bec"].data<int>(),
+                                      atrlist["layer"].data<int>(),
+                                      atrlist["ring"].data<int>(),
+                                      atrlist["sector"].data<int>(),
+                                      0); // The last is the module side which is at this ident-level always the 0-side
+
+      // construct new transform
+      // Order of rotations is defined as around z, then y, then x.
+      Amg::Translation3D  newtranslation(atrlist["Tx"].data<float>(),atrlist["Ty"].data<float>(),atrlist["Tz"].data<float>());
+      Amg::Transform3D newtrans = newtranslation * Amg::RotationMatrix3D::Identity();
+      newtrans *= Amg::AngleAxis3D(atrlist["Rz"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,0.,1.));
+      newtrans *= Amg::AngleAxis3D(atrlist["Ry"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,1.,0.));
+      newtrans *= Amg::AngleAxis3D(atrlist["Rx"].data<float>()*CLHEP::mrad, Amg::Vector3D(1.,0.,0.));
+
+      ATH_MSG_DEBUG("New global DB -- channel: " << citr->first
+                    << " ,det: "    << atrlist["det"].data<int>()
+                    << " ,bec: "    << atrlist["bec"].data<int>()
+                    << " ,layer: "  << atrlist["layer"].data<int>()
+                    << " ,ring: "   << atrlist["ring"].data<int>()
+                    << " ,sector: " << atrlist["sector"].data<int>()
+                    << " ,Tx: "     << atrlist["Tx"].data<float>()
+                    << " ,Ty: "     << atrlist["Ty"].data<float>()
+                    << " ,Tz: "     << atrlist["Tz"].data<float>()
+                    << " ,Rx: "     << atrlist["Rx"].data<float>()
+                    << " ,Ry: "     << atrlist["Ry"].data<float>()
+                    << " ,Rz: "     << atrlist["Rz"].data<float>());
+
+      // Set the new transform; Will replace existing one with updated transform
+      bool status = setAlignableTransformDelta(level,
+                                               ident,
+                                               newtrans,
+                                               frame,
+                                               alignStore);
+
+      if (!status) {
+        ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
+                      << getIdHelper()->show_to_string(ident)
+                      << " at level " << level << " for new global DB ");
+      }
+
+      alignmentChange = (alignmentChange || status);
+    }
+    return alignmentChange;
+  }
+
+bool SCT_DetectorManager::processSpecialAlignment(
+    const std::string &, TrackerDD::AlignFolderType) const {
+  return false;
+}
+
+bool SCT_DetectorManager::processSpecialAlignment(const std::string& /*key*/,
+                                                  const CondAttrListCollection* /*obj*/,
+                                                  GeoVAlignmentStore* /*alignStore*/) const {
+  return false;
+
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ModuleSideDesign.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ModuleSideDesign.cxx
new file mode 100755
index 000000000..c8c0bdbd3
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ModuleSideDesign.cxx
@@ -0,0 +1,104 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_ModuleSideDesign.cxx
+//   Implementation file for class SCT_ModuleSideDesign
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+// Version 1.2 03/7/2001 Alessandro Fornaini
+// Modified: Grant Gorfine
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SCT_ModuleSideDesign.h"
+#include "Identifier/Identifier.h"
+
+namespace TrackerDD {
+// Constructor with parameters:
+//   local axis corresponding to eta direction
+//   local axis corresponding to phi direction
+//   local axis corresponding to depth direction
+//   thickness of silicon sensor
+//   number of crystals within module side
+//   number of diodes within crystal
+//   number of cells within module side
+//   index of diode connected to cell with index 0
+
+
+SCT_ModuleSideDesign::SCT_ModuleSideDesign(const double thickness,
+                                           const bool phiSymmetric,
+                                           const bool etaSymmetric,
+                                           const bool depthSymmetric,
+                                           const int crystals,
+                                           const int diodes,
+                                           const int cells,
+                                           const int shift,
+                                           const bool swapStripReadout,
+                                           TrackerDD::CarrierType carrierType,
+                                           int readoutSide):
+    SiDetectorDesign(thickness, phiSymmetric, etaSymmetric, depthSymmetric, carrierType, readoutSide),
+    m_scheme(crystals, diodes, cells, shift),
+    m_swapStripReadout(swapStripReadout) {
+}
+
+SCT_ModuleSideDesign::SCT_ModuleSideDesign(const double thickness,
+                                           const bool phiSymmetric,
+                                           const bool etaSymmetric,
+                                           const bool depthSymmetric,
+                                           const int crystals,
+                                           const int diodes,
+                                           const int cells,
+                                           const int shift,
+                                           const bool swapStripReadout,
+                                           TrackerDD::CarrierType carrierType,
+                                           int readoutSide,
+                                           const TrackerDD::SiDetectorDesign::Axis stripDirection,
+                                           const TrackerDD::SiDetectorDesign::Axis thicknessDirection)
+    :
+    SiDetectorDesign(thickness, phiSymmetric, etaSymmetric, depthSymmetric, carrierType, readoutSide,
+                     stripDirection, thicknessDirection),
+    m_scheme(crystals, diodes, cells, shift),
+    m_swapStripReadout(swapStripReadout) {
+}
+
+void SCT_ModuleSideDesign::neighboursOfCell(const SiCellId &cellId,
+                                            std::vector<SiCellId> &neighbours) const {
+    neighbours.clear();
+    neighbours.reserve(2);
+
+    if (!cellId.isValid()) {
+        return;
+    }
+
+    int strip = cellId.strip();
+    int stripM = strip - 1;
+    int stripP = strip + 1;
+
+    if (stripM >= m_scheme.shift()) {
+        neighbours.push_back(stripM);
+    }
+    if (stripP < m_scheme.diodes() + m_scheme.shift()) {
+        neighbours.push_back(stripP);
+    }
+}
+
+// This method returns the position of the centre of a strip
+// ALTERNATIVE/PREFERED way is to use localPositionOfCell(const SiCellId & cellId) or
+// rawLocalPositionOfCell method in SiDetectorElement.
+// DEPRECATED (but used in numerous places)
+SiLocalPosition SCT_ModuleSideDesign::positionFromStrip(const int stripNumber) const {
+    return localPositionOfCell(SiCellId(stripNumber));
+}
+
+/// Check if cell is in range. Returns the original cellId if it is in range, otherwise it
+// returns an invalid id.
+SiCellId SCT_ModuleSideDesign::cellIdInRange(const SiCellId &cellId) const {
+    if (!cellId.isValid() ||
+        cellId.strip() < 0 || cellId.strip() >= cells()) {
+        return SiCellId(); // Invalid
+    }
+    return cellId;
+}
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ReadoutScheme.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ReadoutScheme.cxx
new file mode 100755
index 000000000..5b2cdde3d
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SCT_ReadoutScheme.cxx
@@ -0,0 +1,67 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SCT_ReadoutScheme.cxx
+//   Implementation file for class SCT_ReadoutScheme
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+// Version 1.0 23/5/2001 Alessandro Fornaini
+// Modified: Grant Gorfine
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SCT_ReadoutScheme.h"
+
+namespace TrackerDD {
+
+// Copy constructor:
+SCT_ReadoutScheme::SCT_ReadoutScheme(const SCT_ReadoutScheme &scheme) :
+  m_crystals(scheme.m_crystals),
+  m_diodes(scheme.m_diodes),
+  m_cells(scheme.m_cells),
+  m_shift(scheme.m_shift)
+{}
+
+// Constructor with parameters:
+SCT_ReadoutScheme::SCT_ReadoutScheme(const int crystals,const int diodes,
+				     const int cells,const int shift) :
+  m_crystals(crystals),
+  m_diodes(diodes),
+  m_cells(cells),
+  m_shift(shift)
+{ 
+  //check if parameters are consistent
+  if (m_crystals<1) m_crystals=1;
+  if (m_diodes<0) m_diodes=0;
+  if (m_cells<0) m_cells=0;
+}
+
+// Assignment operator:
+SCT_ReadoutScheme &SCT_ReadoutScheme::operator=(const SCT_ReadoutScheme &scheme)
+{
+  if (this!=&scheme) {
+    m_crystals=scheme.m_crystals;
+    m_diodes=scheme.m_diodes;
+    m_cells=scheme.m_cells;
+    m_shift=scheme.m_shift;
+  } else {}
+  return *this;
+}
+
+
+// diode id -> readout id
+SiReadoutCellId 
+SCT_ReadoutScheme::readoutIdOfCell(const SiCellId & cellId) const
+{
+  // readout cell and diode numbering are the same.
+  // The range can be different due to the unconnected edge strips (if m_shift != 0).
+  if (!cellId.isValid()) return SiReadoutCellId(); // return an invalid id. 
+  int strip = cellId.strip();
+  // I think this should be >= m_cells. But need to check if this has any implications.
+  if (strip < 0 || strip > m_cells) return SiReadoutCellId(); // return an invalid id.
+  return SiReadoutCellId(strip);
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCellId.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCellId.cxx
new file mode 100755
index 000000000..e02bb3ac7
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCellId.cxx
@@ -0,0 +1,17 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/SiCellId.h"
+
+namespace TrackerDD{
+	std::ostream & operator << (std::ostream & os, const SiCellId & cellId)
+	{
+		if (cellId.isValid()){
+			return os << "[" << cellId.phiIndex() << "." << cellId.etaIndex() << "]";
+		} else {
+			return os << "[INVALID]";
+		}
+	}
+}// namespace TrackerDD
+
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCommonItems.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCommonItems.cxx
new file mode 100755
index 000000000..7d2f086e1
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiCommonItems.cxx
@@ -0,0 +1,31 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/SiCommonItems.h"
+
+namespace TrackerDD {
+
+SiCommonItems::SiCommonItems(const FaserDetectorID* const idHelper)
+  :  m_msg("SiDetectorElement"),
+     m_idHelper(idHelper), 
+     m_lorentzAngleTool(nullptr),
+     m_mutex{}
+{}
+
+void   
+SiCommonItems::setSolenoidFrame(const HepGeom::Transform3D & transform) const
+{
+  std::lock_guard<std::mutex> lock{m_mutex};
+  m_solenoidFrame = transform;
+}
+
+void SiCommonItems::setLorentzAngleTool(const ISiLorentzAngleTool* lorentzAngleTool) {
+  m_lorentzAngleTool = lorentzAngleTool;
+}
+
+const ISiLorentzAngleTool* SiCommonItems::lorentzAngleTool() const {
+  return m_lorentzAngleTool;
+}
+
+} // End namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorDesign.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorDesign.cxx
new file mode 100755
index 000000000..83a4c3c03
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorDesign.cxx
@@ -0,0 +1,125 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDetectorDesign.cxx
+//   Implementation file for class SiDetectorDesign
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+// Version 3.0 05/05/2001 David Calvet
+// Modified: Grant Gorfine
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SiDetectorDesign.h"
+#include "TrackerReadoutGeometry/SiIntersect.h"
+
+namespace TrackerDD {
+// Constructor with parameters:
+SiDetectorDesign::SiDetectorDesign(double thickness,
+                                   bool phiSymmetric,
+                                   bool etaSymmetric,
+                                   bool depthSymmetric,
+                                   TrackerDD::CarrierType carrierType,
+                                   int readoutSide):
+    m_etaAxis(zAxis),
+    m_phiAxis(yAxis),
+    m_depthAxis(xAxis),
+    m_thickness(thickness),
+    m_carrierType(carrierType),
+    m_phiSymmetric(phiSymmetric),
+    m_etaSymmetric(etaSymmetric),
+    m_depthSymmetric(depthSymmetric),
+    m_readoutSidePosDepth(readoutSide > 0) {
+}
+
+// Constructor with axis parameters:
+SiDetectorDesign::SiDetectorDesign(double thickness,
+                                   bool phiSymmetric,
+                                   bool etaSymmetric,
+                                   bool depthSymmetric,
+                                   TrackerDD::CarrierType carrierType,
+                                   int readoutSide,
+                                   Axis stripDirection,
+                                   Axis thicknessDirection):
+    m_etaAxis(stripDirection),
+    m_depthAxis(thicknessDirection),
+    m_thickness(thickness),
+    m_carrierType(carrierType),
+    m_phiSymmetric(phiSymmetric),
+    m_etaSymmetric(etaSymmetric),
+    m_depthSymmetric(depthSymmetric),
+    m_readoutSidePosDepth(readoutSide > 0) {
+    if (stripDirection == thicknessDirection) {
+        throw std::runtime_error(
+                  "ERROR: SiDetectorDesign called with phi and thickness directions equal");
+    }
+    // phiAxis is "the other one"
+    m_phiAxis = static_cast<Axis> ((xAxis + yAxis + zAxis) - (stripDirection + thicknessDirection)); 
+}
+
+// Destructor:
+SiDetectorDesign::~SiDetectorDesign() {
+}
+
+SiIntersect SiDetectorDesign::inDetector(const SiLocalPosition &localPosition,
+                                         double phiTol, double etaTol) const {
+    double etaDist = 0;
+    double phiDist = 0;
+
+    distanceToDetectorEdge(localPosition, etaDist, phiDist);
+
+    SiIntersect state;
+
+    if (phiDist < -phiTol || etaDist < -etaTol) {
+        state.setOut();
+        return state;
+    }
+
+    if (phiDist > phiTol && etaDist > etaTol) {
+        state.setIn();
+        return state;
+    }
+
+    // Near boundary.
+    state.setNearBoundary();
+    return state;
+}
+
+void SiDetectorDesign::setSymmetry(bool phiSymmetric, bool etaSymmetric,
+                                   bool depthSymmetric) {
+    // Flags can be changed from true to false but not false to true.
+    if (m_phiSymmetric) {
+        m_phiSymmetric = phiSymmetric;
+    }
+    else if (phiSymmetric) {
+        std::cout <<
+            "SiDetectorDesign: WARNING! Attempt to allow swapping of xPhi axis direction ignored."
+                  << std::endl;
+    }
+
+    if (m_etaSymmetric) {
+        m_etaSymmetric = etaSymmetric;
+    }
+    else if (etaSymmetric) {
+        std::cout <<
+            "SiDetectorDesign: WARNING! Attempt to allow swapping of xEta axis direction ignored."
+                  << std::endl;
+    }
+
+    if (m_depthSymmetric) {
+        m_depthSymmetric = depthSymmetric;
+    }
+    else if (depthSymmetric) {
+        std::cout <<
+            "SiDetectorDesign: WARNING! Attempt to allow swapping of xDepth axis direction ignored."
+                  << std::endl;
+    }
+}
+
+DetectorShape SiDetectorDesign::shape() const {
+    // Default is Box.
+    return TrackerDD::Box;
+}
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElement.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElement.cxx
new file mode 100644
index 000000000..893845c56
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElement.cxx
@@ -0,0 +1,1015 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+/**
+ * @file SiDetectorElement.cxx
+ * Implementation file for class SiDetectorElement
+ * @author Grant Gorfine
+ * Based on version developed by David Calvet.
+ **/
+
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
+
+#include "FaserDetDescr/FaserDetectorID.h"
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
+#include "GeoModelKernel/GeoVFullPhysVol.h"
+#include "GeoModelUtilities/GeoAlignmentStore.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
+#include "TrackerReadoutGeometry/SCT_ModuleSideDesign.h"
+#include "TrackerReadoutGeometry/SiReadoutCellId.h"
+#include "TrkSurfaces/PlaneSurface.h"
+#include "TrkSurfaces/SurfaceBounds.h"
+
+#include "CLHEP/Geometry/Vector3D.h"
+#include "CLHEP/Units/PhysicalConstants.h" // for M_PI
+#include "CLHEP/Units/SystemOfUnits.h"
+#include "CLHEP/Vector/ThreeVector.h"
+
+#include <cassert>
+#include <cmath>
+#include <limits>
+
+namespace TrackerDD {
+  using Trk::distPhi;
+  using Trk::distEta;
+  using Trk::distDepth;
+
+  // Constructor with parameters:
+  SiDetectorElement::SiDetectorElement(const Identifier& id,
+                                       const SiDetectorDesign* design,
+                                       const GeoVFullPhysVol* geophysvol,
+                                       const SiCommonItems* commonItems,
+                                       const GeoAlignmentStore* geoAlignStore) :
+    TrkDetElementBase(geophysvol),
+    m_id(id),
+    m_design(design),
+    m_commonItems(commonItems),
+    m_nextInEta(nullptr),
+    m_prevInEta(nullptr),
+    m_nextInPhi(nullptr),
+    m_prevInPhi(nullptr),
+    m_otherSide(nullptr),
+    m_cacheValid(false),
+    m_firstTime(true),
+    m_stereoCacheValid(false),
+    m_isStereo(false),
+    m_mutex(),
+    m_surface{},
+    m_surfaces{},
+    m_geoAlignStore(geoAlignStore)
+    {
+      //The following are fixes for coverity bug 11955, uninitialized scalars:
+      const bool boolDefault(true);
+      m_depthDirection=boolDefault;
+      m_phiDirection=boolDefault;
+      m_etaDirection=boolDefault;
+      const double defaultMin(std::numeric_limits<double>::max());
+      const double defaultMax(std::numeric_limits<double>::lowest());
+      m_minZ=defaultMin;
+      m_maxZ=defaultMax;
+      m_minR=defaultMin;
+      m_maxR=defaultMax;
+      m_minPhi=defaultMin;
+      m_maxPhi=defaultMax;
+
+      m_hitEta = m_design->etaAxis();
+      m_hitPhi = m_design->phiAxis();
+      m_hitDepth = m_design->depthAxis();
+      ///
+  
+      commonConstructor();
+    }
+
+  void
+  SiDetectorElement::commonConstructor() 
+  {
+    if (!m_id.is_valid()) throw std::runtime_error("SiDetectorElement: Invalid identifier");
+    const FaserSCT_ID* sctId = dynamic_cast<const FaserSCT_ID*>(getIdHelper());
+    m_idHash = sctId->wafer_hash(m_id);
+    if (!m_idHash.is_valid()) throw std::runtime_error("SiDetectorElement: Unable to set IdentifierHash");
+
+    // Increase the reference count of the SiDetectorDesign objects.
+    m_design->ref();
+
+    // Increase the reference count of the SiCommonItems objects.
+    m_commonItems->ref();
+
+    // Should we reference count the geophysvol as well?
+
+  }
+
+
+  // Destructor:
+  SiDetectorElement::~SiDetectorElement()
+  {
+    // The design is reference counted so that it will not be deleted until the last element is deleted.
+    m_design->unref();
+
+    m_commonItems->unref();
+  }
+
+  /* 
+   * update cache 
+   * This is supposed to be called inside a block
+   * like
+   * std::lock_guard< ... > 
+   * if (!cacheValid) {
+   *  updateCache()
+   * }
+   */
+  void 
+  SiDetectorElement::updateCache() const
+  {
+    const GeoTrf::Transform3D& geoTransform = transformHit();
+
+    double radialShift = 0.;
+      
+    HepGeom::Point3D<double> centerGeoModel(radialShift, 0., 0.);
+    m_centerCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * centerGeoModel;
+    m_center = Amg::Vector3D(m_centerCLHEP[0], m_centerCLHEP[1], m_centerCLHEP[2]);
+
+    //
+    // Determine directions depth, eta and phi axis in reconstruction local frame
+    // ie depth away from interaction point
+    //    phi in direction of increasing phi
+    //    eta in direction of increasing z in barrel, and increasing r in endcap
+    //
+   
+    // depthAxis, phiAxis, and etaAxis are defined to be x,y,z respectively for all detectors for hit local frame.
+    // depthAxis, phiAxis, and etaAxis are defined to be z,x,y respectively for all detectors for reco local frame.
+    static const HepGeom::Vector3D<double> localAxes[3] = {
+      HepGeom::Vector3D<double>(1., 0., 0.),
+      HepGeom::Vector3D<double>(0., 1., 0.),
+      HepGeom::Vector3D<double>(0., 0., 1.)
+    };
+
+    static const HepGeom::Vector3D<double>& localRecoPhiAxis = localAxes[distPhi];     // Defined to be same as x axis
+    static const HepGeom::Vector3D<double>& localRecoEtaAxis = localAxes[distEta];     // Defined to be same as y axis
+    static const HepGeom::Vector3D<double>& localRecoDepthAxis = localAxes[distDepth]; // Defined to be same as z axis
+
+    // We only need to calculate the rough orientation once.
+    //For it to change would require extreme unrealistic misalignment changes.
+    if (m_firstTime) {
+      // Determine the unit vectors in global frame
+
+      const HepGeom::Vector3D<double>& geoModelPhiAxis = localAxes[m_hitPhi];
+      const HepGeom::Vector3D<double>& geoModelEtaAxis = localAxes[m_hitEta];
+      const HepGeom::Vector3D<double>& geoModelDepthAxis = localAxes[m_hitDepth];
+
+      HepGeom::Vector3D<double> globalDepthAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelDepthAxis);
+      HepGeom::Vector3D<double> globalPhiAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelPhiAxis);
+      HepGeom::Vector3D<double> globalEtaAxis(Amg::EigenTransformToCLHEP(geoTransform) * geoModelEtaAxis);
+
+      HepGeom::Vector3D<double> nominalEta { 1.0, 0.0, 0.0 };
+      HepGeom::Vector3D<double> nominalNormal { 0.0, 0.0, 1.0 };
+      HepGeom::Vector3D<double> nominalPhi { 0.0, 1.0, 0.0 };
+  
+      // In Faser, the etaAxis is along increasing x, and normal is in increasing z direction
+
+      // Determine if axes are to have their directions swapped.
+
+      //
+      // Depth axis.
+      //
+      double depthDir = globalDepthAxis.dot(nominalNormal);
+      m_depthDirection = true;
+      if (depthDir < 0.) {
+          m_depthDirection = false;
+      }
+      if (std::abs(depthDir) < 0.5) { // Check that it is in roughly the right direction.
+        ATH_MSG_ERROR("Orientation of local depth axis does not follow correct convention.");
+        // throw std::runtime_error("Orientation of local depth axis does not follow correct convention.");
+        m_depthDirection = true; // Don't swap.
+      }
+    
+      //
+      // Phi axis
+      //
+      double phiDir = globalPhiAxis.dot(nominalPhi);
+      m_phiDirection = true;
+      if (phiDir < 0.) {
+          m_phiDirection = false;
+      }    
+      if (std::abs(phiDir) < 0.5) { // Check that it is in roughly the right direction.
+        ATH_MSG_ERROR("Orientation of local xPhi axis does not follow correct convention.");
+        // throw std::runtime_error("Orientation of local xPhi axis does not follow correct convention.");
+        m_phiDirection = true; // Don't swap.
+      }
+    
+      //
+      // Eta axis
+      //
+      double etaDir = globalEtaAxis.dot(nominalEta);
+      m_etaDirection = true;
+      if (etaDir < 0.) {
+          m_etaDirection = false;
+      }
+      if (std::abs(etaDir) < 0.5) { // Check that it is in roughly the right direction.
+        ATH_MSG_ERROR("Orientation of local xEta axis does not follow correct convention.");
+        // throw std::runtime_error("Orientation of local xEta axis does not follow correct convention.");
+        m_etaDirection = true; // Don't swap
+      }   
+    } // end if (m_firstTime)
+  
+    m_transformCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * recoToHitTransformImpl();
+    m_transform = Amg::CLHEPTransformToEigen(m_transformCLHEP);
+  
+    // Check that local frame is right-handed. (ie transform has no reflection)
+    // This can be done by checking that the determinant is >0.
+    if (m_firstTime) { // Only need to check this once.
+      HepGeom::Transform3D& t = m_transformCLHEP;
+      double det = t(0,0) * (t(1,1)*t(2,2) - t(1,2)*t(2,1)) -
+                   t(0,1) * (t(1,0)*t(2,2) - t(1,2)*t(2,0)) +
+                   t(0,2) * (t(1,0)*t(2,1) - t(1,1)*t(2,0));
+      if (det < 0.) {
+          ATH_MSG_DEBUG("Local frame is left-handed, Swapping depth axis to make it right handed.");
+          m_depthDirection = !m_depthDirection;
+          m_transformCLHEP = Amg::EigenTransformToCLHEP(geoTransform) * recoToHitTransformImpl();
+          m_transform = Amg::CLHEPTransformToEigen(m_transformCLHEP);
+      }
+    } 
+  
+    // Initialize various cached members
+    // The unit vectors
+    HepGeom::Vector3D<double> normalCLHEP = m_transformCLHEP * localRecoDepthAxis;
+    m_normal = Amg::Vector3D(normalCLHEP[0], normalCLHEP[1], normalCLHEP[2]);
+  
+    m_phiAxisCLHEP = m_transformCLHEP * localRecoPhiAxis;
+    m_etaAxisCLHEP = m_transformCLHEP * localRecoEtaAxis;
+
+    m_phiAxis = Amg::Vector3D(m_phiAxisCLHEP[0], m_phiAxisCLHEP[1], m_phiAxisCLHEP[2]);
+    m_etaAxis = Amg::Vector3D(m_etaAxisCLHEP[0], m_etaAxisCLHEP[1], m_etaAxisCLHEP[2]);
+
+    getExtent(m_minR, m_maxR, m_minZ, m_maxZ, m_minPhi, m_maxPhi);
+
+    //Install the cache at the end
+    m_cacheValid.store(true);
+    if (m_firstTime) m_firstTime.store(false);
+  }
+
+  void
+  SiDetectorElement::determineStereo() const
+  {
+    // Assume m_mutex is already locked.
+
+    if (m_firstTime) updateCache();
+
+    if (m_otherSide) {
+      double sinStereoThis = std::abs(sinStereoImpl()); //Call the private impl method
+      double sinStereoOther = std::abs(m_otherSide->sinStereo());
+      if (sinStereoThis == sinStereoOther) {
+        // If they happend to be equal then set side0 as axial and side1 as stereo.
+        const FaserSCT_ID* sctId = dynamic_cast<const FaserSCT_ID*>(getIdHelper());
+        if (sctId) {
+          int side = sctId->side(m_id);
+          m_isStereo = (side == 1);
+        }
+      } else {
+        // set the stereo side as the one with largest absolute sinStereo.
+        m_isStereo = (sinStereoThis > sinStereoOther);
+      }
+    } else {
+      m_isStereo = false;
+    }
+
+    m_stereoCacheValid.store(true);
+  }
+
+  const GeoTrf::Transform3D&
+  SiDetectorElement::transformHit() const
+  {
+    if (m_geoAlignStore) {
+      const GeoTrf::Transform3D* ptrXf = m_geoAlignStore->getAbsPosition(getMaterialGeom());
+      if (ptrXf) return *ptrXf;
+    }
+    return getMaterialGeom()->getAbsoluteTransform();
+  }
+
+  const Amg::Transform3D&
+  SiDetectorElement::transform() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_transform;
+  }
+
+  const HepGeom::Transform3D&
+  SiDetectorElement::transformCLHEP() const
+  {
+    //stuff to get the CLHEP version of the local to global transform.
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_transformCLHEP;
+  }
+
+  const HepGeom::Transform3D 
+  SiDetectorElement::defTransformCLHEP() const
+  {
+    if (m_geoAlignStore) {
+      const GeoTrf::Transform3D* ptrXf = m_geoAlignStore->getDefAbsPosition(getMaterialGeom());
+      if (ptrXf) return Amg::EigenTransformToCLHEP(*ptrXf) * recoToHitTransform();
+    }
+    return Amg::EigenTransformToCLHEP(getMaterialGeom()->getDefAbsoluteTransform()) * recoToHitTransform();
+  }  
+   
+  const Amg::Transform3D 
+  SiDetectorElement::defTransform() const
+  {
+    HepGeom::Transform3D tmpTransform = defTransformCLHEP();
+    return Amg::CLHEPTransformToEigen(tmpTransform);
+  }
+
+  const HepGeom::Transform3D 
+  SiDetectorElement::recoToHitTransform() const
+  {
+    // Determine the reconstruction local (LocalPosition) to global transform.
+    if (m_firstTime) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (m_firstTime) updateCache();
+    }
+
+    return recoToHitTransformImpl();
+  }
+
+  const HepGeom::Transform3D 
+  SiDetectorElement::recoToHitTransformImpl() const
+  {
+    //        = transfromHit * hitLocal
+    //        = transformHit * recoToHitTransform * recoLocal
+    // recoToHitTransform takes recoLocal to hitLocal
+    // x,y,z -> y,z,x 
+    // equiv to a rotation around Y of 90 deg followed by a rotation around X of 90deg
+    // 
+    // recoToHit is static as it needs to be calculated once only.
+    // We use the HepGeom::Transform3D constructor which takes one coordinates system to another where the
+    // coordinate system is defined by it center and two axes.
+    // distPhi, distEta are the reco local axes and hitPhi and hitEta are the hit local axes.
+    // It assume phi, eta, depth makes a right handed system which is the case.
+    static const HepGeom::Vector3D<double> localAxes[3] = {
+      HepGeom::Vector3D<double>(1., 0., 0.),
+      HepGeom::Vector3D<double>(0., 1., 0.),
+      HepGeom::Vector3D<double>(0., 0., 1.)
+    };
+    //static 
+    
+    const HepGeom::Transform3D recoToHit(HepGeom::Point3D<double>(0., 0., 0.),
+                                         localAxes[distPhi],
+                                         localAxes[distEta],
+                                         HepGeom::Point3D<double>(0., 0., 0.),
+                                         localAxes[m_hitPhi],
+                                         localAxes[m_hitEta]);
+  
+    // Swap direction of axis as appropriate
+    CLHEP::Hep3Vector scale(1., 1., 1.);
+    if (!m_phiDirection)   scale[distPhi]   = -1.;
+    if (!m_etaDirection)   scale[distEta]   = -1.;
+    if (!m_depthDirection) scale[distDepth] = -1.;
+    return recoToHit * HepGeom::Scale3D(scale[0], scale[1], scale[2]);
+  }
+
+  const Amg::Transform3D&
+  SiDetectorElement::moduleTransform() const
+  {
+    return (isModuleFrame()) ? transform() : m_otherSide->transform();
+  }
+
+  Amg::Transform3D
+  SiDetectorElement::defModuleTransform() const
+  {
+    return (isModuleFrame()) ? defTransform() : m_otherSide->defTransform();
+  }  
+
+  // Take a transform in the local reconstruction and return it in the module frame
+  // For a given transform l in frame A. The equivalent transform in frame B is
+  //  B.inverse() * A * l * A.inverse() * B
+  // Here A is the local to global transform of the element and B is the local to global
+  // transform of the module.
+  // If we are already in the module frame then there is nothing to do, we just return the
+  // transform that is input. Otherwise we use the above formula.
+  Amg::Transform3D 
+  SiDetectorElement::localToModuleFrame(const Amg::Transform3D& localTransform) const
+  {
+    if (isModuleFrame()) {
+      return localTransform;
+    } else {
+      return m_otherSide->transform().inverse() * transform() * localTransform * transform().inverse() * m_otherSide->transform();
+    }
+  }
+
+  Amg::Transform3D 
+  SiDetectorElement::localToModuleTransform() const
+  {
+    if (isModuleFrame()) {
+      return Amg::Transform3D(); // Identity
+    } else {
+      return m_otherSide->transform().inverse() * transform();
+    }
+  }
+
+  bool 
+  SiDetectorElement::isModuleFrame() const
+  {
+    // The module frame is the axial side.
+    // NB isStereo returns false for the pixel and so
+    // isModuleFrame is always true for the pixel.
+
+    return !isStereo();
+  }
+
+
+  const Amg::Vector3D& 
+  SiDetectorElement::center() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_center;
+  }
+
+  const Amg::Vector3D&  
+  SiDetectorElement::normal() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_normal;
+  }
+
+  const HepGeom::Vector3D<double>& 
+  SiDetectorElement::etaAxisCLHEP() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_etaAxisCLHEP;
+  }
+
+  const HepGeom::Vector3D<double>& 
+  SiDetectorElement::phiAxisCLHEP() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_phiAxisCLHEP;
+  }
+
+  const Amg::Vector3D& 
+  SiDetectorElement::etaAxis() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_etaAxis;
+  }
+
+  const Amg::Vector3D& 
+  SiDetectorElement::phiAxis() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return m_phiAxis;
+  }
+
+  Amg::Vector2D
+  SiDetectorElement::hitLocalToLocal(double xEta, double xPhi) const  // Will change order to phi,eta
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    if (!m_etaDirection) xEta = -xEta;
+    if (!m_phiDirection) xPhi = -xPhi;
+    return Amg::Vector2D(xPhi, xEta);
+  }
+
+  HepGeom::Point3D<double>
+  SiDetectorElement::hitLocalToLocal3D(const HepGeom::Point3D<double>& hitPosition) const
+  {
+    // Equiv to transform().inverse * transformHit() * hitPosition
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    double xDepth = hitPosition[m_hitDepth];
+    double xPhi = hitPosition[m_hitPhi];
+    double xEta = hitPosition[m_hitEta];
+    if (!m_depthDirection) xDepth = -xDepth;
+    if (!m_phiDirection) xPhi = -xPhi;
+    if (!m_etaDirection) xEta = -xEta;
+    return HepGeom::Point3D<double>(xPhi, xEta, xDepth);
+  }
+
+  // compute sin(tilt angle) at center:
+  double SiDetectorElement::sinTilt() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    // Tilt is defined as the angle between a refVector and the sensor normal.
+    // In barrel refVector = unit vector radial.
+    // in endcap it is assumed there is no tilt.
+    // sinTilt = (refVector cross normal) . z
+
+    // Angle between normal and radial vector.
+    // HepGeom::Vector3D<double> refVector(m_center.x(), m_center.y(), 0);
+    // return (refVector.cross(m_normal)).z()/refVector.mag();
+    // or the equivalent
+    return (m_center.x() * m_normal.y() - m_center.y() * m_normal.x()) / m_center.perp();
+  }
+
+  double SiDetectorElement::sinTilt(const Amg::Vector2D& localPos) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    HepGeom::Point3D<double> point = globalPositionCLHEP(localPos);
+    return sinTilt(point);
+  }
+
+  double SiDetectorElement::sinTilt(const HepGeom::Point3D<double>& globalPos) const
+  { 
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    // It is assumed that the global position is already in the plane of the element.
+
+    // Angle between normal and radial vector.
+    //HepGeom::Vector3D<double> refVector(globalPos.x(), globalPos.y(), 0);
+    //return (refVector.cross(m_normal)).z()/refVector.mag();
+    // or the equivalent
+    return (globalPos.x() * m_normal.y() - globalPos.y() * m_normal.x()) / globalPos.perp();
+  }
+
+  double SiDetectorElement::sinStereo() const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return sinStereoImpl();
+  }
+
+  double SiDetectorElement::sinStereoImpl() const
+  {
+    // Stereo is the angle between a refVector and a vector along the strip/pixel in eta direction.
+    // I'm not sure how the sign should be defined. I've defined it here
+    // with rotation sense respect to normal,
+    // where normal is away from IP in barrel and in -ve z direction in endcap
+
+    // In Barrel refVector = unit vector along z axis,
+    // in endcap refVector = unit vector radial.
+    //
+    // sinStereo = (refVector cross stripAxis) . normal
+    //           = (refVector cross etaAxis) . normal
+    //           = refVector . (etaAxis cross normal)
+    //           = refVector . phiAxis  
+    //
+    // in Barrel we use
+    // sinStereo = refVector . phiAxis
+    //           = phiAxis.z()
+    //
+    // in endcap we use
+    // sinStereo = (refVector cross etaAxis) . normal
+    //           = -(center cross etaAxis) . zAxis
+    //           = (etaAxis cross center). z() 
+    double sinStereo = 0.;
+    sinStereo = m_phiAxis.z();
+    return sinStereo;
+  }
+
+  double SiDetectorElement::sinStereo(const Amg::Vector2D& localPos) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    HepGeom::Point3D<double> point=globalPositionCLHEP(localPos);
+    return sinStereoImpl(point);
+  }
+
+  double SiDetectorElement::sinStereo(const HepGeom::Point3D<double>& globalPos) const
+  {
+    if (!m_cacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_cacheValid) updateCache();
+    }
+
+    return sinStereoImpl(globalPos);
+  } 
+
+  double SiDetectorElement::sinStereoImpl(const HepGeom::Point3D<double>& globalPos) const
+  {
+    //
+    // sinStereo =  (refVector cross stripAxis) . normal
+    //
+    double sinStereo = 0.;
+    if (m_design->shape() != TrackerDD::Trapezoid) {
+      sinStereo = m_phiAxis.z();
+    } else { // trapezoid
+      assert (minWidth() != maxWidth());
+      double radius = width() * length() / (maxWidth() - minWidth());
+      HepGeom::Vector3D<double> stripAxis = radius * m_etaAxisCLHEP + globalPos - m_centerCLHEP;
+      sinStereo = (stripAxis.x() * m_normal.y() - stripAxis.y() * m_normal.x()) / stripAxis.mag();
+    }
+    return sinStereo;
+  }
+
+  bool 
+  SiDetectorElement::isStereo() const 
+  {
+    if (!m_stereoCacheValid) {
+      std::lock_guard<std::mutex> lock(m_mutex);
+      if (!m_stereoCacheValid) {
+        determineStereo();
+      }
+    }
+
+    return m_isStereo;
+  }
+
+
+  double
+  SiDetectorElement::sinStereoLocal(const Amg::Vector2D& localPos) const
+  {
+    // The equation below will work for rectangle detectors as well in which 
+    // case it will return 0. But we return zero immediately as there is no point doing the calculation.
+    if (m_design->shape() == TrackerDD::Box) return 0.;
+    double oneOverRadius = (maxWidth() - minWidth()) / (width() * length());
+    double x = localPos[distPhi];
+    double y = localPos[distEta];
+    return -x*oneOverRadius / sqrt( (1+y*oneOverRadius)*(1+y*oneOverRadius) + x*oneOverRadius*x*oneOverRadius );
+  }
+
+  double
+  SiDetectorElement::sinStereoLocal(const HepGeom::Point3D<double>& globalPos) const
+  {
+    return sinStereoLocal(localPosition(globalPos));
+  }
+
+  // Special method for SCT to retrieve the two ends of a "strip"
+  std::pair<Amg::Vector3D,Amg::Vector3D> SiDetectorElement::endsOfStrip(const Amg::Vector2D& position) const
+  {
+    const std::pair<Amg::Vector2D,Amg::Vector2D> localEnds=
+      m_design->endsOfStrip(position);
+    return std::pair<Amg::Vector3D,Amg::Vector3D >(globalPosition(localEnds.first),
+                                                   globalPosition(localEnds.second));
+  }
+
+  Trk::Surface& 
+  SiDetectorElement::surface()
+  {
+    if (not m_surface) m_surface.set(std::make_unique<Trk::PlaneSurface>(*this));
+    return *m_surface;
+  }
+  
+  const Trk::Surface& 
+  SiDetectorElement::surface() const
+  {
+    if (not m_surface) m_surface.set(std::make_unique<Trk::PlaneSurface>(*this));
+    return *m_surface;
+  }
+  
+  const std::vector<const Trk::Surface*>& SiDetectorElement::surfaces() const 
+  {
+    std::lock_guard<std::mutex> lock(m_mutex);
+    if (!m_surfaces.size()) {
+      // get this surface
+      m_surfaces.push_back(&surface());
+      // get the other side surface
+      if (otherSide()) {
+        m_surfaces.push_back(&(otherSide()->surface()));
+      }
+    }
+    // return the surfaces
+    return m_surfaces;
+  }  
+  
+  const Trk::SurfaceBounds& 
+  SiDetectorElement::bounds() const
+  {
+    return m_design->bounds();
+  }
+  
+  // Get min/max or r, z,and phi
+  // helper method only to be used for the cache construction
+  // i.e inside updateCache
+  void SiDetectorElement::getExtent(double& rMin, double& rMax, 
+                                    double& zMin, double& zMax,
+                                    double& phiMin, double& phiMax) const
+  {
+    HepGeom::Point3D<double> corners[4];
+    getCorners(corners);
+
+    bool first = true;
+
+    double phiOffset = 0.;
+
+    double radialShift = 0.;
+    const HepGeom::Transform3D rShift = HepGeom::TranslateX3D(radialShift);//in local frame, radius is x
+
+    for (int i = 0; i < 4; i++) {
+
+      // m_tranform is already there as  part of the cache construction
+      // This method seems to be used only as a helper for updateCache
+      HepGeom::Point3D<double> globalPoint = m_transformCLHEP * corners[i];
+
+      double rPoint = globalPoint.perp();
+      double zPoint = globalPoint.z();
+      double phiPoint = globalPoint.phi();
+    
+      // Use first point to initializa min/max values.
+      if (first) {
+
+        // Put phi in a range so that we are not near -180/+180 division.
+        // Do this by adding an offset if phi > 90 CLHEP::deg or < -90 CLHEP::deg. 
+        // This offset is later removed.
+        if (phiPoint < -0.5 * M_PI) {
+          phiOffset = -0.5 * M_PI;
+        } else if (phiPoint > 0.5 * M_PI) {
+          phiOffset = 0.5 * M_PI;
+        }
+        phiMin = phiMax = phiPoint - phiOffset;
+        rMin = rMax = rPoint;
+        zMin = zMax = zPoint;
+
+      } else {
+        phiPoint -= phiOffset;
+        // put phi back in -M_PI < phi < +M_PI range
+        if (phiPoint < -M_PI) phiPoint += 2. * M_PI;
+        if (phiPoint > M_PI)  phiPoint -= 2. * M_PI;
+        phiMin = std::min(phiMin, phiPoint);
+        phiMax = std::max(phiMax, phiPoint);
+        rMin = std::min(rMin, rPoint);
+        rMax = std::max(rMax, rPoint);
+        zMin = std::min(zMin, zPoint);
+        zMax = std::max(zMax, zPoint);
+      }
+      first = false;
+    }
+
+    // put phi back in -M_PI < phi < +M_PI range
+    phiMin += phiOffset;
+    phiMax += phiOffset;
+    if (phiMin < -M_PI) phiMin += 2. * M_PI;
+    if (phiMin >  M_PI) phiMin -= 2. * M_PI;
+    if (phiMax < -M_PI) phiMax += 2. * M_PI;
+    if (phiMax >  M_PI) phiMax -= 2. * M_PI;
+
+  }
+
+  // Get eta/phi extent. Returns min/max eta and phi and r (for barrel)
+  // or z (for endcap) Takes as input the vertex spread in z (+-deltaZ).
+  // Gets 4 corners of the sensor and calculates eta phi for each corner
+  // for both +/- vertex spread.  The returned phi is between -M_PI and M_PI
+  // with the direction minPhi to maxPhi always in the positive sense,
+  // so if the element extends across the -180/180 boundary then minPhi will
+  // be greater than maxPhi.
+  // void SiDetectorElement::getEtaPhiRegion(double deltaZ, double& etaMin, double& etaMax, double& phiMin, 
+  //                                         double& phiMax, double& rz) const
+  // {
+  //   if (!m_cacheValid) {
+  //     std::lock_guard<std::mutex> lock(m_mutex);
+  //     if (!m_cacheValid) updateCache();
+  //   }
+
+  //   HepGeom::Point3D<double> corners[4];
+  //   getCorners(corners);
+
+  //   bool first = true;
+
+  //   double phiOffset = 0.;
+
+  //   for (int i = 0; i < 4; i++) {
+  //     double etaMinPoint = 0.;
+  //     double etaMaxPoint = 0.;
+  //     double phiPoint = 0.;
+
+  //     // Get the eta phi value for this corner.
+  //     getEtaPhiPoint(corners[i], deltaZ, etaMinPoint, etaMaxPoint, phiPoint);
+
+  //     if (first) { // Use the first point to initialize the min/max values.
+
+  //       // Put phi in a range so that we are not near -180/+180 division.
+  //       // Do this by adding an offset if phi > 90 CLHEP::deg or < -90 CLHEP::deg. 
+  //       // This offset is later removed.
+  //       if (phiPoint < -0.5 * M_PI) {
+  //         phiOffset = -0.5 * M_PI;
+  //       } else if  (phiPoint > 0.5 * M_PI) {
+  //         phiOffset = 0.5 * M_PI;
+  //       }
+  //       phiMin = phiMax = phiPoint - phiOffset;
+  //       etaMin = etaMinPoint;
+  //       etaMax = etaMaxPoint;
+  //     } else {
+  //       phiPoint -= phiOffset;
+  //       // put phi back in -M_PI < phi < +M_PI range
+  //       if (phiPoint < -M_PI) phiPoint += 2. * M_PI;
+  //       if (phiPoint >  M_PI) phiPoint -= 2. * M_PI;
+  //       phiMin = std::min(phiMin, phiPoint);
+  //       phiMax = std::max(phiMax, phiPoint);
+  //       etaMin = std::min(etaMin, etaMinPoint);
+  //       etaMax = std::max(etaMax, etaMaxPoint);
+  //     }
+  //     first = false;
+  //   }
+
+  //   // put phi back in -M_PI < phi < +M_PI range
+  //   phiMin += phiOffset;
+  //   phiMax += phiOffset;
+  //   if (phiMin < -M_PI) phiMin += 2. * M_PI;
+  //   if (phiMin >  M_PI) phiMin -= 2. * M_PI;
+  //   if (phiMax < -M_PI) phiMax += 2. * M_PI;
+  //   if (phiMax >  M_PI) phiMax -= 2. * M_PI;
+
+  //   // Calculate rz = r (barrel) or z (endcap)
+  //   // Use center of sensor ((0,0,0) in local coordinates) for determining this.
+  //   //  HepGeom::Point3D<double> globalCenter = globalPosition(HepGeom::Point3D<double>(0,0,0));
+  //   rz = center().perp(); // r
+  // }
+
+  // // Gets eta phi for a point given in local coordinates. deltaZ is specified to
+  // // account for the vertex spread. phi is independent of this vertex
+  // // spread. etaMax will correspond to zMin (-deltaZ) and etaMin will
+  // // correspond to zMax (+deltaZ).
+  // void SiDetectorElement::getEtaPhiPoint(const HepGeom::Point3D<double>&  point, double deltaZ, 
+  //                                        double& etaMin, double& etaMax, double& phi) const
+  // {
+  //   // Get the point in global coordinates.
+  //   HepGeom::Point3D<double> globalPoint = globalPosition(point);
+
+  //   double r = globalPoint.perp();
+  //   double z = globalPoint.z();
+  
+  //   double thetaMin = atan2(r,(z + deltaZ));
+  //   etaMax = -log(tan(0.5 * thetaMin));
+  //   double thetaMax = atan2(r,(z - deltaZ));
+  //   etaMin = -log(tan(0.5 * thetaMax));
+  
+  //   phi = globalPoint.phi();
+  // }
+
+  void SiDetectorElement::getCorners(HepGeom::Point3D<double>* corners) const
+  {
+    // This makes the assumption that the forward SCT detectors are orientated such that 
+    // the positive etaAxis corresponds to the top of the detector where the width is largest.
+    // This is currently always the case.
+    // For the SCT barrel and pixel detectors minWidth and maxWidth are the same and so should 
+    // work for all orientations.
+
+    double minWidth = m_design->minWidth();
+    double maxWidth = m_design->maxWidth();
+    double length   = m_design->length();
+  
+    // Lower left
+    corners[0][distPhi] = -0.5 * minWidth;
+    corners[0][distEta] = -0.5 * length;
+    corners[0][distDepth] = 0.;
+
+    // Lower right
+    corners[1][distPhi] =  0.5 * minWidth;
+    corners[1][distEta] = -0.5 * length;
+    corners[1][distDepth] = 0.;
+
+    // Upper Right
+    corners[2][distPhi] = 0.5 * maxWidth;
+    corners[2][distEta] = 0.5 * length;
+    corners[2][distDepth] = 0.;
+
+    // Upper left
+    corners[3][distPhi] = -0.5 * maxWidth;
+    corners[3][distEta] =  0.5 * length;
+    corners[3][distDepth] = 0.;
+  }
+
+  SiIntersect
+  SiDetectorElement::inDetector(const Amg::Vector2D& localPosition, 
+                                double phiTol, double etaTol) const
+  {
+    return m_design->inDetector(localPosition, phiTol, etaTol);
+  }
+
+  
+  SiIntersect 
+  SiDetectorElement::inDetector(const HepGeom::Point3D<double>& globalPosition, double phiTol, double etaTol) const
+  {
+    return m_design->inDetector(localPosition(globalPosition), phiTol, etaTol);
+  }
+
+  bool 
+  SiDetectorElement::nearBondGap(const Amg::Vector2D& localPosition, double etaTol) const
+  {
+    return m_design->nearBondGap(localPosition, etaTol);
+  }
+
+  bool
+  SiDetectorElement::nearBondGap(const HepGeom::Point3D<double>& globalPosition, double etaTol) const
+  {
+    return m_design->nearBondGap(localPosition(globalPosition), etaTol);
+  }  
+
+  Amg::Vector2D
+  SiDetectorElement::rawLocalPositionOfCell(const SiCellId& cellId) const
+  {
+    return m_design->localPositionOfCell(cellId);
+  }
+
+  Amg::Vector2D
+  SiDetectorElement::rawLocalPositionOfCell(const Identifier& id) const
+  {
+    SiCellId cellId = cellIdFromIdentifier(id);
+    return m_design->localPositionOfCell(cellId);
+  }
+
+  int 
+  SiDetectorElement::numberOfConnectedCells(const SiCellId cellId) const
+  {
+    SiReadoutCellId readoutId = m_design->readoutIdOfCell(cellId);
+    return m_design->numberOfConnectedCells(readoutId);
+  }
+
+  SiCellId 
+  SiDetectorElement::connectedCell(const SiCellId cellId, int number) const
+  {
+    SiReadoutCellId readoutId = m_design->readoutIdOfCell(cellId);
+    return m_design->connectedCell(readoutId, number);
+  }
+
+
+  SiCellId 
+  SiDetectorElement::cellIdOfPosition(const Amg::Vector2D& localPosition) const
+  {
+    return m_design->cellIdOfPosition(localPosition);
+  }
+
+  Identifier
+  SiDetectorElement::identifierOfPosition(const Amg::Vector2D& localPosition) const
+  {
+    SiCellId cellId = m_design->cellIdOfPosition(localPosition);
+    return identifierFromCellId(cellId);
+  }
+
+  Identifier 
+  SiDetectorElement::identifierFromCellId(const SiCellId& cellId) const
+  {
+    Identifier id; // Will be initialized in an invalid state.
+
+    // If something fails it returns the id in an invalid state.
+
+    if (cellId.isValid()) {
+
+      const FaserSCT_ID* sctIdHelper = dynamic_cast<const FaserSCT_ID*>(getIdHelper());
+      if (sctIdHelper) {
+        id = sctIdHelper->strip_id(m_id, cellId.strip());
+      }
+    }
+    return id;
+  }
+
+  SiCellId   
+  SiDetectorElement::cellIdFromIdentifier(const Identifier& identifier) const
+  {
+    SiCellId cellId; // Initialized in invalid state.
+
+    // If something fails it returns the cellId in an invalid state.
+
+    if (identifier.is_valid()) {
+  
+      const FaserSCT_ID* sctIdHelper = dynamic_cast<const FaserSCT_ID*>(getIdHelper());
+      if (sctIdHelper) {
+        cellId =  SiCellId(sctIdHelper->strip(identifier));
+      }
+    }  
+    return cellId;
+  }
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElementCollection.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElementCollection.cxx
new file mode 100644
index 000000000..9f8d85b65
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorElementCollection.cxx
@@ -0,0 +1,19 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/SiDetectorElementCollection.h"
+
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
+#include "Identifier/IdentifierHash.h"
+
+TrackerDD::SiDetectorElementCollection::~SiDetectorElementCollection() {
+  for (TrackerDD::SiDetectorElement* ele: *this) delete ele;
+}
+
+const TrackerDD::SiDetectorElement*
+TrackerDD::SiDetectorElementCollection::getDetectorElement(const IdentifierHash& hash) const {
+  const unsigned int value{hash.value()};
+  if (this->size()<=value) return nullptr;
+  return this->at(value);  
+}
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorManager.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorManager.cxx
new file mode 100755
index 000000000..997b68754
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDetectorManager.cxx
@@ -0,0 +1,149 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#include "GeoPrimitives/CLHEPtoEigenConverter.h"
+
+#include "TrackerReadoutGeometry/SiDetectorManager.h"
+#include "FaserDetDescr/FaserDetectorID.h"
+#include "IdDictDetDescr/IdDictManager.h"
+#include "StoreGate/StoreGateSvc.h"
+
+#include "GeoModelKernel/GeoXF.h"
+#include "GeoGenericFunctions/Variable.h"
+#include "GeoModelKernel/GeoAlignableTransform.h"
+#include "DetDescrConditions/AlignableTransformContainer.h"
+#include "TrackerReadoutGeometry/SiDetectorElementCollection.h"
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
+#include "TrackerReadoutGeometry/ExtendedAlignableTransform.h"
+
+#include <iostream>
+
+namespace TrackerDD
+{
+
+    SiDetectorManager::SiDetectorManager(StoreGateSvc * detStore, const std::string & name)
+        : TrackerDetectorManager(detStore, name)
+    {
+  // Add default folder
+        // addFolder("/Tracker/Align");
+    }
+
+    const std::string& SiDetectorManager::tag() const
+    {
+        return m_tag;
+    }
+
+    void SiDetectorManager::invalidateAll() const
+    {
+        for (SiDetectorElementCollection::const_iterator element_iter = getDetectorElementBegin();
+        element_iter != getDetectorElementEnd();
+        ++element_iter) {
+
+            if (*element_iter) {
+                (*element_iter)->invalidate();
+            }
+        }
+    }
+
+    void SiDetectorManager::updateAll() const
+    {
+        for (SiDetectorElementCollection::const_iterator element_iter = getDetectorElementBegin();
+        element_iter != getDetectorElementEnd();
+        ++element_iter) {
+            if (*element_iter) {
+                (*element_iter)->setAllCaches();
+            }
+        }
+    }
+
+    bool SiDetectorManager::setAlignableTransformLocalDelta(ExtendedAlignableTransform * extXF, 
+                                                            const Amg::Transform3D & localToGlobalXF,
+                                                            const Amg::Transform3D & delta,
+                                                            GeoVAlignmentStore* alignStore) const
+    {
+        // ATTENTION -------------------------------------------------------- (A.S.)
+        // CLHEP < -- > AMG interface method
+        
+        // Sets the alignable transform delta when the supplied delta is in the local
+        // reconstruction frame
+        
+        // If the default transform to the local recostruction frame is
+        // T = A*B*C*D*E
+        // and the alignable transform is C with delta c and the delat in the local frame is l, then
+        // A*B*C*c*D*E = A*B*C*D*E*l
+        //  c = (D*E) * l * (D*E).inverse()
+        //  c = (A*B*C).inverse * T * l * T.inverse() * (A*B*C) 
+        
+        // To get default transform up and including the alignable transform,
+        // we assume the next volume down is a fullphys volume and so its
+        // transform is the transform we want (ie A*B*C in the above example).
+
+        if (!extXF) return false;
+
+        const GeoVFullPhysVol* child = extXF->child();
+        if (child && extXF->alignableTransform()) {
+            // the definitiv absolut transform is in CLHEP -> do the calculation in CLHEP
+            const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform(alignStore);
+            // calucluate the corrected delta according to the formula above
+            GeoTrf::Transform3D correctedDelta = transform.inverse()*localToGlobalXF      // (A*B*C).inverse() * T
+	                                         * delta                                  // l
+                                                 * localToGlobalXF.inverse() * transform; // T.inverse() * (A*B*C)
+            extXF->alignableTransform()->setDelta(correctedDelta, alignStore);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    bool SiDetectorManager::setAlignableTransformGlobalDelta(ExtendedAlignableTransform * extXF, 
+                                                             const Amg::Transform3D& delta,
+                                                             GeoVAlignmentStore* alignStore) const {
+        // ATTENTION -------------------------------------------------------- (A.S.)
+        // CLHEP < -- > AMG interface method
+        
+        // Sets the alignable transform delta when the supplied delta is in the global frame.
+        
+        // If the default transform down to the alignable transform is
+        // T = A*B*C
+        // and the alignable transform is C with delta c and the delta in the global frame is g, then
+        // A*B*C*c = g*A*B*C
+        // T*c = g*T
+        //  c = T.inverse() * g * T
+        
+        // To get default transform up and including the alignable transform,
+        // we assume the next volume down is a fullphys volume and so its
+        // transform is the transform we want (ie T=A*B*C in the above example).
+
+
+        if (!extXF) return false;
+
+        const GeoVFullPhysVol * child = extXF->child();
+        if (child && extXF->alignableTransform()) {
+            // do the calculation in CLHEP  
+            const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform(alignStore);
+            extXF->alignableTransform()->setDelta(transform.inverse() * delta * transform, alignStore);
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    void SiDetectorManager::addDesign(const SiDetectorDesign * design)
+    {
+        m_designs.push_back(design);
+    }
+
+    int SiDetectorManager::numDesigns() const
+    {
+        return m_designs.size();
+    }
+
+
+    const SiDetectorDesign* SiDetectorManager::getDesign(int i) const
+    {
+        return m_designs[i];
+    }
+
+}// namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDiodesParameters.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDiodesParameters.cxx
new file mode 100755
index 000000000..d8dd514a8
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiDiodesParameters.cxx
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiDiodesParameters.cxx
+//   Implementation file for class SiDiodesParameters
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+// Version 1.0 14/08/2001 David Calvet
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SiDiodesParameters.h"
+
+namespace TrackerDD {
+
+// Implicit constructor:
+SiDiodesParameters::SiDiodesParameters() :
+  m_centre(),
+  m_width()
+{}
+
+// Copy constructor:
+SiDiodesParameters::SiDiodesParameters(const SiDiodesParameters &parameters) :
+  m_centre(parameters.m_centre),
+  m_width(parameters.m_width)
+{}
+
+// Constructor with parameters:
+SiDiodesParameters::SiDiodesParameters(const SiLocalPosition &centre,
+				       const SiLocalPosition &width) :
+  m_centre(centre),
+  m_width(width)
+{}
+
+// Assignment operator:
+SiDiodesParameters &SiDiodesParameters::operator=(const SiDiodesParameters &parameters)
+{
+  if (this!=&parameters) {
+    m_centre=parameters.m_centre;
+    m_width=parameters.m_width;
+  } else {}
+  return *this;
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiLocalPosition.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiLocalPosition.cxx
new file mode 100755
index 000000000..9ddee6dd0
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiLocalPosition.cxx
@@ -0,0 +1,100 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+///////////////////////////////////////////////////////////////////
+// SiLocalPosition.cxx
+//   Implementation file for class SiLocalPosition
+///////////////////////////////////////////////////////////////////
+// (c) ATLAS Detector software
+///////////////////////////////////////////////////////////////////
+// Version 2.1 01/08/2001 David Calvet
+///////////////////////////////////////////////////////////////////
+
+#include "TrackerReadoutGeometry/SiLocalPosition.h"
+
+namespace TrackerDD {
+
+// Default constructor:
+SiLocalPosition::SiLocalPosition() :
+  m_xEta(0),
+  m_xPhi(0),
+  m_xDepth(0)
+{}
+
+
+
+// Constructor with parameters:
+SiLocalPosition::SiLocalPosition(const double xEta,const double xPhi,
+				 const double xDepth) :
+  m_xEta(xEta),
+  m_xPhi(xPhi),
+  m_xDepth(xDepth)
+{}
+
+SiLocalPosition::SiLocalPosition(const Amg::Vector2D &position)
+  : m_xEta(position[Trk::distEta]),
+    m_xPhi(position[Trk::distPhi]),
+    m_xDepth(0)
+{}
+  
+
+SiLocalPosition::operator Amg::Vector2D(void) const
+{
+  return Amg::Vector2D(m_xPhi, m_xEta);
+}
+
+
+
+// addition of positions:
+SiLocalPosition &SiLocalPosition::operator+=(const SiLocalPosition &position)
+{
+  m_xEta+=position.m_xEta;
+  m_xPhi+=position.m_xPhi;
+  m_xDepth+=position.m_xDepth;  
+  return *this;
+}
+
+// scaling:
+SiLocalPosition &SiLocalPosition::operator*=(const double factor)
+{
+  m_xEta*=factor;
+  m_xPhi*=factor;
+  m_xDepth*=factor;
+  return *this;
+}
+
+// scaling:
+SiLocalPosition &SiLocalPosition::operator/=(const double factor)
+{
+  if (0!=factor) {
+    m_xEta/=factor;
+    m_xPhi/=factor;
+    m_xDepth/=factor;
+  } else {}
+  return *this;
+}
+
+SiLocalPosition operator+(const SiLocalPosition &position1,
+			  const SiLocalPosition &position2)
+{
+  SiLocalPosition result(position1);
+  result+=position2;
+  return result;
+}
+
+SiLocalPosition operator*(const SiLocalPosition &position,const double factor)
+{
+  SiLocalPosition result(position);
+  result*=factor;
+  return result;
+}
+
+SiLocalPosition operator/(const SiLocalPosition &position,const double factor)
+{
+  SiLocalPosition result(position);
+  result/=factor;
+  return result;
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiNumerology.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiNumerology.cxx
new file mode 100644
index 000000000..180f901c6
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/SiNumerology.cxx
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/SiNumerology.h"
+
+
+namespace TrackerDD {
+
+SiNumerology::SiNumerology()
+  : m_numLayers(0),
+    m_maxPhiCells(0),
+    m_maxNumBarrelEta(0),
+    m_maxNumBarrelPhiModules(0)
+{}
+  
+
+void SiNumerology::setNumLayers(int nLayers)
+{
+  m_phiModulesForLayer.resize(nLayers);
+  m_etaModulesForLayer.resize(nLayers);
+  m_numLayers = nLayers;
+}
+
+void SiNumerology::setNumPhiModulesForLayer(int layer, int nPhiModules)
+{
+  m_phiModulesForLayer[layer] = nPhiModules;      
+  m_maxNumBarrelPhiModules = std::max(m_maxNumBarrelPhiModules, nPhiModules);
+}
+
+void SiNumerology::setNumEtaModulesForLayer(int layer, int nEtaModules)
+{
+  m_etaModulesForLayer[layer] = nEtaModules;
+  m_maxNumBarrelEta = std::max(m_maxNumBarrelEta, nEtaModules);
+}
+
+void SiNumerology::setMaxNumPhiCells(int cells)
+{
+  m_maxPhiCells = std::max(m_maxPhiCells,cells);
+}
+
+void SiNumerology::addBarrel(int id)
+{
+  m_barrelIds.push_back(id);
+}
+	
+} // End namespace
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/TrackerDetectorManager.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/TrackerDetectorManager.cxx
new file mode 100755
index 000000000..9395182dc
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/TrackerDetectorManager.cxx
@@ -0,0 +1,423 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+
+#include "TrackerReadoutGeometry/TrackerDetectorManager.h"
+
+#include "StoreGate/StoreGateSvc.h"
+#include "DetDescrConditions/AlignableTransform.h"
+#include "FaserDetDescr/FaserDetectorID.h"
+#include "GeoPrimitives/CLHEPtoEigenConverter.h" 
+#include "AthenaPoolUtilities/CondAttrListCollection.h"
+#include "AthenaBaseComps/AthMsgStreamMacros.h"
+
+#include <map>
+
+namespace TrackerDD 
+{
+
+    TrackerDetectorManager::TrackerDetectorManager(StoreGateSvc * detStore, const std::string & name)
+        : m_alignfoldertype{none},m_detStore(detStore), 
+        m_msg(name+"DetectorManager")
+    {
+        setName(name);
+    }
+
+  // Destructor
+    TrackerDetectorManager::~TrackerDetectorManager() 
+        {}
+
+
+    const Version& TrackerDetectorManager::getVersion() const
+    {
+        return m_version;
+    }
+
+    const std::string& TrackerDetectorManager::getLayout() const
+    {
+        return m_version.layout();
+    }
+
+    void TrackerDetectorManager::setVersion(const Version & version)
+    {
+        m_version = version;
+    }
+
+    void TrackerDetectorManager::addChannel(const std::string & key, int level, FrameType frame)
+    {
+        std::string frameStr = "other";
+        if (frame == TrackerDD::global) frameStr = "global";
+        if (frame == TrackerDD::local) frameStr  = "local";
+        ATH_MSG_INFO("Registering alignment channel with key " << key << ", level " << level 
+                     << ", with frame " << frameStr << ".");
+        m_keys[key] = LevelInfo(level, frame); 
+    }
+
+    void TrackerDetectorManager::addFolder(const std::string & key)
+    {
+        m_folders.insert(key);
+    }
+
+    void TrackerDetectorManager::addSpecialFolder(const std::string & key)
+    {
+        m_specialFolders.insert(key);
+    }
+
+    void TrackerDetectorManager::addGlobalFolder(const std::string & key)
+    {
+        m_globalFolders.insert(key);
+    }
+
+    void TrackerDetectorManager::addAlignFolderType(const AlignFolderType  alignfolder)
+    {
+        m_alignfoldertype = alignfolder;
+    }
+
+  // Return the level in the hierarchy (user defined) corresponding to the key.
+    const TrackerDetectorManager::LevelInfo& TrackerDetectorManager::getLevel(const std::string & key) const 
+    {
+        std::map<std::string, LevelInfo>::const_iterator iter;
+        iter = m_keys.find(key);
+        if (iter == m_keys.end()) return s_invalidLevel;
+        return iter->second;
+    }
+
+    StatusCode TrackerDetectorManager::align( IOVSVC_CALLBACK_ARGS_P(I,keys) ) const
+    {
+
+        (void) I; // avoid warning about unused parameter 
+
+        ATH_MSG_DEBUG("AlignmentCallback called ");
+
+        if (!getIdHelper()) return StatusCode::SUCCESS;
+
+        bool alignmentChange = false;
+        const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
+
+        // If dummy arguments
+        if (keys.empty()) {
+
+
+            // New global aligment folders should be processed first
+            for (std::set<std::string>::const_iterator iterFolders = m_globalFolders.begin();
+            iterFolders != m_globalFolders.end();
+            ++iterFolders) {
+
+                try {
+                    bool status = processGlobalAlignmentContainer(*iterFolders);
+                    alignmentChange = (alignmentChange || status);
+                } catch(std::runtime_error& err) {
+                    // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
+                  ATH_MSG_FATAL(err.what());
+                  return StatusCode::FAILURE;
+                }
+            }
+
+            // Regular alignments. Loop through folder keys. Normally only one.
+            for (std::set<std::string>::const_iterator iterFolders = m_folders.begin();
+            iterFolders != m_folders.end();
+            ++iterFolders) {
+
+                try {
+                    bool status = processAlignmentContainer(*iterFolders);
+                    alignmentChange = (alignmentChange || status);
+                }
+                catch(std::runtime_error& err) {
+                    // alignments should always exist so we return fatal if we could not process the alignment for this key
+                    ATH_MSG_FATAL(err.what());
+                    return StatusCode::FAILURE;
+                }
+            }  
+            // Detector specific aligments
+            for (std::set<std::string>::const_iterator iterFolders = m_specialFolders.begin();
+            iterFolders != m_specialFolders.end();
+            ++iterFolders) {
+                try {
+                    bool status = processSpecialAlignment(*iterFolders, aligninfo.AlignFolder());
+                    alignmentChange = (alignmentChange || status);
+                } catch(std::runtime_error& err) {
+                    // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
+                    ATH_MSG_INFO(err.what());
+                    // We continue as detector specific aligments don't always exist.
+                }
+            }
+
+        } else {
+            // Loop over all the keys.
+            for (std::list<std::string>::const_iterator itr=keys.begin(); itr!=keys.end(); ++itr) {
+
+                const std::string & key = *itr;
+
+                ATH_MSG_DEBUG(" Processing call back key  " << key);
+
+                if ( m_globalFolders.find(key) != m_globalFolders.end() ) { 
+
+                    try {
+                        // New global alignemnts
+                        bool status = processGlobalAlignmentContainer(key);
+                        alignmentChange = (alignmentChange || status);
+                    } catch(std::runtime_error& err) {
+                        // alignments should always exist so we return fatal if we could not process the alignment for this key
+                        ATH_MSG_FATAL(err.what());
+                        return StatusCode::FAILURE;
+                    }
+
+                } else if ( m_folders.find(key) != m_folders.end() ) { 
+
+                    try {
+                        // Regular alignemnts
+                        bool status = processAlignmentContainer(key);
+                        alignmentChange = (alignmentChange || status);
+                    } catch(std::runtime_error& err) {
+                        // alignments should always exist so we return fatal if we could not process the alignment for this key
+                        ATH_MSG_FATAL(err.what());
+                        return StatusCode::FAILURE;
+                    }
+
+                } else if ( m_specialFolders.find(key) !=  m_specialFolders.end() ) {
+                    try {
+                        // Detector specific alignments
+                        bool status = processSpecialAlignment(key, aligninfo.AlignFolder());
+                        alignmentChange = (alignmentChange || status);
+                    } 
+                    catch(std::runtime_error& err) {
+                        // Should always exist if the folder was requested so we return fatal if we could not process the alignment for this key
+                        ATH_MSG_FATAL(err.what());
+                        return StatusCode::FAILURE;
+                    }
+                } else {
+                    // Should not be any other keys specified in call back.
+                    ATH_MSG_ERROR("Unrecognized key in call back.");
+                    return  StatusCode::RECOVERABLE;
+                }
+            }
+        }
+
+    // We invalidate all the elements if at least one alignment changed.
+        if (alignmentChange) {
+            invalidateAll();
+        }    
+
+        return StatusCode::SUCCESS;
+    }
+
+    StatusCode TrackerDetectorManager::align(const RawAlignmentObjects& alignObjects, GeoVAlignmentStore* alignStore) const
+    {
+
+        ATH_MSG_DEBUG("align() called from an alignment CondAlg");
+        if (!getIdHelper()) return StatusCode::SUCCESS; // To Do: is it really a success?
+
+        bool alignmentChange = false;
+        //      const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
+      
+        for(const auto& alignObj : alignObjects) {
+            const std::string& key = alignObj.first;
+
+            ATH_MSG_DEBUG(" Processing folder  " << key);
+
+            if(m_globalFolders.find(key)!=m_globalFolders.end()) {  
+                try {
+                    // New global alignemnts
+                    const CondAttrListCollection* obj = static_cast<const CondAttrListCollection*>(alignObj.second);
+                    bool status = processGlobalAlignmentContainer(key,obj,alignStore);
+                    alignmentChange = (alignmentChange || status);
+                } catch(std::runtime_error& err) {
+                    // alignments should always exist so we return fatal if we could not process the alignment for this key
+                    ATH_MSG_FATAL(err.what());
+                    return StatusCode::FAILURE;
+                }
+            } 
+            else if(m_folders.find(key)!=m_folders.end()) { 
+                try {
+                    // Regular alignemnts
+                    const AlignableTransformContainer* container = static_cast<const AlignableTransformContainer*>(alignObj.second);
+                    bool status = processAlignmentContainer(container,alignStore);
+                    alignmentChange = (alignmentChange || status);
+                } catch(std::runtime_error& err) {
+                    // alignments should always exist so we return fatal if we could not process the alignment for this key
+                    ATH_MSG_FATAL(err.what());
+                    return StatusCode::FAILURE;
+                }
+            } 
+            else if(m_specialFolders.find(key)!=m_specialFolders.end()) {
+                try {
+                  // Detector specific alignments
+                  const CondAttrListCollection *obj =
+                    static_cast<const CondAttrListCollection*>(alignObj.second);
+                  bool status = processSpecialAlignment(key, obj, alignStore);
+                  alignmentChange = (alignmentChange || status);
+                }
+                catch(std::runtime_error& err) {
+                  // Should always exist if the folder was requested so we return fatal if
+                  // we could not process the alignment for this key
+                  ATH_MSG_FATAL(err.what());
+                  return StatusCode::FAILURE;
+                }
+            } 
+            else {
+                // Should not be any other keys specified in raw alignment object.
+                ATH_MSG_ERROR("Unrecognized folder name.");
+                return StatusCode::RECOVERABLE;
+            }
+        }
+        // To Do: custom caching is not going to work in MT
+        /*
+          if(alignmentChange) invalidateAll(); 
+        */
+
+        return StatusCode::SUCCESS;      
+    }
+
+    bool TrackerDetectorManager::processAlignmentContainer(const std::string & key) const
+    {
+        bool alignmentChange = false;
+
+        ATH_MSG_DEBUG("Dealing with key as container");
+        const AlignableTransformContainer* container;
+        if (StatusCode::SUCCESS!=m_detStore->retrieve(container, key)) {        
+            ATH_MSG_ERROR("Cannot find AlignableTransformContainer for key " 
+                          << key << " - no misalignment");
+            // This should not occur in normal situations so we force job to abort.
+            throw std::runtime_error("Unable to apply Tracker alignments");
+        }
+        // Check if container is empty - this can occur if it is an invalid IOV.
+        if (container->empty()) {
+            ATH_MSG_ERROR("AlignableTransformContainer for key " 
+                          << key << " is empty. Probably due to out of range IOV");
+            // This should not occur in normal situations so we force job to abort.
+            throw std::runtime_error("Unable to apply Tracker alignments.");
+        }
+        // loop over all the AlignableTransform objects in the collection
+        for (DataVector<AlignableTransform>::const_iterator pat=container->begin();
+        pat!=container->end();++pat) {
+
+            bool status = processKey((*pat)->tag(),*pat);
+            alignmentChange = (alignmentChange || status);
+        }
+        return alignmentChange;
+    } 
+
+    bool TrackerDetectorManager::processAlignmentContainer(const AlignableTransformContainer* container, GeoVAlignmentStore* alignStore) const
+    {
+        bool alignmentChange = false;
+
+        // Check if container is empty - this can occur if it is an invalid IOV.
+        if (container->empty()) {
+            ATH_MSG_ERROR("AlignableTransformContainer " 
+                          << " is empty. Probably due to out of range IOV"); // To Do: add key to this printout for making it more informative
+            // This should not occur in normal situations so we force job to abort.
+            throw std::runtime_error("Unable to apply Tracker alignments.");
+        }
+        // loop over all the AlignableTransform objects in the collection
+        // use only the last ones.
+        std::map<const std::string, const AlignableTransform*> stringToTransform;
+        for (DataVector<AlignableTransform>::const_iterator pat=container->begin();
+             pat!=container->end();++pat) {
+            stringToTransform[(*pat)->tag()] = *pat;
+        }
+        for (std::pair<const std::string, const AlignableTransform*> value: stringToTransform) {
+            bool status = processKey(value.first, value.second, alignStore);
+            alignmentChange = (alignmentChange || status);
+        }
+        return alignmentChange;
+    }
+
+    bool TrackerDetectorManager::processKey(const std::string key,
+                                          const AlignableTransform* transformCollection,
+                                          GeoVAlignmentStore* alignStore) const 
+    {  
+        bool alignmentChange = false;
+
+        // From the key determine what level in hierarchy we are dealing with.
+        // returns -1 if unrecognized.  
+        const LevelInfo & levelInfo = getLevel(key);
+        if (levelInfo.isValid()) {
+            ATH_MSG_VERBOSE("Processing channel: " << key);
+        } else {
+            ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
+        }
+        // return silently if unrecognised - this can happen in container mode
+        // when a single container holds transforms for both pixel and SCT
+        if (!levelInfo.isValid() ) return false;
+
+        //Loop over the effected nodes.
+        for (AlignableTransform::AlignTransMem_citr trans_iter = transformCollection->begin(); 
+             trans_iter != transformCollection->end(); 
+             ++trans_iter) {
+            ATH_MSG_DEBUG( "Get alignment for identifier " 
+                           << getIdHelper()->show_to_string(trans_iter->identify())  
+                           << " at level " << levelInfo.level());
+
+            // The delta in the conditions DB is not necessarily the same as what is needed in the
+            // alignable transform. At the moment we support global frame, local frame or an alternative frame
+            // The setAlignableTransformDelta method takes care of this correction - this is CLHEP <--> Amg interfaced
+            bool status = setAlignableTransformDelta(levelInfo.level(), 
+                                                     trans_iter->identify(),
+                                                     Amg::CLHEPTransformToEigen(trans_iter->transform()),
+                                                     levelInfo.frame(),
+                                                     alignStore);
+
+            alignmentChange = (alignmentChange || status);
+
+            if (!status) {
+                if (!identifierBelongs(trans_iter->identify())) {
+                    ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
+                                  << getIdHelper()->show_to_string(trans_iter->identify())  
+                                  << " at level " << levelInfo.level());
+                } else {
+                    ATH_MSG_WARNING("Cannot set AlignableTransform for identifier  " 
+                                    << getIdHelper()->show_to_string(trans_iter->identify())  
+                                    << " at level " << levelInfo.level());
+                }
+            }  
+        }
+        return alignmentChange;
+    }
+
+  // We provide a default implementation of any detector specific alignment.
+    bool TrackerDetectorManager::processGlobalAlignmentContainer(const std::string & key,
+                                                               const CondAttrListCollection* obj,
+                                                               GeoVAlignmentStore* alignStore) const
+    {
+      bool alignmentChange = false;
+
+      ATH_MSG_DEBUG("processing GlobalAlignmentContainer with key:  " << key);
+      // From the key determine what level in hierarchy we are dealing with.                                                                                   
+      // returns -1 if unrecognized.                                                                                                                           
+      const LevelInfo & levelInfo = getLevel(key);
+      if (levelInfo.isValid()) {
+          ATH_MSG_VERBOSE("Processing channel: " << key);
+      } else {
+          ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
+      }
+      // return silently if unrecognised - this can happen in container mode                                                                                   
+      // when a single container holds transforms for both pixel and SCT                                                                                       
+      if (!levelInfo.isValid() ) return false;
+        
+      // Within detector specific code
+      bool status = processGlobalAlignment(key, levelInfo.level(), levelInfo.frame(), obj, alignStore);
+      
+      alignmentChange = (alignmentChange || status);
+
+      return alignmentChange;
+
+    }
+  
+  // We provide a default implementation of any detector specific alignment.                                                                                 
+    bool TrackerDetectorManager::processGlobalAlignment(const std::string &, int /*level*/, FrameType /*frame*/,
+                                                      const CondAttrListCollection* /*obj*/, GeoVAlignmentStore* /*alignStore*/) const
+    {
+        return false;
+    }
+
+
+  // We provide a default implementation of any detector specific alignment.
+    bool TrackerDetectorManager::processSpecialAlignment(const std::string &, TrackerDD::AlignFolderType) const
+    {
+        return false;
+    }
+
+    const TrackerDetectorManager::LevelInfo TrackerDetectorManager::s_invalidLevel;
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/Version.cxx b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/Version.cxx
new file mode 100755
index 000000000..6b155b383
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerReadoutGeometry/src/Version.cxx
@@ -0,0 +1,121 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "TrackerReadoutGeometry/Version.h"
+
+#include <sstream>
+#include <string>
+#include <iomanip>
+
+namespace TrackerDD {
+
+Version::Version(const std::string & tag, 
+		 const std::string & name, 
+		 const std::string & layout, 
+		 const std::string & description, 
+		 int major,
+		 int minor,
+		 int patch)
+  : m_tag(tag),
+    m_name(name),
+    m_layout(layout),
+    m_description(description),
+    m_major(major),
+    m_minor(minor),
+    m_patch(patch)
+{}
+
+// For backward compatibility
+Version::Version(const std::string & name, 
+		 const std::string & layout, 
+		 const std::string & description, 
+		 int major,
+		 int minor,
+		 int patch)
+  : m_tag("-"),
+    m_name(name),
+    m_layout(layout),
+    m_description(description),
+    m_major(major),
+    m_minor(minor),
+    m_patch(patch)
+{}
+
+
+
+Version::Version()
+  : m_major(0),
+    m_minor(0),
+    m_patch(0)
+{}
+
+const std::string & 
+Version::tag() const 
+{
+  return m_tag;
+}
+
+const std::string & 
+Version::name() const 
+{
+  return m_name;
+}
+
+const std::string & 
+Version::layout() const 
+{
+  return m_layout;
+}
+
+const std::string & 
+Version::description() const 
+{
+  return m_description;
+}
+
+int 
+Version::majorNum() const 
+{
+  return m_major;
+}
+
+int 
+Version::minorNum() const 
+{
+  return m_minor;
+}
+
+int 
+Version::patchNum() const 
+{
+  return m_patch;
+}
+
+std::string 
+Version::versionNumber() const
+{
+  std::ostringstream ostr;
+  ostr << m_major 
+       << "." << std::setfill('0') << std::setw(2) << m_minor 
+       << "." << std::setfill('0') << std::setw(2) << m_patch;
+  return ostr.str();
+}
+
+std::string  
+Version::fullDescription() const 
+{
+
+  //  Output of the form
+  //  Version: SCT-DC1-00, Name: DC1, Layout: Final, Code Version: 02.01.01, Description: DC1 Geometry
+
+  std::ostringstream ostr;
+  ostr << "Version: " << m_tag << ", Name: " << m_name << ", Layout: " << m_layout 
+       << ", Code Version: " << versionNumber();
+  if (!m_description.empty()) { 
+    ostr << ", Description: " << m_description;
+  }
+  return ostr.str();
+}
+
+} // namespace TrackerDD
diff --git a/Tracker/TrackerDetDescrCnv/TrackerIdCnv/CMakeLists.txt b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/CMakeLists.txt
new file mode 100644
index 000000000..fd6d2418f
--- /dev/null
+++ b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/CMakeLists.txt
@@ -0,0 +1,23 @@
+################################################################################
+# Package: TrackerIdCnv
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrackerIdCnv )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PRIVATE
+                          Control/StoreGate
+                          DetectorDescription/DetDescrCnvSvc
+                          DetectorDescription/TrackerDetDescr
+                          GaudiKernel
+                          Tracker/TrackerDetDescr/TrackerIdentifier )
+
+# Component(s) in the package:
+atlas_add_component( TrackerIdCnv
+                     src/*.cxx
+                     LINK_LIBRARIES StoreGateLib SGtests DetDescrCnvSvcLib IdDictDetDescr GaudiKernel TrackerIdentifier )
+
+# Install files from the package:
+atlas_install_joboptions( share/*.py )
+
diff --git a/Tracker/TrackerDetDescrCnv/TrackerIdCnv/share/TrackerIdCnv_jobOptions.py b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/share/TrackerIdCnv_jobOptions.py
new file mode 100644
index 000000000..90e5ebcf0
--- /dev/null
+++ b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/share/TrackerIdCnv_jobOptions.py
@@ -0,0 +1,6 @@
+#
+#  Joboptions for the loading of the of TrackerIdCnv
+#
+
+# DLLs 
+theApp.Dlls += [ "TrackerIdCnv" ]
diff --git a/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.cxx b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.cxx
new file mode 100644
index 000000000..192e8ce07
--- /dev/null
+++ b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.cxx
@@ -0,0 +1,244 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ Tracker DetDescrCnv package
+ -----------------------------------------
+ ***************************************************************************/
+
+//<doc><file>	$Id: FaserSCT_IDDetDescrCnv.cxx,v 1.4 2007-01-16 17:06:15 dquarrie Exp $
+//<version>	$Name: not supported by cvs2svn $
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "FaserSCT_IDDetDescrCnv.h"
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+#include "DetDescrCnvSvc/DetDescrAddress.h"
+#include "GaudiKernel/MsgStream.h"
+#include "StoreGate/StoreGate.h" 
+
+#include "IdDictDetDescr/IdDictManager.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
+
+
+//<<<<<< PRIVATE DEFINES                                                >>>>>>
+//<<<<<< PRIVATE CONSTANTS                                              >>>>>>
+//<<<<<< PRIVATE TYPES                                                  >>>>>>
+//<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
+//<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
+//<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
+//<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
+//<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
+//<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
+
+//--------------------------------------------------------------------
+
+long int   
+FaserSCT_IDDetDescrCnv::repSvcType() const
+{
+  return (storageType());
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+FaserSCT_IDDetDescrCnv::initialize()
+{
+    // First call parent init
+    StatusCode sc = DetDescrConverter::initialize();
+    MsgStream log(msgSvc(), "FaserSCT_IDDetDescrCnv");
+    log << MSG::DEBUG << "in initialize" << endmsg;
+
+    if (sc.isFailure()) {
+        log << MSG::ERROR << "DetDescrConverter::initialize failed" << endmsg;
+	return sc;
+    }
+    
+    // The following is an attempt to "bootstrap" the loading of a
+    // proxy for FaserSCT_ID into the detector store. However,
+    // FaserSCT_IDDetDescrCnv::initialize is NOT called by the conversion
+    // service.  So for the moment, this cannot be use. Instead the
+    // DetDescrCnvSvc must do the bootstrap from a parameter list.
+
+
+//      // Add Tracker_DetDescrManager proxy as entry point to the detector store
+//      // - this is ONLY needed for the manager of each system
+//      sc = addToDetStore(classID(), "PidelID");
+//      if (sc.isFailure()) {
+//  	log << MSG::FATAL << "Unable to add proxy for FaserSCT_ID to the Detector Store!" << endmsg;
+//  	return StatusCode::FAILURE;
+//      } else {}
+
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+FaserSCT_IDDetDescrCnv::finalize()
+{
+    MsgStream log(msgSvc(), "FaserSCT_IDDetDescrCnv");
+    log << MSG::DEBUG << "in finalize" << endmsg;
+
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode
+FaserSCT_IDDetDescrCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+{
+    //StatusCode sc = StatusCode::SUCCESS;
+    MsgStream log(msgSvc(), "FaserSCT_IDDetDescrCnv");
+    log << MSG::INFO << "in createObj: creating a FaserSCT_ID helper object in the detector store" << endmsg;
+
+    // Create a new FaserSCT_ID
+
+    DetDescrAddress* ddAddr;
+    ddAddr = dynamic_cast<DetDescrAddress*> (pAddr);
+    if(!ddAddr) {
+	log << MSG::FATAL << "Could not cast to DetDescrAddress." << endmsg;
+	return StatusCode::FAILURE;
+    }
+
+    // Get the StoreGate key of this container.
+    std::string helperKey  = *( ddAddr->par() );
+    if ("" == helperKey) {
+	log << MSG::DEBUG << "No Helper key " << endmsg;
+    }
+    else {
+	log << MSG::DEBUG << "Helper key is " << helperKey << endmsg;
+    }
+    
+
+    // get DetectorStore service
+    StoreGateSvc * detStore;
+    StatusCode status = serviceLocator()->service("DetectorStore", detStore);
+    if (status.isFailure()) {
+	log << MSG::FATAL << "DetectorStore service not found !" << endmsg;
+	return StatusCode::FAILURE;
+    } else {}
+ 
+    // Get the dictionary manager from the detector store
+    const DataHandle<IdDictManager> idDictMgr;
+    status = detStore->retrieve(idDictMgr, "IdDict");
+    if (status.isFailure()) {
+	log << MSG::FATAL << "Could not get IdDictManager !" << endmsg;
+	return StatusCode::FAILURE;
+    } 
+    else {
+	log << MSG::DEBUG << " Found the IdDictManager. " << endmsg;
+    }
+
+    // Only create new helper if it is the first pass or if there is a
+    // change in the the file or tag
+    bool initHelper               = false;
+
+    const IdDictMgr* mgr          = idDictMgr->manager();
+
+    // Internal Tracker id tag
+    std::string   trackerIDTag      = mgr->tag();
+
+    // DoChecks flag
+    bool doChecks                 = mgr->do_checks();
+
+    IdDictDictionary* dict = mgr->find_dictionary("Tracker");  
+    if (!dict) {
+	log << MSG::ERROR 
+	    << "unable to find idDict for Tracker" 
+	    << endmsg;
+	return StatusCode::FAILURE;
+    }
+
+    // File to be read for Tracker ids
+    std::string   trackerIDFileName = dict->file_name();
+
+    // Tag of RDB record for Tracker ids
+    std::string   trackerIdDictTag  = dict->dict_tag();
+
+
+    if (m_sctId) {
+
+	// SCT id helper already exists - second pass. Check for a
+	// change 
+	if (trackerIDTag != m_trackerIDTag) { 
+	    // Internal Tracker id tag
+	    initHelper = true;
+	    log << MSG::DEBUG << " Changed internal Tracker id tag: " 
+		<< trackerIDTag << endmsg;
+	}
+	if (trackerIDFileName != m_trackerIDFileName) {
+	    // File to be read for Tracker ids
+	    initHelper = true;
+	    log << MSG::DEBUG << " Changed TrackerFileName:" 
+		<< trackerIDFileName << endmsg;
+	}
+	if (trackerIdDictTag != m_trackerIdDictTag) {
+	    // Tag of RDB record for Tracker ids
+	    initHelper = true;
+	    log << MSG::DEBUG << " Changed TrackerIdDictTag: "
+		<< trackerIdDictTag 
+		<< endmsg;
+	}
+	if (doChecks != m_doChecks) {
+	    // DoChecks flag
+	    initHelper = true;
+	    log << MSG::DEBUG << " Changed doChecks flag: "
+		<< doChecks
+		<< endmsg;
+        }
+    }
+    else {
+	// create the helper
+	m_sctId = new FaserSCT_ID;
+	initHelper = true;
+        // add in message service for printout
+        m_sctId->setMessageSvc(msgSvc());
+    }
+    
+    if (initHelper) {
+	if (idDictMgr->initializeHelper(*m_sctId)) {
+	    log << MSG::ERROR << "Unable to initialize FaserSCT_ID" << endmsg;
+	    return StatusCode::FAILURE;
+	} 
+	// Save state:
+	m_trackerIDTag      = trackerIDTag;
+	m_trackerIDFileName = trackerIDFileName;
+	m_trackerIdDictTag  = trackerIdDictTag;
+	m_doChecks        = doChecks;
+    }
+
+    // Pass a pointer to the container to the Persistency service by reference.
+    pObj = StoreGateSvc::asStorable(m_sctId);
+
+    return StatusCode::SUCCESS; 
+
+}
+
+//--------------------------------------------------------------------
+
+long
+FaserSCT_IDDetDescrCnv::storageType()
+{
+    return DetDescr_StorageType;
+}
+
+//--------------------------------------------------------------------
+const CLID& 
+FaserSCT_IDDetDescrCnv::classID() { 
+    return ClassID_traits<FaserSCT_ID>::ID(); 
+}
+
+//--------------------------------------------------------------------
+FaserSCT_IDDetDescrCnv::FaserSCT_IDDetDescrCnv(ISvcLocator* svcloc) 
+    :
+    DetDescrConverter(ClassID_traits<FaserSCT_ID>::ID(), svcloc),
+    m_sctId(0),
+    m_doChecks(false)
+
+{}
+
+
+
diff --git a/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.h b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.h
new file mode 100644
index 000000000..cdc2eeb66
--- /dev/null
+++ b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/FaserSCT_IDDetDescrCnv.h
@@ -0,0 +1,74 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ Tracker DetDescrCnv package
+ -----------------------------------------
+ ***************************************************************************/
+
+//<doc><file>	$Id: FaserSCT_IDDetDescrCnv.h,v 1.3 2007-01-01 10:47:18 dquarrie Exp $
+//<version>	$Name: not supported by cvs2svn $
+
+#ifndef TRACKERDETDESCRCNV_FASERSCT_IDDETDESCRCNV_H
+#define TRACKERDETDESCRCNV_FASERSCT_IDDETDESCRCNV_H
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+
+//<<<<<< PUBLIC DEFINES                                                 >>>>>>
+//<<<<<< PUBLIC CONSTANTS                                               >>>>>>
+//<<<<<< PUBLIC TYPES                                                   >>>>>>
+
+class FaserSCT_ID;
+
+//<<<<<< PUBLIC VARIABLES                                               >>>>>>
+//<<<<<< PUBLIC FUNCTIONS                                               >>>>>>
+//<<<<<< CLASS DECLARATIONS                                             >>>>>>
+
+
+/**
+ **  This class is a converter for the SCT_ID an IdHelper which is
+ **  stored in the detector store. This class derives from
+ **  DetDescrConverter which is a converter of the DetDescrCnvSvc.
+ **
+ **/
+
+class FaserSCT_IDDetDescrCnv: public DetDescrConverter {
+
+public:
+    virtual long int   repSvcType() const;
+    virtual StatusCode initialize();
+    virtual StatusCode finalize();
+    virtual StatusCode createObj(IOpaqueAddress* pAddr, DataObject*& pObj);
+
+    // Storage type and class ID (used by CnvFactory)
+    static long storageType();
+    static const CLID& classID();
+
+    FaserSCT_IDDetDescrCnv(ISvcLocator* svcloc);
+
+private:
+    /// The helper - only will create it once
+    FaserSCT_ID*       m_sctId;
+
+    /// File to be read for Tracker ids
+    std::string   m_trackerIDFileName;
+
+    /// Tag of RDB record for Tracker ids
+    std::string   m_trackerIdDictTag;
+
+    /// Internal Tracker id tag
+    std::string   m_trackerIDTag;
+
+    /// Whether or not 
+    bool          m_doChecks;
+
+};
+
+
+//<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
+//<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
+
+#endif // TRACKERDETDESCRCNV_FASERSCT_IDDETDESCRCNV_H
diff --git a/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/TrackerIdCnv_entries.cxx b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/TrackerIdCnv_entries.cxx
new file mode 100644
index 000000000..dbf9089b8
--- /dev/null
+++ b/Tracker/TrackerDetDescrCnv/TrackerIdCnv/src/TrackerIdCnv_entries.cxx
@@ -0,0 +1,6 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+#include "FaserSCT_IDDetDescrCnv.h"
+
+DECLARE_CONVERTER(FaserSCT_IDDetDescrCnv)
diff --git a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui
index 1aa101925..6a0b7eef4 100644
--- a/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui
+++ b/graphics/VTI12/VTI12Gui/src/vp1mainwindow.ui
@@ -613,7 +613,7 @@ p, li { white-space: pre-wrap; }
                         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Launch the Analysis Object (AOD) plugin within a new tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                        </property>
                        <property name="text">
-                        <string>This space for rent</string>
+                        <string>Unused</string>
                        </property>
                       </widget>
                      </item>
diff --git a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
index c4613e0b4..cf8b66f0c 100644
--- a/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12GeometrySystems/src/VolumeTreeModel.cxx
@@ -105,7 +105,7 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
   if (Imp::section2string.empty()) {
     Imp::section2string[Imp::UNKNOWN] = "Unknown";
     Imp::section2string[Imp::SCINT] = "Scintillators";
-    Imp::section2string[Imp::TRACKER] = "Muon Spectrometer";
+    Imp::section2string[Imp::TRACKER] = "Tracker";
     Imp::section2string[Imp::CALO] = "Calorimeter";
     Imp::section2string[Imp::MISC] = "Miscellaneous";
   }
@@ -116,42 +116,9 @@ VolumeTreeModel::VolumeTreeModel( QObject * parent )
     Imp::defineSubSystem(VP1GeoFlags::Trigger,   "Trigger",   Imp::SCINT);
     Imp::defineSubSystem(VP1GeoFlags::Preshower, "Preshower", Imp::SCINT);
     // Tracker
-    Imp::defineSubSystem(VP1GeoFlags::SCT,       "Tracker",   Imp::TRACKER);
+    Imp::defineSubSystem(VP1GeoFlags::SCT,       "SCT",       Imp::TRACKER);
     // Calorimeter
     Imp::defineSubSystem(VP1GeoFlags::Ecal,      "Ecal",      Imp::CALO);
-
-    // // Inner Detector
-    // Imp::defineSubSystem(VP1GeoFlags::Pixel,"Pixel",Imp::INDET);
-    // Imp::defineSubSystem(VP1GeoFlags::SCT,"SCT",Imp::INDET);
-    // Imp::defineSubSystem(VP1GeoFlags::TRT,"TRT",Imp::INDET);
-    // Imp::defineSubSystem(VP1GeoFlags::InDetServMat,"Services",Imp::INDET);
-    // // Calorimeters
-    // Imp::defineSubSystem(VP1GeoFlags::LAr,"LAr",Imp::CALO);
-    // Imp::defineSubSystem(VP1GeoFlags::Tile,"Tile",Imp::CALO);
-    // //Toroids
-    // Imp::defineSubSystem(VP1GeoFlags::BarrelToroid,"Toroid Barrel",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::ToroidECA,"Toroid EndCap side A",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::ToroidECC,"Toroid EndCap side C",Imp::MUON);
-    // // Structure
-    // Imp::defineSubSystem(VP1GeoFlags::MuonFeet,"Feets",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonShielding,"Shields, etc.",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonToroidsEtc,"Muon etc.",Imp::MUON);
-    // // Muon chambers
-    // Imp::defineSubSystem(VP1GeoFlags::MuonBarrelStationInner,"Inner Barrel Stations",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonBarrelStationMiddle,"Middle Barrel Stations",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonBarrelStationOuter,"Outer Barrel Stations",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonEndcapStationCSC,"Endcap CSC",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonEndcapStationTGC,"Endcap TGC",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonEndcapStationMDT,"Endcap MDT",Imp::MUON);
-    // Imp::defineSubSystem(VP1GeoFlags::MuonEndcapStationNSW,"Endcap NSW",Imp::MUON);
-    // // Beam Pipe
-    // Imp::defineSubSystem(VP1GeoFlags::BeamPipe,"Beam Pipe",Imp::MISC);
-    // // FWD detectors
-    // Imp::defineSubSystem(VP1GeoFlags::LUCID,"LUCID",Imp::MISC);
-    // Imp::defineSubSystem(VP1GeoFlags::ZDC,"ZDC",Imp::MISC);
-    // Imp::defineSubSystem(VP1GeoFlags::ForwardRegion,"ForwardRegion",Imp::MISC);
-    // // Cavern
-    // Imp::defineSubSystem(VP1GeoFlags::CavernInfra,"Cavern Infrastructure",Imp::MISC);
   }
 }
 
diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/CMakeLists.txt b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/CMakeLists.txt
index 7ac5f9320..bdb4b5753 100644
--- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/CMakeLists.txt
+++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/CMakeLists.txt
@@ -27,11 +27,11 @@ atlas_depends_on_subdirs(
    DetectorDescription/FaserDetDescr
    Event/EventPrimitives
 #   ForwardDetectors/ForwardSimulation/ForwardRegion_SimEv
-#   InnerDetector/InDetDetDescr/InDetIdentifier
-#   InnerDetector/InDetDetDescr/InDetReadoutGeometry
+   Tracker/TrackerDetDescr/TrackerIdentifier
+   Tracker/TrackerDetDescr/TrackerReadoutGeometry
 #   InnerDetector/InDetRecEvent/InDetPrepRawData
 #   InnerDetector/InDetRecEvent/InDetRIO_OnTrack
-#   InnerDetector/InDetSimEvent
+   InnerDetector/InDetSimEvent
    Scintillator/ScintDetDescr/ScintIdentifier
    Scintillator/ScintDetDescr/ScintReadoutGeometry
    Scintillator/ScintSimEvent
@@ -81,7 +81,8 @@ atlas_add_library( VTI12TrackSystems VTI12TrackSystems/*.h src/*.cxx
    PRIVATE_LINK_LIBRARIES ${COIN3D_LIBRARIES} ${CLHEP_LIBRARIES}
    ${HEPMC_LIBRARIES} AthContainers FaserDetDescr EventPrimitives
    ScintIdentifier ScintSimEvent ScintReadoutGeometry
-   #InDetIdentifier InDetReadoutGeometry InDetPrepRawData InDetRIO_OnTrack InDetSimEvent 
+   TrackerIdentifier TrackerReadoutGeometry InDetSimEvent
+   #InDetPrepRawData InDetRIO_OnTrack
    Particle
    TrkDetDescrUtils TrkDetElementBase TrkVolumes TrkCompetingRIOsOnTrack
    TrkMaterialOnTrack TrkMeasurementBase TrkPrepRawData
diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
index 3e5a89743..950460e5d 100644
--- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrackCollHandle_TruthTracks.cxx
@@ -17,6 +17,7 @@
 #include "VTI12TrackSystems/SimHitHandleBase.h"
 #include "VTI12TrackSystems/SimHitHandle_TrackRecord.h"
 #include "VTI12TrackSystems/SimHitHandle_ScintHit.h"
+// #include "VTI12TrackSystems/SimHitHandle_SiHit.h"
 #include "VTI12TrackSystems/SimBarCode.h"
 #include "VTI12TrackSystems/TrackSystemController.h"
 #include "VP1Base/IVP1System.h"
@@ -35,7 +36,7 @@
 #include "VTI12Utils/VP1SGAccessHelper.h"
 
 #include "ScintSimEvent/ScintHitCollection.h"
-// #include "InDetSimEvent/SiHitCollection.h"
+#include "InDetSimEvent/SiHitCollection.h"
 
 #include "CLHEP/Units/PhysicalConstants.h"
 
@@ -113,7 +114,7 @@ QStringList TrackCollHandle_TruthTracks::availableCollections( IVP1System*sys )
   QStringList mcevent_keys = sgcont.getKeys<McEventCollection>();
   QStringList trackrecord_keys = sgcont.getKeys<TrackRecordCollection>();
 
-  QStringList /*keys_siliconhits,*/ keys_scintillatorhits;
+  QStringList keys_siliconhits,keys_scintillatorhits;
 
   if (VP1JobConfigInfo::hasVetoGeometry() ||
       VP1JobConfigInfo::hasTriggerGeometry() ||
@@ -123,7 +124,7 @@ QStringList TrackCollHandle_TruthTracks::availableCollections( IVP1System*sys )
   //   keys_siliconhits = sgcont.getKeys<SiHitCollection>();//"SCT_Hits"
 
   bool extrainfo = ! ( keys_scintillatorhits.empty() && 
-                      //  keys_siliconhits.empty() &&
+                       keys_siliconhits.empty() &&
                        trackrecord_keys.empty() );
 
   if (extrainfo&&mcevent_keys.empty()) {
@@ -254,7 +255,8 @@ bool TrackCollHandle_TruthTracks::Imp::loadHitLists(std::map<SimBarCode,SimHitLi
       VP1JobConfigInfo::hasPreshowerGeometry())
       // std::cout << "Called addHitCollections" << std::endl;
      addHitCollections<ScintHitCollection>(hitLists);
-    //  addHitCollections<SiHitCollection>(hitLists);
+  //  if (VP1JobConfigInfo::hasSCTGeometry())
+  //    addHitCollections<SiHitCollection>(hitLists);
 
   if (VP1Msg::verbose())
     theclass->messageVerbose( "Found " + str( hitLists.size() ) + " lists of sim. hits.");
diff --git a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrkObjToString.cxx b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrkObjToString.cxx
index cbe97286d..75c1c1977 100644
--- a/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrkObjToString.cxx
+++ b/graphics/VTI12/VTI12Systems/VTI12TrackSystems/src/TrkObjToString.cxx
@@ -10,7 +10,7 @@
 
 //DetectorElements
 #include "ScintReadoutGeometry/ScintDetectorElement.h"
-// #include "InDetReadoutGeometry/SiDetectorElement.h"
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
 
 //MeasurementBase
 #include "TrkMeasurementBase/MeasurementBase.h"
@@ -76,11 +76,11 @@ TrkObjToString::type(const Trk::MeasurementBase* meas)
 }
 
 TrkObjToString::MeasurementType
-TrkObjToString::type(const Trk::TrkDetElementBase* /*detEl*/){
-    // const InDetDD::SiDetectorElement* siDetEl = dynamic_cast<const InDetDD::SiDetectorElement*> (detEl);
-    // if (siDetEl){
-    //     if (siDetEl->isSCT()) {return TrkObjToString::SCT;}        
-    // }
+TrkObjToString::type(const Trk::TrkDetElementBase* detEl){
+    const TrackerDD::SiDetectorElement* siDetEl = dynamic_cast<const TrackerDD::SiDetectorElement*> (detEl);
+    if (siDetEl){
+        return TrkObjToString::SCT;        
+    }
     return TrkObjToString::Unknown; // Couldn't cast ROT to anything known
 }
 
diff --git a/graphics/VTI12/VTI12Utils/CMakeLists.txt b/graphics/VTI12/VTI12Utils/CMakeLists.txt
index ca3fa3a00..af07e3edf 100644
--- a/graphics/VTI12/VTI12Utils/CMakeLists.txt
+++ b/graphics/VTI12/VTI12Utils/CMakeLists.txt
@@ -26,8 +26,8 @@ atlas_depends_on_subdirs(
    DetectorDescription/Identifier
    Scintillator/ScintDetDescr/ScintIdentifier
    Scintillator/ScintDetDescr/ScintReadoutGeometry
-#   InnerDetector/InDetDetDescr/InDetIdentifier
-#   InnerDetector/InDetDetDescr/InDetReadoutGeometry
+   Tracker/TrackerDetDescr/TrackerIdentifier
+   Tracker/TrackerDetDescr/TrackerReadoutGeometry
 #   InnerDetector/InDetRecEvent/InDetRIO_OnTrack
    Tracking/TrkDetDescr/TrkSurfaces
    Tracking/TrkEvent/TrkRIO_OnTrack
@@ -58,5 +58,6 @@ atlas_add_library( VTI12Utils VTI12Utils/*.h src/*.cxx src/*.cpp
    ${EIGEN_LIBRARIES} CxxUtils FaserDetDescr
    GeoModelUtilities GeoModelFaserUtilities GeoSpecialShapes Identifier
    ScintIdentifier ScintReadoutGeometry
-#   InDetIdentifier InDetReadoutGeometry InDetRIO_OnTrack 
+   TrackerIdentifier TrackerReadoutGeometry
+   #InDetRIO_OnTrack 
    TrkSurfaces TrkRIO_OnTrack VP1HEPVis )
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/HitToSoNode.h b/graphics/VTI12/VTI12Utils/VTI12Utils/HitToSoNode.h
index 3f624dd31..36d25c6bc 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/HitToSoNode.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/HitToSoNode.h
@@ -55,7 +55,7 @@ private:
 //  void fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness,   Trk::LocalPosition*& localposStrip);
 //
   void fillValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth,  double& stripThickness, Amg::Vector2D*& localposStrip);
-  // void fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness,   Amg::Vector2D*& localposStrip);
+  void fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness,   Amg::Vector2D*& localposStrip);
 
   class Imp;
   Imp * m_d;
diff --git a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
index 809e43d1f..6f797da4e 100644
--- a/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
+++ b/graphics/VTI12/VTI12Utils/VTI12Utils/VP1DetInfo.h
@@ -20,9 +20,7 @@
 
 class IVP1System;
 class StoreGateSvc;
-// namespace InDetDD { class TRT_DetectorManager; }
-// namespace InDetDD { class PixelDetectorManager; }
-// namespace InDetDD { class SCT_DetectorManager; }
+namespace TrackerDD { class SCT_DetectorManager; }
 namespace ScintDD { class VetoDetectorManager; }
 namespace ScintDD { class TriggerDetectorManager; }
 namespace ScintDD { class PreshowerDetectorManager; }
@@ -32,9 +30,7 @@ class ScintDetectorID;
 class VetoID;
 class TriggerID;
 class PreshowerID;
-// class PixelID;
-// class SCT_ID;
-// class TRT_ID;
+class FaserSCT_ID;
 
 class Identifier;
 
@@ -51,9 +47,7 @@ public:
   static const ScintDD::TriggerDetectorManager * triggerDetMgr();
   static const ScintDD::PreshowerDetectorManager * preshowerDetMgr();
 
-  // static const InDetDD::PixelDetectorManager * pixelDetMgr();
-  // static const InDetDD::SCT_DetectorManager * sctDetMgr();
-  // static const InDetDD::TRT_DetectorManager * trtDetMgr();
+  static const TrackerDD::SCT_DetectorManager * sctDetMgr();
 
   //Base identifier helper:
   static const FaserDetectorID * faserIDHelper();
@@ -64,9 +58,7 @@ public:
    static const TriggerID * triggerIDHelper();
    static const PreshowerID * preshowerIDHelper();
 
-  // static const PixelID * pixelIDHelper();
-  // static const SCT_ID * sctIDHelper();
-  // static const TRT_ID * trtIDHelper();
+  static const FaserSCT_ID * sctIDHelper();
   //Todo: Add more as needed.
 
   //Combines use of the atlasIDHelper and VP1JobConfigInfo to spot
diff --git a/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx b/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx
index beef5e8c2..9bb096aa7 100644
--- a/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx
+++ b/graphics/VTI12/VTI12Utils/src/HitToSodeNode.cxx
@@ -27,7 +27,7 @@
 // #include "InDetRIO_OnTrack/TRT_DriftCircleOnTrack.h"
 
 #include "ScintReadoutGeometry/ScintDetectorElement.h"
-// #include "InDetReadoutGeometry/SiDetectorElement.h"
+#include "TrackerReadoutGeometry/SiDetectorElement.h"
 
 #include <sstream>
 #include <cmath>
@@ -184,35 +184,35 @@ void HitToSoNode::buildStripShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&sha
     delete localposROT;    
 }
 
-void HitToSoNode::fillValues(Identifier& /*id*/, const Trk::TrkDetElementBase* /*baseDetEl*/, double& /*striplength*/, double& /*stripWidth*/, double& /*stripThickness*/, Amg::Vector2D*& /*localposStrip*/){
+void HitToSoNode::fillValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
 
     const FaserDetectorID * idhelper = VP1DetInfo::faserIDHelper();
     if (!idhelper) return;
-    // if (idhelper->is_indet(id) && (idhelper->is_pixel(id)||idhelper->is_sct(id))) { 
-    //     fillSiValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;
-    // }
+    if (idhelper->is_sct(id)) { 
+        fillSiValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;
+    }
     VP1Msg::message("Warning: HitToSoNode::fillValues(...) unknown technology.");
     return;
 }
 
 
-// void HitToSoNode::fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness,  Amg::Vector2D*& localposStrip){
-//     const InDetDD::SiDetectorElement* detEl =
-//         dynamic_cast<const InDetDD::SiDetectorElement*>(baseDetEl);
-//     if ( !detEl){
-//         VP1Msg::message("Could not get Si det element");
-//         localposStrip = new Amg::Vector2D;
-//         return;
-//     }
+void HitToSoNode::fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness,  Amg::Vector2D*& localposStrip){
+    const TrackerDD::SiDetectorElement* detEl =
+        dynamic_cast<const TrackerDD::SiDetectorElement*>(baseDetEl);
+    if ( !detEl){
+        VP1Msg::message("Could not get Si det element");
+        localposStrip = new Amg::Vector2D;
+        return;
+    }
 
-//     localposStrip = new Amg::Vector2D(detEl->rawLocalPositionOfCell( id ));
-//     //    (*localPosStrip)[Trk::distPhi] += (idhelper->is_pixel(id) ? m_pixelLorentzAngleTool : m_sctLorentzAngleTool)->getLorentzShift(detEl->identifyHash());
-//     // SiLorentzAngleTool cannot be used here because HitToSoNode is not a tool nor algorithm
+    localposStrip = new Amg::Vector2D(detEl->rawLocalPositionOfCell( id ));
+    //    (*localPosStrip)[Trk::distPhi] += (idhelper->is_pixel(id) ? m_pixelLorentzAngleTool : m_sctLorentzAngleTool)->getLorentzShift(detEl->identifyHash());
+    // SiLorentzAngleTool cannot be used here because HitToSoNode is not a tool nor algorithm
 
-//     striplength    = detEl->etaPitch() ;
-//     stripWidth     = detEl->phiPitch( *localposStrip );
-//     stripThickness = detEl->thickness()/10.0;
+    striplength    = detEl->etaPitch() ;
+    stripWidth     = detEl->phiPitch( *localposStrip );
+    stripThickness = detEl->thickness()/10.0;
     
-// }
+}
 
 #endif // BUILDVP1LIGHT
diff --git a/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx b/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
index de53862af..c1a2c5b34 100644
--- a/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
+++ b/graphics/VTI12/VTI12Utils/src/VP1DetInfo.cxx
@@ -24,17 +24,13 @@
 
 #include "ScintReadoutGeometry/VetoDetectorManager.h"
 
-// #include "InDetReadoutGeometry/TRT_DetectorManager.h"
-// #include "InDetReadoutGeometry/PixelDetectorManager.h"
-// #include "InDetReadoutGeometry/SCT_DetectorManager.h"
+#include "TrackerReadoutGeometry/SCT_DetectorManager.h"
 
 #include "FaserDetDescr/FaserDetectorID.h"
 
 #include "ScintIdentifier/VetoID.h"
 
-// #include "InDetIdentifier/PixelID.h"
-// #include "InDetIdentifier/SCT_ID.h"
-// #include "InDetIdentifier/TRT_ID.h"
+#include "TrackerIdentifier/FaserSCT_ID.h"
 
 #include "Identifier/Identifier.h"
 
@@ -51,9 +47,7 @@ public:
   static const ScintDD::TriggerDetectorManager * m_triggerDetMgr;
   static const ScintDD::PreshowerDetectorManager * m_preshowerDetMgr;
 
-  // static const InDetDD::PixelDetectorManager * m_pixelDetMgr;
-  // static const InDetDD::SCT_DetectorManager * m_sctDetMgr;
-  // static const InDetDD::TRT_DetectorManager * m_trtDetMgr;
+  static const TrackerDD::SCT_DetectorManager * m_sctDetMgr;
 
   static const FaserDetectorID * m_faserIDHelper;
 
@@ -62,7 +56,7 @@ public:
   static const PreshowerID *  m_preshowerIDHelper;
 
   // static const PixelID * m_pixelIDHelper;
-  // static const SCT_ID * m_sctIDHelper;
+  static const FaserSCT_ID * m_sctIDHelper;
   // static const TRT_ID * m_trtIDHelper;
 };
 
@@ -73,9 +67,7 @@ const ScintDD::VetoDetectorManager * VP1DetInfo::Imp::m_vetoDetMgr = 0;
 const ScintDD::TriggerDetectorManager * VP1DetInfo::Imp::m_triggerDetMgr = 0;
 const ScintDD::PreshowerDetectorManager * VP1DetInfo::Imp::m_preshowerDetMgr = 0;
 
-// const InDetDD::PixelDetectorManager * VP1DetInfo::Imp::m_pixelDetMgr = 0;
-// const InDetDD::SCT_DetectorManager * VP1DetInfo::Imp::m_sctDetMgr = 0;
-// const InDetDD::TRT_DetectorManager * VP1DetInfo::Imp::m_trtDetMgr = 0;
+const TrackerDD::SCT_DetectorManager * VP1DetInfo::Imp::m_sctDetMgr = 0;
 
 const FaserDetectorID * VP1DetInfo::Imp::m_faserIDHelper = 0;
 
@@ -83,9 +75,7 @@ const VetoID * VP1DetInfo::Imp::m_vetoIDHelper = 0;
 const TriggerID * VP1DetInfo::Imp::m_triggerIDHelper = 0;
 const PreshowerID * VP1DetInfo::Imp::m_preshowerIDHelper = 0;
 
-// const PixelID * VP1DetInfo::Imp::m_pixelIDHelper = 0;
-// const SCT_ID * VP1DetInfo::Imp::m_sctIDHelper = 0;
-// const TRT_ID * VP1DetInfo::Imp::m_trtIDHelper = 0;
+const FaserSCT_ID * VP1DetInfo::Imp::m_sctIDHelper = 0;
 
 //____________________________________________________________________
 template <class T>
@@ -131,9 +121,7 @@ const ScintDD::PreshowerDetectorManager * VP1DetInfo::preshowerDetMgr() {return
 // const ScintDD::TriggerDetectorManager * VP1DetInfo::triggerDetMgr() { return Imp::cachedRetrieve(Imp::m_triggerDetMgr,"Trigger",VP1JobConfigInfo::hasTriggerGeometry()); }
 // const ScintDD::PreshowerDetectorManager * VP1DetInfo::preshowerDetMgr() { return Imp::cachedRetrieve(Imp::m_preshowerDetMgr,"Preshower",VP1JobConfigInfo::hasPreshowerGeometry()); }
 
-// const InDetDD::PixelDetectorManager * VP1DetInfo::pixelDetMgr() { return Imp::cachedRetrieve(Imp::m_pixelDetMgr,"Pixel",VP1JobConfigInfo::hasPixelGeometry()); }
-// const InDetDD::SCT_DetectorManager * VP1DetInfo::sctDetMgr() { return Imp::cachedRetrieve(Imp::m_sctDetMgr,"SCT",VP1JobConfigInfo::hasSCTGeometry()); }
-// const InDetDD::TRT_DetectorManager * VP1DetInfo::trtDetMgr() { return Imp::cachedRetrieve(Imp::m_trtDetMgr,"TRT",VP1JobConfigInfo::hasTRTGeometry()); }
+const TrackerDD::SCT_DetectorManager * VP1DetInfo::sctDetMgr() { return Imp::cachedRetrieve(Imp::m_sctDetMgr,"SCT",VP1JobConfigInfo::hasSCTGeometry()); }
 
 const FaserDetectorID * VP1DetInfo::faserIDHelper() { return Imp::cachedRetrieve(Imp::m_faserIDHelper,"FaserID",true); }
 
@@ -143,9 +131,7 @@ const PreshowerID * VP1DetInfo::preshowerIDHelper() { return nullptr; }
 // const TriggerID * VP1DetInfo::triggerIDHelper() { return Imp::cachedRetrieve(Imp::m_triggerIDHelper,"TriggerID",VP1JobConfigInfo::hasTriggerGeometry()); }
 // const PreshowerID * VP1DetInfo::preshowerIDHelper() { return Imp::cachedRetrieve(Imp::m_preshowerIDHelper,"PreshowerID",VP1JobConfigInfo::hasPreshowerGeometry()); }
 
-// const PixelID * VP1DetInfo::pixelIDHelper() { return Imp::cachedRetrieve(Imp::m_pixelIDHelper,"PixelID",VP1JobConfigInfo::hasPixelGeometry()); }
-// const SCT_ID * VP1DetInfo::sctIDHelper() { return Imp::cachedRetrieve(Imp::m_sctIDHelper,"SCT_ID",VP1JobConfigInfo::hasSCTGeometry()); }
-// const TRT_ID * VP1DetInfo::trtIDHelper() { return Imp::cachedRetrieve(Imp::m_trtIDHelper,"TRT_ID",VP1JobConfigInfo::hasTRTGeometry()); }
+const FaserSCT_ID * VP1DetInfo::sctIDHelper() { return Imp::cachedRetrieve(Imp::m_sctIDHelper,"FaserSCT_ID",VP1JobConfigInfo::hasSCTGeometry()); }
 
 //____________________________________________________________________
 bool VP1DetInfo::isUnsafe( const Identifier& id ) {
@@ -163,12 +149,13 @@ bool VP1DetInfo::isUnsafe( const Identifier& id ) {
       return true;
   }
 
-  // if (idhelper->is_indet(id)) {
+  if (idhelper->is_tracker(id)) {
   //   if (!VP1JobConfigInfo::hasTRTGeometry() && idhelper->is_trt(id))
   //     return true;
   //   if (!VP1JobConfigInfo::hasPixelGeometry() && idhelper->is_pixel(id))
   //     return true;
-  //   if (!VP1JobConfigInfo::hasSCTGeometry() && idhelper->is_sct(id))
-  //     return true;
+    if (!VP1JobConfigInfo::hasSCTGeometry() && idhelper->is_sct(id))
+      return true;
+  }
   return false;
 }
-- 
GitLab