diff --git a/Calorimeter/CaloDetDescr/CaloIdDictFiles/CMakeLists.txt b/Calorimeter/CaloDetDescr/CaloIdDictFiles/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f84a19a930fa525aa01e0247d0085c19abaaacdf
--- /dev/null
+++ b/Calorimeter/CaloDetDescr/CaloIdDictFiles/CMakeLists.txt
@@ -0,0 +1,10 @@
+################################################################################
+# Package: CaloIdDictFiles
+################################################################################
+
+# Declare the package name:
+atlas_subdir( CaloIdDictFiles )
+
+# Install files from the package:
+atlas_install_xmls( data/*.xml )
+
diff --git a/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter.xml b/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a88c973a1494b913dc0dcbcaa60dc170a6f39c4b
--- /dev/null
+++ b/Calorimeter/CaloDetDescr/CaloIdDictFiles/data/IdDictCalorimeter.xml
@@ -0,0 +1,11 @@
+<IdDictionary name="Calorimeter">
+
+  <field name="part" >
+    <label name="ECAL" value="1" />
+  </field>
+
+  <region>
+    <range field="part" value="ECAL" />
+  </region>
+
+</IdDictionary>
\ No newline at end of file
diff --git a/DetectorDescription/DetDescrCnvSvc/DetDescrCnvSvc/DetDescrCnvSvc.h b/DetectorDescription/DetDescrCnvSvc/DetDescrCnvSvc/DetDescrCnvSvc.h
index 23582c8bac4702239cd54a625235096a5a81aec6..892a9773018d63ed62517d4bbb254e035ca20566 100644
--- a/DetectorDescription/DetDescrCnvSvc/DetDescrCnvSvc/DetDescrCnvSvc.h
+++ b/DetectorDescription/DetDescrCnvSvc/DetDescrCnvSvc/DetDescrCnvSvc.h
@@ -98,8 +98,8 @@ private:
     StringProperty			m_idDictGlobalTag;
     StringProperty			m_idDictFASERName;
     StringProperty			m_idDictScintName;
-    // StringProperty			m_idDictInDetName;
-    // StringProperty			m_fullAtlasNeighborsName;
+    StringProperty			m_idDictTrackerName;
+    StringProperty			m_idDictCaloName;
     BooleanProperty 			m_fromRoot;
     BooleanProperty 			m_fromNova;
     BooleanProperty 			m_detElemsfromDetNodes;
diff --git a/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py b/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py
index dfd14b6ee2c5b700ba8194a721f5fb356deddccd..40a838de765d5aafaa1eb5bb34352cb5211b6db7 100644
--- a/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py
+++ b/DetectorDescription/DetDescrCnvSvc/python/DetStoreConfig.py
@@ -17,7 +17,7 @@ def _setupDetStoreConfig():
     from DetDescrCnvSvc.DetDescrCnvSvcConf import DetDescrCnvSvc
     # Create DetDescrCnvSvc and add to SvcMgr
     # Specify primary Identifier dictionary to be used
-    svcMgr += DetDescrCnvSvc(IdDictName = "IdDictParser/FASER_IDS.xml")
+    svcMgr += DetDescrCnvSvc(IdDictName = "FaserGeoModel/FASER_IDS.xml")
 
     #theApp.CreateSvc += [ svcMgr.DetDescrCnvSvc.getFullName() ]
     svcMgr.EventPersistencySvc.CnvServices += [ "DetDescrCnvSvc" ]
diff --git a/DetectorDescription/DetDescrCnvSvc/share/DetStore.py b/DetectorDescription/DetDescrCnvSvc/share/DetStore.py
index 3a8397019ee64b0a684db8be4da196998cbdd74c..60e338aa8b91b12c040a957f4aeeb4cf4bcab144 100644
--- a/DetectorDescription/DetDescrCnvSvc/share/DetStore.py
+++ b/DetectorDescription/DetDescrCnvSvc/share/DetStore.py
@@ -21,5 +21,5 @@ DetDescrCnvSvc = Service( "DetDescrCnvSvc" )
 EventPersistencySvc.CnvServices = [ "DetDescrCnvSvc" ]
 
 # Specify primary Identifier dictionary to be used
-DetDescrCnvSvc.IdDictName = "IdDictParser/FASER_IDS.xml";
+DetDescrCnvSvc.IdDictName = "FaserGeoModel/FASER_IDS.xml";
 
diff --git a/DetectorDescription/DetDescrCnvSvc/share/DetStore_joboptions.py b/DetectorDescription/DetDescrCnvSvc/share/DetStore_joboptions.py
index 172eac0761f3759443e3b4667b00fc26f8aefd41..212ff9205bde3b6becc246a9fcc81d8dcf02afff 100644
--- a/DetectorDescription/DetDescrCnvSvc/share/DetStore_joboptions.py
+++ b/DetectorDescription/DetDescrCnvSvc/share/DetStore_joboptions.py
@@ -15,7 +15,7 @@ EventPersistencySvc.CnvServices += [ "DetDescrCnvSvc" ]
 
 # Specify primary Identifier dictionary to be used
 DetDescrCnvSvc = Service( "DetDescrCnvSvc" )
-DetDescrCnvSvc.IdDictName = "IdDictParser/FASER_IDS.xml"
+DetDescrCnvSvc.IdDictName = "FaserGeoModel/FASER_IDS.xml"
 
 # Specify the tag to be used
 # DetDescrCnvSvc.IdDictGlobalTag = "initial_layout"
diff --git a/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx b/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
index a8d224a0a8beb7381038be15584a1c7cff27bb74..c54cf388c99bf361cd881360d342e7f629a0fb84 100644
--- a/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
+++ b/DetectorDescription/DetDescrCnvSvc/src/DetDescrCnvSvc.cxx
@@ -52,8 +52,9 @@ DetDescrCnvSvc::DetDescrCnvSvc(const std::string& name, ISvcLocator* svc)
     declareProperty("DoInitNeighbours",            m_do_neighbours);
 
     declareProperty("FaserIDFileName",             m_idDictFASERName);
-    // declareProperty("InDetIDFileName",             m_idDictInDetName);
-    declareProperty("ScintIDFileName",               m_idDictScintName);
+    declareProperty("ScintIDFileName",             m_idDictScintName);
+    declareProperty("TrackerIDFileName",           m_idDictTrackerName);
+    declareProperty("CaloIDFileName",              m_idDictCaloName);
 }
 
 //-------------------------------------------------------------------------
@@ -113,7 +114,8 @@ DetDescrCnvSvc::initialize()     {
     if (status != StatusCode::SUCCESS) return status;
 
     // IdHelpers
-    status =  addToDetStore(125694213, "FaserID");
+    // status =  addToDetStore(125694213, "FaserID");
+    status = addToDetStore(168050226, "FaserID");
     if (status != StatusCode::SUCCESS) return status;
     // status =  addToDetStore(2516, "ScintID");
     // if (status != StatusCode::SUCCESS) return status;
diff --git a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h
new file mode 100644
index 0000000000000000000000000000000000000000..5576efe4eb5716763e26d6dbef93179d0a114618
--- /dev/null
+++ b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserGeoModelAthenaComps.h
@@ -0,0 +1,30 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef GeoModelFaserUtilities_FaserGeoModelAthenaComps_H
+#define GeoModelFaserUtilities_FaserGeoModelAthenaComps_H
+
+#include "InDetGeoModelUtils/InDetDDAthenaComps.h"
+
+// class VetoID;
+
+
+/// Class to hold various Athena components
+template <class ID_HELPER>
+class FaserGeoModelAthenaComps : public InDetDD::AthenaComps {
+
+public:
+
+  FaserGeoModelAthenaComps();
+
+  void setIdHelper(const ID_HELPER* idHelper);
+
+  const ID_HELPER* getIdHelper() const;
+
+private:
+  const ID_HELPER* m_idHelper;
+
+};
+
+#endif // GeoModelFaserUtilities_FaserGeoModelAthenaComps_H
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/CMakeLists.txt b/DetectorDescription/GeoModel/FaserGeoModel/CMakeLists.txt
index 7e5a002f6523367648d3352e0c54c79af861a311..99774a67e0c3467ff595a75367750c9024403ee5 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/CMakeLists.txt
+++ b/DetectorDescription/GeoModel/FaserGeoModel/CMakeLists.txt
@@ -19,3 +19,7 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/geomDB_sqlite
 
 # Install python files from the package:
 atlas_install_python_modules( python/*.py )
+
+# Install xml files from the package:
+atlas_install_xmls( data/*.xml data/*.dtd )
+
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/FASER_IDS.xml b/DetectorDescription/GeoModel/FaserGeoModel/data/FASER_IDS.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b56e287f572aa415d9a7462de02fe1563ac9b56
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/FASER_IDS.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<!DOCTYPE IdDict SYSTEM "IdDict.dtd" [
+  <!ENTITY Scintillator            SYSTEM "IdDictScintillator.xml">
+  <!ENTITY Tracker                 SYSTEM "IdDictTracker.xml">
+  <!ENTITY Calorimeter             SYSTEM "IdDictCalorimeter.xml">
+  <!ENTITY FASER                   SYSTEM "IdDictFASER.xml">
+]>
+
+<IdDict IdDictVersion="v1">
+
+&Scintillator;
+&Tracker;
+&Calorimeter;
+&FASER;
+
+</IdDict>
+
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/IdDict.dtd b/DetectorDescription/GeoModel/FaserGeoModel/data/IdDict.dtd
new file mode 100644
index 0000000000000000000000000000000000000000..c90ca81a68d7b5e2baf59d3ffbb8d2c1888cfd0a
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/IdDict.dtd
@@ -0,0 +1,116 @@
+<?xml encoding="US-ASCII"?>
+
+<!-- IdDict: Identifier Dictionary
+     ==========================
+
+   o This describes the possible identifier ranges.
+
+   o One may describe several identifier dictionaries, each by a IdDictionary element.
+     A dictionary is identified by its name.
+
+   o Each dictionary may describe :
+
+      + individual identifier fields ("field"). 
+
+          - This is useful when the field values are individually labelled.
+          - purely numeric fields do not need to be explicitly
+            described, in which case, their possible ranges will be deduced from the defined
+            regions.
+
+      + identifier regions ("region").
+
+          - they are the alternate identifier ranges for this dictionary.
+          - a region specifies a contiguous range of identifiers, complete for the dictionary.
+          - it may be labelled with a "name".
+	  - it may also have a "tag" (see alternate regions)
+          - it contains the ordered list of fields with their explicit value range.
+          - each entry in this list may be 
+             - a range assigned to a given field ("range")
+             - a reference to a subregion ("reference") (see below)
+             - a reference to a complete identifier domain ("identifiers")
+	     - a list of alternative ranges which are differentiated according 
+	       to their tag ("alternate_ranges")
+
+      + alternate regions ("alternate_regions").
+
+          - this contains two or more alternate region specifications
+          which are differentiated by their "tag". An empty tag is
+          default. This allows at generation time to select a specific
+          tag.
+
+      + subregions ("subregion")
+
+          - A subregion speficies a contiguous range of identifiers, describing a 
+            subset of the identifier fields in the dictionary.
+          - it must identified by a name.
+          - the role of subregions is to be referenced by regions, and they typically describe
+            the parts that are common to several regions.
+
+-->
+
+
+
+<!ENTITY % DTD_constraint 'IdDictVersion ( v1 ) #REQUIRED'>
+
+<!ELEMENT  IdDict        ( IdDictionary )* >
+<!ATTLIST  IdDict
+           %DTD_constraint;>
+
+<!ELEMENT  IdDictionary ( field | subregion | region | alternate_regions )* >
+<!ATTLIST  IdDictionary
+           name       ID     #REQUIRED
+           version    CDATA  #IMPLIED
+           date       CDATA  #IMPLIED
+           author     CDATA  #IMPLIED>
+
+
+<!ELEMENT  field      ( label )* >
+<!ATTLIST  field
+           name       CDATA  #REQUIRED >
+
+<!ELEMENT  label      EMPTY>
+<!ATTLIST  label
+           name       CDATA  #REQUIRED
+           value      CDATA  #IMPLIED> 
+
+<!ELEMENT  alternate_regions ( region )* >
+<!ATTLIST  alternate_regions
+           name       CDATA  #IMPLIED>
+
+<!ELEMENT  region     ( range | reference | dictionary )* >
+<!ATTLIST  region
+           name       CDATA  #IMPLIED
+           group      CDATA  #IMPLIED
+           tag        CDATA  #IMPLIED
+           next_abs_eta CDATA  #IMPLIED
+	   prev_samp  CDATA  #IMPLIED
+	   next_samp  CDATA  #IMPLIED
+	   prev_subdet  CDATA  #IMPLIED
+	   next_subdet  CDATA  #IMPLIED
+	   eta0       CDATA  #IMPLIED
+	   deta       CDATA  #IMPLIED>
+
+<!ELEMENT  range      EMPTY>
+<!ATTLIST  range
+           field      CDATA  #REQUIRED
+           value      CDATA  #IMPLIED
+           minvalue   CDATA  #IMPLIED
+           maxvalue   CDATA  #IMPLIED
+           values     CDATA  #IMPLIED
+           prev_value CDATA  #IMPLIED
+           next_value CDATA  #IMPLIED
+           wraparound (TRUE | false) "false">
+
+<!ELEMENT  reference  EMPTY>
+<!ATTLIST  reference
+           subregion  IDREF  #REQUIRED>
+
+<!ELEMENT  dictionary EMPTY>
+<!ATTLIST  dictionary
+           name       IDREF  #REQUIRED>
+
+<!ELEMENT  subregion  ( range | reference | dictionary )* >
+<!ATTLIST  subregion
+           name       ID     #REQUIRED>
+
+
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/IdDictFASER.xml b/DetectorDescription/GeoModel/FaserGeoModel/data/IdDictFASER.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f5d2abd6404e10bd254092a08bebaed48fa46a1a
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/IdDictFASER.xml
@@ -0,0 +1,25 @@
+<IdDictionary name="FASER">
+
+  <field name="subdet">
+    <label name="Scintillator"    value="2"  />
+    <label name="Tracker"         value="3"  />
+    <label name="Calorimeter"     value="4"  />
+ </field>
+
+  <region>
+    <range field="subdet" value="Scintillator" />
+    <dictionary name="Scintillator" />
+  </region>
+
+  <region>
+    <range field="subdet" value="Tracker" />
+    <dictionary name="Tracker" />
+  </region>
+
+  <region>
+    <range field ="subdet" value="Calorimeter" />
+    <dictionary name="Calorimeter" />
+  </region>
+  
+</IdDictionary>
+
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
index 726b2e3f691f74ae42f8b486ffb422d42d827817..c576b956bb1d905051774fe75968d82aef52a271 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
+++ b/DetectorDescription/GeoModel/FaserGeoModel/data/geomDB.sql
@@ -170,6 +170,55 @@ CREATE TABLE IF NOT EXISTS "SCINTMATCOMPONENTS_DATA2TAG" (
 	"SCINTMATCOMPONENTS_TAG_ID" SLONGLONG,
 	"SCINTMATCOMPONENTS_DATA_ID" SLONGLONG
 );
+-- Tracker materials
+DROP TABLE IF EXISTS "TRACKERMATERIALS_DATA";
+CREATE TABLE IF NOT EXISTS "TRACKERMATERIALS_DATA" (
+	"TRACKERMATERIALS_DATA_ID" SLONGLONG UNIQUE,
+	"NAME" TEXT,
+	"DENSITY" DOUBLE
+);
+DROP TABLE IF EXISTS "TRACKERMATERIALS_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "TRACKERMATERIALS_DATA2TAG" (
+	"TRACKERMATERIALS_TAG_ID" SLONGLONG,
+	"TRACKERMATERIALS_DATA_ID" SLONGLONG
+);
+DROP TABLE IF EXISTS "TRACKERMATCOMPONENTS_DATA";
+CREATE TABLE IF NOT EXISTS "TRACKERMATCOMPONENTS_DATA" (
+	"TRACKERMATCOMPONENTS_DATA_ID" SLONGLONG UNIQUE,
+	"MATERIAL_ID" SLONGLONG,
+	"COMPNAME" TEXT,
+	"FRACTION" DOUBLE
+);
+DROP TABLE IF EXISTS "TRACKERMATCOMPONENTS_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "TRACKERMATCOMPONENTS_DATA2TAG" (
+	"TRACKERMATCOMPONENTS_TAG_ID" SLONGLONG,
+	"TRACKERMATCOMPONENTS_DATA_ID" SLONGLONG
+);
+-- Calo materials
+DROP TABLE IF EXISTS "CALOMATERIALS_DATA";
+CREATE TABLE IF NOT EXISTS "CALOMATERIALS_DATA" (
+	"CALOMATERIALS_DATA_ID" SLONGLONG UNIQUE,
+	"NAME" TEXT,
+	"DENSITY" DOUBLE
+);
+DROP TABLE IF EXISTS "CALOMATERIALS_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "CALOMATERIALS_DATA2TAG" (
+	"CALOMATERIALS_TAG_ID" SLONGLONG,
+	"CALOMATERIALS_DATA_ID" SLONGLONG
+);
+DROP TABLE IF EXISTS "CALOMATCOMPONENTS_DATA";
+CREATE TABLE IF NOT EXISTS "CALOMATCOMPONENTS_DATA" (
+	"CALOMATCOMPONENTS_DATA_ID" SLONGLONG UNIQUE,
+	"MATERIAL_ID" SLONGLONG,
+	"COMPNAME" TEXT,
+	"FRACTION" DOUBLE
+);
+DROP TABLE IF EXISTS "CALOMATCOMPONENTS_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "CALOMATCOMPONENTS_DATA2TAG" (
+	"CALOMATCOMPONENTS_TAG_ID" SLONGLONG,
+	"CALOMATCOMPONENTS_DATA_ID" SLONGLONG
+);
+--
 DROP TABLE IF EXISTS "FASERCOMMON_DATA";
 CREATE TABLE IF NOT EXISTS "FASERCOMMON_DATA" ( 
 	"FASERCOMMON_DATA_ID" SLONGLONG UNIQUE,
@@ -182,12 +231,70 @@ CREATE TABLE IF NOT EXISTS "FASERCOMMON_DATA2TAG" (
 	"FASERCOMMON_TAG_ID" SLONGLONG,
 	"FASERCOMMON_DATA_ID" SLONGLONG
 );
+-- 
+DROP TABLE IF EXISTS "VETOSWITCHES_DATA";
+CREATE TABLE IF NOT EXISTS "VETOSWITCHES_DATA" ( 
+	"VETOSWITCHES_DATA_ID" SLONGLONG UNIQUE,
+	"DETECTORNAME" TEXT ,
+	"USEMAGFIELDSVC" INT ,
+	"COSMICLAYOUT" INT ,
+	"VERSIONNAME" TEXT ,
+	"LAYOUT" TEXT ,
+	"DESCRIPTION" TEXT
+);
+DROP TABLE IF EXISTS "VETOSWITCHES_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "VETOSWITCHES_DATA2TAG" (
+	"VETOSWITCHES_TAG_ID" SLONGLONG,
+	"VETOSWITCHES_DATA_ID" SLONGLONG
+);
+--
+DROP TABLE IF EXISTS "SCINTIDENTIFIER_DATA";
+CREATE TABLE IF NOT EXISTS "SCINTIDENTIFIER_DATA" ( 
+	"SCINTIDENTIFIER_DATA_ID" SLONGLONG UNIQUE,
+	"DICT_NAME" TEXT ,
+	"DICT_FILENAME" TEXT ,
+	"DICT_TAG" TEXT 
+);
+DROP TABLE IF EXISTS "SCINTIDENTIFIER_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "SCINTIDENTIFIER_DATA2TAG" (
+	"SCINTIDENTIFIER_TAG_ID" SLONGLONG,
+	"SCINTIDENTIFIER_DATA_ID" SLONGSLONG
+);
+-- 
+DROP TABLE IF EXISTS "TRACKERIDENTIFIER_DATA";
+CREATE TABLE IF NOT EXISTS "TRACKERIDENTIFIER_DATA" ( 
+	"TRACKERIDENTIFIER_DATA_ID" SLONGLONG UNIQUE,
+	"DICT_NAME" TEXT ,
+	"DICT_FILENAME" TEXT ,
+	"DICT_TAG" TEXT 
+);
+DROP TABLE IF EXISTS "TRACKERIDENTIFIER_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "TRACKERIDENTIFIER_DATA2TAG" (
+	"TRACKERIDENTIFIER_TAG_ID" SLONGLONG,
+	"TRACKERIDENTIFIER_DATA_ID" SLONGSLONG
+);
+-- 
+DROP TABLE IF EXISTS "CALOIDENTIFIER_DATA";
+CREATE TABLE IF NOT EXISTS "CALOIDENTIFIER_DATA" ( 
+	"CALOIDENTIFIER_DATA_ID" SLONGLONG UNIQUE,
+	"DICT_NAME" TEXT ,
+	"DICT_FILENAME" TEXT ,
+	"DICT_TAG" TEXT 
+);
+DROP TABLE IF EXISTS "CALOIDENTIFIER_DATA2TAG";
+CREATE TABLE IF NOT EXISTS "CALOIDENTIFIER_DATA2TAG" (
+	"CALOIDENTIFIER_TAG_ID" SLONGLONG,
+	"CALOIDENTIFIER_DATA_ID" SLONGSLONG
+);
 --
 -- Part 2a: HVS data
 --
 -- Data for the HVS_NODE table
 INSERT INTO "HVS_NODE" VALUES (0, "FASER", 0, 1, NULL);
 INSERT INTO "HVS_NODE" VALUES (1, "Scintillator", 0, 1, NULL);
+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);
@@ -199,8 +306,18 @@ INSERT INTO "HVS_NODE" VALUES (1001, "ScintPlate", 1, 0, NULL);
 INSERT INTO "HVS_NODE" VALUES (1002, "ScintStation", 1, 0, NULL);
 INSERT INTO "HVS_NODE" VALUES (1003, "ScintMaterials", 1, 0, NULL);
 INSERT INTO "HVS_NODE" VALUES (1004, "ScintMatComponents", 1, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (2003, "TrackerMaterials", 2, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (2004, "TrackerMatComponents", 2, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (3003, "CaloMaterials", 3, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (3004, "CaloMatComponents", 3, 0, NULL);
 INSERT INTO "HVS_NODE" VALUES (110,  "FaserCommon", 0, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (1100, "VetoSwitches", 11, 0, NULL );
+INSERT INTO "HVS_NODE" VALUES (1005, "ScintIdentifier", 1, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (2005, "TrackerIdentifier", 2, 0, NULL);
+INSERT INTO "HVS_NODE" VALUES (3005, "CaloIdentifier", 3, 0, NULL);
 -- Data for the HVS_TAG2NODE table
+-- Command to get midnight of current date in UT:
+-- date -u --date '00:00 today' +%s
 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);
@@ -214,7 +331,18 @@ INSERT INTO "HVS_TAG2NODE" VALUES (1001, "ScintPlate-00", 100009, NULL, 0, 0, 15
 INSERT INTO "HVS_TAG2NODE" VALUES (1002, "ScintStation-00", 100010, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (1003, "ScintMaterials-00", 100011, NULL, 0, 0, 1549238400000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (1004, "ScintMatComponents-00", 100012, NULL, 0, 0, 1549238400000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (2003, "TrackerMaterials-00", 100021, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (2004, "TrackerMatComponents-00", 100022, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (3003, "CaloMaterials-00", 100023, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (3004, "CaloMatComponents-00", 100024, NULL, 0, 0, 1550448000000000000, NULL, 22);
 INSERT INTO "HVS_TAG2NODE" VALUES (110,  "FaserCommon-00", 100013, NULL, 0, 0, 1549324800000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (1100, "VetoSwitches-00", 100014, NULL, 0, 0, 1550361600000000000 ,NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (11, "Veto-00", 100015, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (12, "Trigger-00", 100019, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (13, "Preshower-00", 100020, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (1005, "ScintIdentifier-00", 100016, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (2005, "TrackerIdentifier-00", 100017, NULL, 0, 0, 1550448000000000000, NULL, 22);
+INSERT INTO "HVS_TAG2NODE" VALUES (3005, "CaloIdentifier-00", 100018, NULL, 0, 0, 1550448000000000000, NULL, 22);
 -- Data for the HVS_LTAG2LTAG table
 INSERT INTO "HVS_LTAG2LTAG" VALUES (0,   100000, 1,    100001);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (0,   100000, 2,    100002);
@@ -228,22 +356,44 @@ INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 1001, 100009);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 1002, 100010);
 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 (3,   100003, 3003, 100023);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (3,   100003, 3004, 100024);
 INSERT INTO "HVS_LTAG2LTAG" VALUES (0,   100000, 110,  100013);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 11,   100015);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 12,   100019);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 13,   100020);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (11,  100015, 1100, 100014);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (1,   100001, 1005, 100016);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (2,   100002, 2005, 100017);
+INSERT INTO "HVS_LTAG2LTAG" VALUES (3,   100003, 3005, 100018);
 -- Data for the HVS_TAGCACHE table
-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", "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);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "StdMaterials",       "StdMaterials-00",       100006);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "StdMatComponents",   "StdMatComponents-00",   100007);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Elements",           "Elements-00",           100008);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintPlate",         "ScintPlate-00",         100009);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintStation",       "ScintStation-00",       100010);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintMaterials",     "ScintMaterials-00",     100011);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintMatComponents", "ScintMatComponents-00", 100012);
-INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "FaserCommon",        "FaserCommon-00",        100013);
+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", "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);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "StdMaterials",       "StdMaterials-00",         100006);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "StdMatComponents",   "StdMatComponents-00",     100007);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Elements",           "Elements-00",             100008);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintPlate",         "ScintPlate-00",           100009);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintStation",       "ScintStation-00",         100010);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintMaterials",     "ScintMaterials-00",       100011);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintMatComponents", "ScintMatComponents-00",   100012);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TrackerMaterials",     "TrackerMaterials-00",     100021);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TrackerMatComponents", "TrackerMatComponents-00", 100022);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "CaloMaterials",     "CaloMaterials-00",         100023);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "CaloMatComponents", "CaloMatComponents-00",     100024);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "FaserCommon",        "FaserCommon-00",          100013);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "VetoSwitches",       "VetoSwitches-00",         100014);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Veto",               "Veto-00",                 100015);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Trigger",            "Trigger-00",              100019);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "Preshower",          "Preshower-00",            100020);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "ScintIdentifier",    "ScintIdentifier-00",      100016);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "TrackerIdentifier",  "TrackerIdentifier-00",    100017);
+INSERT INTO "HVS_TAGCACHE" VALUES ("FASER-00", "CaloIdentifier",     "CaloIdentifier-00",       100018);
 -- 
 --
 -- Part 2b: Content (Leaf node) data
@@ -807,4 +957,20 @@ INSERT INTO "SCINTMATCOMPONENTS_DATA2TAG" VALUES (100012, 1);
 --
 INSERT INTO "FASERCOMMON_DATA" VALUES (0, "RUN3", "UNDEFINED", "UNDEFINED");
 INSERT INTO "FASERCOMMON_DATA2TAG" VALUES (100013, 0);
+--
+--
+INSERT INTO "VETOSWITCHES_DATA" VALUES  (0, "Veto", 1, 0, "GEO", "Development", "Baseline geometry");
+INSERT INTO "VETOSWITCHES_DATA2TAG" VALUES (100014, 0);
+--
+--
+INSERT INTO "SCINTIDENTIFIER_DATA" VALUES (0, "Scintillator", "ScintIdDictFiles/IdDictScintillator.xml", "Baseline layout");
+INSERT INTO "SCINTIDENTIFIER_DATA2TAG" VALUES (100016, 0);
+--
+--
+INSERT INTO "TRACKERIDENTIFIER_DATA" VALUES (0, "Tracker", "TrackerIdDictFiles/IdDictTracker.xml", "Baseline layout");
+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);
 COMMIT;
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py b/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce5e989cb7002c32f80d41ae3d282baf7d3c316c
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/FaserGeoModelConfig.py
@@ -0,0 +1,16 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+
+def FaserGeometryCfg (flags):
+    acc = ComponentAccumulator()
+
+    from FaserGeoModel.ScintGMConfig import ScintGeometryCfg
+    acc.merge(ScintGeometryCfg(flags))
+    # if (flags.Detector.Simulate and flags.Beam.Type == "cosmics") or flags.Detector.SimulateCavern:
+    #     from CavernInfraGeoModel.CavernInfraGeoModelConf import CavernInfraDetectorTool
+    #     gms.DetectorTools += [ CavernInfraDetectorTool() ]
+    return acc
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
index fd8bdd276ff83b1fca75c3f4723f8be01d4abf95..9bd2f0da3ed983597facf0b56eef842f0290c0e8 100644
--- a/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/GeoModelInit.py
@@ -16,11 +16,30 @@ def _setupGeoModel():
     import EventInfoMgt.EventInfoMgtInit
  
     from GeoModelSvc.GeoModelSvcConf import GeoModelSvc
-    svcMgr += GeoModelSvc()
+    geoModelSvc = GeoModelSvc()
+    svcMgr += geoModelSvc
     theApp.CreateSvc += [ "GeoModelSvc"]
 
     # Set up detector tools here
 
+    if not hasattr(svcMgr,'ScintGeometryDBSvc'):
+        from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
+        svcMgr+=GeometryDBSvc("ScintGeometryDBSvc")
+
+    # from AthenaCommon import CfgGetter
+    from ScintGeoModel.ScintGeoModelConf import VetoDetectorTool
+    vetoDetectorTool = VetoDetectorTool( DetectorName = "Veto",
+                                         Alignable = True,
+                                         RDBAccessSvc = "RDBAccessSvc",
+                                         GeometryDBSvc = "ScintGeometryDBSvc",
+                                         GeoDbTagSvc = "GeoDbTagSvc")
+
+    geoModelSvc.DetectorTools += [ vetoDetectorTool ]
+
+##        svcMgr.GeoModelSvc.DetectorTools['VetoDetectorTool'].useDynamicAlignFolders = InDetGeometryFlags.useDynamicAlignFolders()
+
+
+
     pass
 
 ## setup GeoModel at module import
diff --git a/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py b/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..3e2bbfe0be89493d4546b23b5fd573b6add3bf1c
--- /dev/null
+++ b/DetectorDescription/GeoModel/FaserGeoModel/python/ScintGMConfig.py
@@ -0,0 +1,70 @@
+#
+#  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+#
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
+
+# 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 ScintGeoModel.ScintGeoModelConfig import ScintGeometryCfg
+    acc.merge(ScintGeometryCfg( flags ))
+    return acc
+
+
+if __name__ == "__main__":
+  import os
+  from AthenaCommon.Logging import log
+  from AthenaCommon.Constants import DEBUG
+  from AthenaCommon.Configurable import Configurable
+  from AthenaConfiguration.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
+  from AthenaConfiguration.TestDefaults import defaultTestFiles
+  # Provide MC input
+  ConfigFlags.Input.Files = defaultTestFiles.HITS
+  ConfigFlags.IOVDb.GlobalTag = "OFLCOND-MC16-SDR-16"
+  ConfigFlags.Detector.SimulatePixel = True
+  ConfigFlags.Detector.SimulateSCT   = 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
+  acc = MainServicesSerialCfg()
+  acc.merge(PoolReadCfg(ConfigFlags))
+  acc.merge(InDetGeometryCfg(ConfigFlags)) # FIXME This sets up the whole ID geometry would be nicer just to set up min required
+  #acc.getService("StoreGateSvc").Dump=True
+  acc.getService("ConditionStore").Dump=True
+  acc.printConfig(withDetails=True)
+  f=open('InDetGMCfg2.pkl','w')
+  acc.store(f)
+  f.close()
+  ConfigFlags.dump()
+  # Execute and finish
+  acc.run(maxEvents=3)
diff --git a/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx b/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
index e962e41496eedc109ce576f71bedd9803c5561d6..3455ceb3b62cd4d3d0ebd9fec4b2830caccb35c4 100644
--- a/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
+++ b/DetectorDescription/GeoModel/GeoModelFaserUtilities/src/DecodeFaserVersionKey.cxx
@@ -33,16 +33,24 @@ template <class T>
 void DecodeFaserVersionKey::defineTag(const T* svc, const std::string & node)
 {
   std::string nodeOverrideTag;
-  std::string indetOverrideTag; // Indet has two levels.
+  std::string scintOverrideTag; // Scint has two levels.
   if (node == "FASER") {
     nodeOverrideTag = "";
   } else if (node == "Scintillator") {
     nodeOverrideTag = svc->scintVersionOverride();
-  // } else if (node == "SCT") {
-  //   indetOverrideTag = svc->inDetVersionOverride();
-  //   nodeOverrideTag  = svc->SCT_VersionOverride();
-  // } else if (node == "Calorimeter") {
-  //   nodeOverrideTag  = svc->caloVersionOverride();
+  } else if (node == "Veto") {
+    scintOverrideTag = svc->scintVersionOverride();
+    nodeOverrideTag = svc->vetoVersionOverride();
+  } else if (node == "Trigger") {
+    scintOverrideTag = svc->scintVersionOverride();
+    nodeOverrideTag = svc->triggerVersionOverride();
+  } else if (node == "Preshower") {
+    scintOverrideTag = svc->scintVersionOverride();
+    nodeOverrideTag = svc->preshowerVersionOverride();
+  } else if (node == "Tracker") {
+    nodeOverrideTag  = svc->trackerVersionOverride();
+  } else if (node == "Calorimeter") {
+    nodeOverrideTag  = svc->caloVersionOverride();
   } else {
     std::cout << "DecodeFaserVersionKey passed an unknown node:" << node << std::endl; 
     nodeOverrideTag = "";
@@ -52,6 +60,20 @@ void DecodeFaserVersionKey::defineTag(const T* svc, const std::string & node)
   m_tag = svc->faserVersion();
   m_node = "FASER";
   
+  // If scintOverrideTag is specified (and is not just "CUSTOM") then override with the scint tag.
+  std::string scintTag;
+  if (!scintOverrideTag.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(scintOverrideTag, scintTag);
+  }
+  if (!scintTag.empty()) {
+    m_tag = scintTag;
+    m_node = "Scintillator";
+  }
+
+
   // Finally if subsystem tag is overriden then use that.
   std::string outputTag;
   m_custom = getCustomTag(nodeOverrideTag, outputTag);
diff --git a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
index 7b7a6722a62ca7b9385a1c424bdf7adef86a884d..a43d7f2674180984c8ef4f8396b1e90be8e88a15 100644
--- a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoDbTagSvc.h
@@ -29,14 +29,20 @@ class IGeoDbTagSvc : virtual public IInterface {
 
   virtual const std::string & faserVersion()                    const =0;
   virtual const std::string & scintVersion()                    const =0;
-  // virtual const std::string & SCT_Version()                     const =0;
-  // virtual const std::string & caloVersion()                     const =0;
+  virtual const std::string & vetoVersion()                     const =0; 
+  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 & caloVersion()                     const =0;
   // virtual const std::string & magFieldVersion()                 const =0;
   // virtual const std::string & cavernInfraVersion()              const =0;
   
   virtual const std::string & scintVersionOverride()            const =0;
-  // virtual const std::string & SCT_VersionOverride()             const =0;
-  // virtual const std::string & caloVersionOverride()             const =0;
+  virtual const std::string & vetoVersionOverride()             const =0;
+  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 & 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 a6bda8e0508411869fdcbd18dbf6c401625199ef..cbedc72314a1f51d942e385f2b2662ac1d0bf0ff 100644
--- a/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelInterfaces/GeoModelInterfaces/IGeoModelSvc.h
@@ -27,14 +27,20 @@ public:
 
     virtual const std::string & faserVersion()         const =0;
     virtual const std::string & scintVersion()         const =0;
-    // virtual const std::string & SCT_Version()          const =0;
-    // virtual const std::string & caloVersion()          const =0;
+    virtual const std::string & vetoVersion()          const =0;
+    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 & caloVersion()          const =0;
     // virtual const std::string & magFieldVersion()      const =0;
     // virtual const std::string & cavernInfraVersion()   const =0;
 
-    virtual const std::string & scintVersionOverride() const =0;
-    // virtual const std::string & SCT_VersionOverride()  const =0;
-    // virtual const std::string & caloVersionOverride()  const =0;
+    virtual const std::string & scintVersionOverride()     const =0;
+    virtual const std::string & vetoVersionOverride()      const =0;
+    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 & caloVersionOverride()      const =0;
     // virtual const std::string & magFieldVersionOverride()    const =0;
     // virtual const std::string & cavernInfraVersionOverride() const =0;
     
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/share/geoDebug.py b/DetectorDescription/GeoModel/GeoModelSvc/share/geoDebug.py
index fc263220df9ef442ba7ee5c773fe839405802272..8a4bbb99e0006f381c8c1f8039af811123ee2ef2 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/share/geoDebug.py
+++ b/DetectorDescription/GeoModel/GeoModelSvc/share/geoDebug.py
@@ -37,3 +37,9 @@ theApp.EvtMax = 1
 
 # This only affects conditions, not geometry
 #include('PyJobTransforms/UseFrontier.py')
+
+# Quiet some very spammy (on VERBOSE) components we don't care about
+from AthenaCommon.AppMgr import ServiceMgr as svcMgr
+svcMgr.ClassIDSvc.OutputLevel = INFO
+svcMgr.AthenaSealSvc.OutputLevel = INFO
+svcMgr.IncidentSvc.OutputLevel = INFO
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
index 3e2e9cf8558d9efe641d8f3ff8573d3e5a51e62c..50b794ec9f8aafd290d64e12fd4c1f09b6d95bcb 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.cxx
@@ -71,13 +71,25 @@ StatusCode GeoDbTagSvc::setupTags()
 		    ? rdbAccessSvc->getChildTag("Scintillator", m_FaserVersion, "FASER", "FASERDD") 
 		    : m_ScintVersionOverride);
 
-  // m_SCT_Version = (m_SCT_VersionOverride.empty()
-	// 	   ? rdbAccessSvc->getChildTag("SCT",m_InDetVersion,"InnerDetector")
-	// 	   : m_SCT_VersionOverride);
+  m_VetoVersion = (m_VetoVersionOverride.empty() 
+		    ? rdbAccessSvc->getChildTag("Veto", m_ScintVersion, "Scintillator", "FASERDD") 
+		    : m_VetoVersionOverride);
 
-  // m_CaloVersion = (m_CaloVersionOverride.empty()
-  //                  ? rdbAccessSvc->getChildTag("Calorimeter",m_AtlasVersion,"ATLAS")
-	// 	   : m_CaloVersionOverride);
+  m_TriggerVersion = (m_TriggerVersionOverride.empty() 
+		    ? rdbAccessSvc->getChildTag("Trigger", m_ScintVersion, "Scintillator", "FASERDD") 
+		    : m_TriggerVersionOverride);
+
+  m_PreshowerVersion = (m_PreshowerVersionOverride.empty() 
+		    ? rdbAccessSvc->getChildTag("Preshower", m_ScintVersion, "Scintillator", "FASERDD") 
+		    : m_PreshowerVersionOverride);
+
+  m_TrackerVersion = (m_TrackerVersionOverride.empty()
+		   ? rdbAccessSvc->getChildTag("Tracker", m_FaserVersion, "FASER", "FASERDD")
+		   : m_TrackerVersionOverride);
+
+  m_CaloVersion = (m_CaloVersionOverride.empty()
+                   ? rdbAccessSvc->getChildTag("Calorimeter", m_FaserVersion,"FASER", "FASERDD")
+		   : m_CaloVersionOverride);
 
   // m_MagFieldVersion = (m_MagFieldVersionOverride.empty()
 	// 	       ? rdbAccessSvc->getChildTag("MagneticField",m_AtlasVersion,"ATLAS")
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
index f31902469f5e1f4d8ae50f47856b73401a7a8010..f93c1c4310dc6df62a9a7e0caabb02af2229493f 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoDbTagSvc.h
@@ -29,8 +29,11 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
 
   void setFaserVersion(const std::string& tag)                     { m_FaserVersion=tag; }
   void setScintVersionOverride(const std::string& tag)             { m_ScintVersionOverride=tag; }
-  // void setSCT_VersionOverride(const std::string& tag)              { m_SCT_VersionOverride=tag; }
-  // void setCaloVersionOverride(const std::string& tag)              { m_CaloVersionOverride=tag; }
+  void setVetoVersionOverride(const std::string& tag)              { m_VetoVersionOverride=tag; }
+  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 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; }
 
@@ -40,14 +43,20 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   // ______________________________ IGeoDbTagSvc ____________________________________
   const std::string & faserVersion()                     const { return m_FaserVersion; }
   const std::string & scintVersionOverride()             const { return m_ScintVersionOverride; }
-  // const std::string & SCT_VersionOverride()              const { return m_SCT_VersionOverride; }
-  // const std::string & caloVersionOverride()              const { return m_CaloVersionOverride; }
+  const std::string & vetoVersionOverride()              const { return m_VetoVersionOverride; }
+  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 & caloVersionOverride()              const { return m_CaloVersionOverride; }
   // const std::string & magFieldVersionOverride()          const { return m_MagFieldVersionOverride; }
   // const std::string & cavernInfraVersionOverride()       const { return m_CavernInfraVersionOverride; }
 
   const std::string & scintVersion()                     const { return m_ScintVersion; }
-  // const std::string & SCT_Version()                      const { return m_SCT_Version; }
-  // const std::string & caloVersion()                      const { return m_CaloVersion; }
+  const std::string & vetoVersion()                      const { return m_VetoVersion; }
+  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 & caloVersion()                      const { return m_CaloVersion; }
   // const std::string & magFieldVersion()                  const { return m_MagFieldVersion; }
   // const std::string & cavernInfraVersion()               const { return m_CavernInfraVersion; }
 
@@ -57,14 +66,20 @@ class GeoDbTagSvc : public AthService, virtual public IGeoDbTagSvc
   std::string m_FaserVersion;
 
   std::string m_ScintVersion;
-  // std::string m_SCT_Version;
-  // std::string m_CaloVersion;
+  std::string m_VetoVersion;
+  std::string m_TriggerVersion;
+  std::string m_PreshowerVersion;
+  std::string m_TrackerVersion;
+  std::string m_CaloVersion;
   // std::string m_MagFieldVersion;
   // std::string m_CavernInfraVersion;
 
   std::string m_ScintVersionOverride;
-  // std::string m_SCT_VersionOverride;
-  // std::string m_CaloVersionOverride;
+  std::string m_VetoVersionOverride;
+  std::string m_TriggerVersionOverride;
+  std::string m_PreshowerVersionOverride;
+  std::string m_TrackerVersionOverride;
+  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 722d941d68fdc4aabf834f40ee4de5dd557738c6..64aaed74d9c27aa3dcf23b5e79e15db909d2a152 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.cxx
@@ -51,8 +51,11 @@ GeoModelSvc::GeoModelSvc(const std::string& name,ISvcLocator* svc)
   declareProperty( "PrintMaterials",              m_printMaterials);
   declareProperty( "FaserVersion",                m_FaserVersion);
   declareProperty( "ScintVersionOverride",        m_ScintVersionOverride);
-  // declareProperty( "SCT_VersionOverride",         m_SCT_VersionOverride);
-  // declareProperty( "CaloVersionOverride",         m_CaloVersionOverride);
+  declareProperty( "VetoVersionOverride",         m_VetoVersionOverride);
+  declareProperty( "TriggerVersionOverride",      m_TriggerVersionOverride);
+  declareProperty( "PreshowerVersionOverride",    m_PreshowerVersionOverride);
+  declareProperty( "TrackerVersionOverride",      m_TrackerVersionOverride);
+  declareProperty( "CaloVersionOverride",         m_CaloVersionOverride);
   // declareProperty( "MagFieldVersionOverride",     m_MagFieldVersionOverride);
   // declareProperty( "CavernInfraVersionOverride",  m_CavernInfraVersionOverride);
   declareProperty( "AlignCallbacks",              m_callBackON);
@@ -153,15 +156,15 @@ StatusCode GeoModelSvc::initialize()
     }
 
     // Retrieve a tool for Calo Alignments
-    if(m_useCaloAlign) {
-      IGeoAlignTool* calo_align{nullptr};
-      if(m_toolSvc->retrieveTool("CaloAlignTool",calo_align)!=StatusCode::SUCCESS) {
-        ATH_MSG_INFO("Unable to retrieve CaloAlignTool. No Calo alignments in this job");
-      }
-      else {
-        ATH_MSG_DEBUG("CaloAligntTool retrieved successfully");
-      }
-    }
+    // if(m_useCaloAlign) {
+    //   IGeoAlignTool* calo_align{nullptr};
+    //   if(m_toolSvc->retrieveTool("CaloAlignTool",calo_align)!=StatusCode::SUCCESS) {
+    //     ATH_MSG_INFO("Unable to retrieve CaloAlignTool. No Calo alignments in this job");
+    //   }
+    //   else {
+    //     ATH_MSG_DEBUG("CaloAligntTool retrieved successfully");
+    //   }
+    // }
 
     // Register a callback on TagInfo in order to compare geometry configurations defined in job options
     // to the one read from the input file
@@ -220,10 +223,13 @@ StatusCode GeoModelSvc::queryInterface(const InterfaceID& riid, void** ppvInterf
 StatusCode GeoModelSvc::geoInit()
 {
   ATH_MSG_DEBUG("** Building geometry configuration: ");
-  ATH_MSG_DEBUG("* FASER tag: " << m_FaserVersion);
-  ATH_MSG_DEBUG("* Scint tag: " << m_ScintVersionOverride);
-  // ATH_MSG_DEBUG("* SCT   tag: " << m_SCT_VersionOverride);
-  // ATH_MSG_DEBUG("* Calo  tag: " << m_CaloVersionOverride);
+  ATH_MSG_DEBUG("* FASER     tag: " << m_FaserVersion);
+  ATH_MSG_DEBUG("* Scint     tag: " << m_ScintVersionOverride);
+  ATH_MSG_DEBUG("* Veto      tag: " << m_VetoVersionOverride);
+  ATH_MSG_DEBUG("* Trigger   tag: " << m_TriggerVersionOverride);
+  ATH_MSG_DEBUG("* Preshower tag: " << m_PreshowerVersionOverride);
+  ATH_MSG_DEBUG("* Tracker   tag: " << m_TrackerVersionOverride);
+  ATH_MSG_DEBUG("* Calo      tag: " << m_CaloVersionOverride);
   // ATH_MSG_DEBUG("* MagField  tag: " << m_MagFieldVersionOverride);
   // ATH_MSG_DEBUG("* CavernInfra  tag: " << m_CavernInfraVersionOverride);
   
@@ -285,8 +291,11 @@ StatusCode GeoModelSvc::geoInit()
 
   dbTagSvc->setFaserVersion(m_FaserVersion);
   dbTagSvc->setScintVersionOverride(m_ScintVersionOverride);
-  // dbTagSvc->setSCT_VersionOverride(m_SCT_VersionOverride);
-  // dbTagSvc->setCaloVersionOverride(m_CaloVersionOverride);
+  dbTagSvc->setVetoVersionOverride(m_VetoVersionOverride);
+  dbTagSvc->setTriggerVersionOverride(m_TriggerVersionOverride);
+  dbTagSvc->setPreshowerVersionOverride(m_PreshowerVersionOverride);
+  dbTagSvc->setTrackerVersionOverride(m_TrackerVersionOverride);
+  dbTagSvc->setCaloVersionOverride(m_CaloVersionOverride);
   // dbTagSvc->setMagFieldVersionOverride(m_MagFieldVersionOverride);
   // dbTagSvc->setCavernInfraVersionOverride(m_CavernInfraVersionOverride);
 
@@ -424,8 +433,16 @@ StatusCode GeoModelSvc::compareTags(IOVSVC_CALLBACK_ARGS)
     }
     else if(tagPairName=="GeoScint")
       tagsMatch = m_ScintVersionOverride == pair.second;
-    // else if(tagPairName=="GeoSCT")
-    //   tagsMatch = m_SCT_VersionOverride == pair.second;
+    else if(tagPairName=="GeoVeto")
+      tagsMatch = m_VetoVersionOverride == pair.second;
+    else if(tagPairName=="GeoTrigger")
+      tagsMatch = m_TriggerVersionOverride == pair.second;
+    else if(tagPairName=="GeoPreshower")
+      tagsMatch = m_PreshowerVersionOverride == pair.second;
+    else if(tagPairName=="GeoTracker")
+      tagsMatch = m_TrackerVersionOverride == pair.second;
+    else if(tagPairName=="GeoCalo")
+      tagsMatch = m_CaloVersionOverride == pair.second;
     
     if(!tagsMatch) break;
   }
@@ -434,23 +451,32 @@ StatusCode GeoModelSvc::compareTags(IOVSVC_CALLBACK_ARGS)
     msg((m_ignoreTagDifference? MSG::WARNING : MSG::ERROR)) 
       << "*** *** Geometry configured through jobOptions does not match TagInfo tags! *** ***" << endmsg;
     ATH_MSG_INFO("** Job Option configuration: ");
-    ATH_MSG_INFO("* FASER tag: " << m_FaserVersion);
-    ATH_MSG_INFO("* Scint tag: " << m_ScintVersionOverride);
-    // ATH_MSG_INFO("* SCT   tag: " << m_SCT_VersionOverride);
-    // ATH_MSG_INFO("* Calo  tag: " << m_CaloVersionOverride);
+    ATH_MSG_INFO("* FASER       tag: " << m_FaserVersion);
+    ATH_MSG_INFO("* Scint       tag: " << m_ScintVersionOverride);
+    ATH_MSG_INFO("*   Veto      tag: " << m_VetoVersionOverride);
+    ATH_MSG_INFO("*   Trigger   tag: " << m_TriggerVersionOverride);
+    ATH_MSG_INFO("*   Preshower tag: " << m_PreshowerVersionOverride);
+    ATH_MSG_INFO("* Tracker     tag: " << m_TrackerVersionOverride);
+    ATH_MSG_INFO("* Calo        tag: " << m_CaloVersionOverride);
     // ATH_MSG_INFO("* MagField  tag: " << m_MagFieldVersionOverride);
     // ATH_MSG_INFO("* CavernInfra  tag: " << m_CavernInfraVersionOverride);
     ATH_MSG_INFO("** TAG INFO configuration: ");
     for (const auto& pair : pairs) {
       std::string tagPairName = pair.first;
       if(tagPairName=="GeoFaser")
-        ATH_MSG_INFO("* FASER tag: " << pair.second);
+        ATH_MSG_INFO("*FASER   tag: " << pair.second);
       else if(tagPairName=="GeoScint")
-        ATH_MSG_INFO("*Scint  tag: " << pair.second);
-      // else if(tagPairName=="GeoSCT")
-      //   ATH_MSG_INFO("*SCT  tag: " << pair.second);
-      // else if(tagPairName=="GeoCalo")
-      //   ATH_MSG_INFO("*Calo  tag: " << pair.second);
+        ATH_MSG_INFO("*Scint   tag: " << pair.second);
+      else if(tagPairName=="GeoVeto")
+        ATH_MSG_INFO("*Veto      tag: " << pair.second);
+      else if(tagPairName=="GeoTrigger")
+        ATH_MSG_INFO("*Trigger   tag: " << pair.second);
+      else if(tagPairName=="GeoPreshower")
+        ATH_MSG_INFO("*Preshower tag: " << pair.second);
+      else if(tagPairName=="GeoTracker")
+        ATH_MSG_INFO("*Tracker tag: " << pair.second);
+      else if(tagPairName=="GeoCalo")
+        ATH_MSG_INFO("*Calo    tag: " << pair.second);
       // else if(tagPairName=="GeoMagField")
       //   ATH_MSG_INFO("*MagField  tag: " << pair.second);
       // else if(tagPairName=="GeoCavernInfra")
@@ -490,19 +516,40 @@ StatusCode GeoModelSvc::fillTagInfo() const
     }
   } 
 
-  // if(m_SCT_VersionOverride != "") {
-  //   if(m_tagInfoMgr->addTag("GeoSCT",m_SCT_VersionOverride).isFailure()) {
-  //     ATH_MSG_ERROR("GeoModelSvc SCT tag: " << m_SCT_VersionOverride << " not added to TagInfo ");
-  //     return StatusCode::FAILURE; 
-  //   }
-  // }
+  if(m_VetoVersionOverride != "") {
+    if(m_tagInfoMgr->addTag("GeoVeto",m_VetoVersionOverride).isFailure()) {
+      ATH_MSG_ERROR("GeoModelSvc Veto tag: " << m_VetoVersionOverride << " not added to TagInfo " );
+      return StatusCode::FAILURE;
+    }
+  }
 
-  // if(m_CaloVersionOverride != "") {
-  //   if(m_tagInfoMgr->addTag("GeoCalo",m_CaloVersionOverride).isFailure()) {
-  //     ATH_MSG_ERROR("GeoModelSvc Calo tag: " << m_CaloVersionOverride << " not added to TagInfo ");
-  //     return StatusCode::FAILURE; 
-  //   }
-  // }
+  if(m_TriggerVersionOverride != "") {
+    if(m_tagInfoMgr->addTag("GeoTrigger",m_TriggerVersionOverride).isFailure()) {
+      ATH_MSG_ERROR("GeoModelSvc Trigger tag: " << m_TriggerVersionOverride << " not added to TagInfo " );
+      return StatusCode::FAILURE;
+    }
+  }
+
+  if(m_PreshowerVersionOverride != "") {
+    if(m_tagInfoMgr->addTag("GeoPreshower",m_PreshowerVersionOverride).isFailure()) {
+      ATH_MSG_ERROR("GeoModelSvc Preshower tag: " << m_PreshowerVersionOverride << " not added to TagInfo " );
+      return StatusCode::FAILURE;
+    }
+  }
+
+  if(m_TrackerVersionOverride != "") {
+    if(m_tagInfoMgr->addTag("GeoTracker",m_TrackerVersionOverride).isFailure()) {
+      ATH_MSG_ERROR("GeoModelSvc Tracker tag: " << m_TrackerVersionOverride << " not added to TagInfo ");
+      return StatusCode::FAILURE; 
+    }
+  }
+
+  if(m_CaloVersionOverride != "") {
+    if(m_tagInfoMgr->addTag("GeoCalo",m_CaloVersionOverride).isFailure()) {
+      ATH_MSG_ERROR("GeoModelSvc Calo tag: " << m_CaloVersionOverride << " not added to TagInfo ");
+      return StatusCode::FAILURE; 
+    }
+  }
 
   // if(m_MagFieldVersionOverride != "") {
   //   if(m_tagInfoMgr->addTag("GeoMagField",m_MagFieldVersionOverride).isFailure()) {
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
index ba7a19b560a9ceb386e53af0bf8c6b4c7bf0b387..10682709feb350230ac8f86614ecfe9b913cd067 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/GeoModelSvc.h
@@ -73,8 +73,11 @@ private:
     std::string           m_FaserVersion;
 
     std::string           m_ScintVersionOverride;
-    // std::string           m_SCT_VersionOverride;
-    // std::string           m_CaloVersionOverride;
+    std::string           m_VetoVersionOverride;
+    std::string           m_TriggerVersionOverride;
+    std::string           m_PreshowerVersionOverride;
+    std::string           m_TrackerVersionOverride;
+    std::string           m_CaloVersionOverride;
     // std::string           m_MagFieldVersionOverride;
     // std::string           m_CavernInfraVersionOverride;
 
@@ -89,17 +92,22 @@ private:
     int           m_supportedGeometry;            // Supported geometry flag is set in jobOpt and is equal to major release version
     bool          m_ignoreTagSupport;             // If true then don't check SUPPORT flag for ATLAS tag
 
-    const std::string & faserVersion()         const {return m_FaserVersion; }
-    const std::string & scintVersionOverride() const {return m_ScintVersionOverride ;}
-    // const std::string & SCT_VersionOverride()  const {return m_SCT_VersionOverride  ;}
-    // const std::string & muonVersionOverride()  const {return m_MuonVersionOverride  ;}
-    // const std::string & caloVersionOverride()  const {return m_CaloVersionOverride  ;}
+    const std::string & faserVersion()             const {return m_FaserVersion; }
+    const std::string & scintVersionOverride()     const {return m_ScintVersionOverride; }
+    const std::string & vetoVersionOverride()      const {return m_VetoVersionOverride; }
+    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 & caloVersionOverride()      const {return m_CaloVersionOverride  ;}
     // const std::string & magFieldVersionOverride()     const {return m_MagFieldVersionOverride  ;}
     // const std::string & cavernInfraVersionOverride()  const {return m_CavernInfraVersionOverride  ;}
 
     const std::string & scintVersion()         const {return m_geoDbTagSvc->scintVersion(); }
-    // const std::string & SCT_Version()          const {return m_geoDbTagSvc->SCT_Version(); }
-    // const std::string & caloVersion()          const {return m_geoDbTagSvc->caloVersion(); }
+    const std::string & vetoVersion()          const {return m_geoDbTagSvc->vetoVersion(); }
+    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 & 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 7e724edb1a2f410a13622877d5cbbb9cba6e46a1..eabd66c0de543bbb0f9974667779427bba3bf55e 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.cxx
@@ -186,38 +186,36 @@ StatusCode RDBMaterialManager::readMaterialsFromDB(ISvcLocator* pSvcLocator)
     m_scintmaterials = iAccessSvc->getRecordsetPtr("ScintMaterials","ScintMaterials-00", "", "FASERDD");
   }
   
-  // --- SCT materials
-  // DecodeVersionKey keySCT(iGeoModel, "SCT");
-  // m_sctmatcomponents = iAccessSvc->getRecordsetPtr("SCTMatComponents",keySCT.tag(),keySCT.node());
-  // 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");
-  // }
-  
-  // m_sctmaterials = iAccessSvc->getRecordsetPtr("SCTMaterials",keySCT.tag(),keySCT.node());
-  // if(m_sctmaterials->size()==0) {
-  //   if(log.level()<=MSG::WARNING)
-  //     log << MSG::WARNING << " Getting SCTMaterials with default tag" <<endmsg;
-  //   m_sctmaterials = iAccessSvc->getRecordsetPtr("SCTMaterials","SCTMaterials-00");
-  // }
-   
-  // --- InDet common materials
-  // DecodeVersionKey keyInDet(iGeoModel, "InnerDetector");
-  // m_indetmatcomponents = iAccessSvc->getRecordsetPtr("InDetMatComponents",keyInDet.tag(),keyInDet.node());
-  // if(m_indetmatcomponents->size()==0) {
-  //   if(log.level()<=MSG::WARNING)
-  //     log << MSG::WARNING << " Getting InDetMatComponents with default tag" <<endmsg;
-  //   m_indetmatcomponents = iAccessSvc->getRecordsetPtr("InDetMatComponents","InDetMatComponents-00");
-  // }
-  
-  // m_indetmaterials = iAccessSvc->getRecordsetPtr("InDetMaterials",keyInDet.tag(),keyInDet.node());
-  // if(m_indetmaterials->size()==0) {
-  //   if(log.level()<=MSG::WARNING)
-  //     log << MSG::WARNING << " Getting InDetMaterials with default tag" <<endmsg;
-  //   m_indetmaterials = iAccessSvc->getRecordsetPtr("InDetMaterials","InDetMaterials-00");
-  // }
-  
+  // --- Tracker materials
+  DecodeFaserVersionKey keyTracker(iGeoModel, "Tracker");
+  m_trackermatcomponents = iAccessSvc->getRecordsetPtr("TrackerMatComponents",keyTracker.tag(),keyTracker.node(),"FASERDD");
+  if(m_trackermatcomponents->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting TrackerMatComponents with default tag" <<endmsg;
+    m_trackermatcomponents = iAccessSvc->getRecordsetPtr("TrackerMatComponents","TrackerMatComponents-00", "", "FASERDD");
+  }
+  m_trackermaterials = iAccessSvc->getRecordsetPtr("TrackerMaterials",keyTracker.tag(),keyTracker.node(), "FASERDD");
+  if(m_trackermaterials->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting TrackerMaterials with default tag" <<endmsg;
+    m_trackermaterials = iAccessSvc->getRecordsetPtr("TrackerMaterials","TrackerMaterials-00", "", "FASERDD");
+  }
+
+  // --- Tracker materials
+  DecodeFaserVersionKey keyCalorimeter(iGeoModel, "Calorimeter");
+  m_calomatcomponents = iAccessSvc->getRecordsetPtr("CaloMatComponents",keyCalorimeter.tag(),keyCalorimeter.node(),"FASERDD");
+  if(m_calomatcomponents->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting CaloMatComponents with default tag" <<endmsg;
+    m_calomatcomponents = iAccessSvc->getRecordsetPtr("CaloMatComponents","CaloMatComponents-00", "", "FASERDD");
+  }
+  m_calomaterials = iAccessSvc->getRecordsetPtr("CaloMaterials",keyCalorimeter.tag(),keyCalorimeter.node(), "FASERDD");
+  if(m_calomaterials->size()==0) {
+    if(log.level()<=MSG::WARNING)
+      log << MSG::WARNING << " Getting CaloMaterials with default tag" <<endmsg;
+    m_calomaterials = iAccessSvc->getRecordsetPtr("CaloMaterials","CaloMaterials-00", "", "FASERDD");
+  }
+     
   return StatusCode::SUCCESS;
 }
 
@@ -408,20 +406,20 @@ GeoMaterial* RDBMaterialManager::getMaterial(const std::string & name) {
       tmp_matcomponents = m_scintmatcomponents;
       data_id = "SCINTMATERIALS_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("indet",0) == 0)
-  //   {
-  //     detector = "indet";
-  //     tmp_materials = m_indetmaterials;
-  //     tmp_matcomponents = m_indetmatcomponents;
-  //     data_id = "INDETMATERIALS_DATA_ID";
-  //   }
+  else if(name.find("tracker",0) == 0)
+    {
+      detector = "tracker";
+      tmp_materials = m_trackermaterials;
+      tmp_matcomponents = m_trackermatcomponents;
+      data_id = "TRACKERMATERIALS_DATA_ID";
+    }
+  else if(name.find("calo",0) == 0)
+    {
+      detector = "calo";
+      tmp_materials = m_calomaterials;
+      tmp_matcomponents = m_calomatcomponents;
+      data_id = "CALOMATERIALS_DATA_ID";
+    }
   else {return 0 ;}
 	
   for( ind = 0; ind < tmp_materials->size(); ind++)
@@ -574,20 +572,20 @@ const GeoMaterial*  RDBMaterialManager:: getMaterial(const std::string &name) co
       tmp_matcomponents = m_scintmatcomponents;
       data_id = "SCINTMATERIALS_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("indet",0) == 0)
-  //   {
-  //     detector = "indet";
-  //     tmp_materials = m_indetmaterials;
-  //     tmp_matcomponents = m_indetmatcomponents;
-  //     data_id = "INDETMATERIALS_DATA_ID";
-  //   }
+  else if(name.find("tracker",0) == 0)
+    {
+      detector = "tracker";
+      tmp_materials = m_trackermaterials;
+      tmp_matcomponents = m_trackermatcomponents;
+      data_id = "TRACKERMATERIALS_DATA_ID";
+    }
+  else if(name.find("calo",0) == 0)
+    {
+      detector = "calo";
+      tmp_materials = m_calomaterials;
+      tmp_matcomponents = m_calomatcomponents;
+      data_id = "CALOMATERIALS_DATA_ID";
+    }
   else {return 0 ;}
 	
   for( ind = 0; ind < tmp_materials->size(); ind++)
diff --git a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
index d0904e16ba2123dad67a3a62acb2a92265b4e74a..14af632feaf870623db9145ed0b6b23db925accf 100644
--- a/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
+++ b/DetectorDescription/GeoModel/GeoModelSvc/src/RDBMaterialManager.h
@@ -85,6 +85,10 @@ class RDBMaterialManager: public StoredMaterialManager {
   IRDBRecordset_ptr m_stdmatcomponents;
   IRDBRecordset_ptr m_scintmaterials;
   IRDBRecordset_ptr m_scintmatcomponents;
+  IRDBRecordset_ptr m_trackermaterials;
+  IRDBRecordset_ptr m_trackermatcomponents;
+  IRDBRecordset_ptr m_calomaterials;
+  IRDBRecordset_ptr m_calomatcomponents;
 
   mutable std::vector < GeoElement *>        m_elementVector;
   mutable StoredMaterialManager::MaterialMap m_materialMap;
diff --git a/DetectorDescription/IdDictDetDescrCnv/CMakeLists.txt b/DetectorDescription/IdDictDetDescrCnv/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9bda21af6ca7fa33807e94791bec2575b2872059
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/CMakeLists.txt
@@ -0,0 +1,37 @@
+################################################################################
+# Package: IdDictDetDescrCnv
+################################################################################
+
+# Declare the package name:
+atlas_subdir( IdDictDetDescrCnv )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PRIVATE
+                          Control/AthenaBaseComps
+                          Control/CxxUtils
+                          Control/SGTools
+                          Control/StoreGate
+                          Database/RDBAccessSvc
+                          DetectorDescription/FaserDetDescr
+                          DetectorDescription/DetDescrCnvSvc
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          DetectorDescription/GeoModel/GeoModelFaserUtilities
+                          DetectorDescription/IdDictDetDescr
+                          DetectorDescription/IdDictParser
+                          DetectorDescription/Identifier
+                          GaudiKernel )
+
+# External dependencies:
+find_package( Boost COMPONENTS filesystem thread system )
+find_package( CORAL COMPONENTS CoralBase CoralKernel RelationalAccess )
+
+# Component(s) in the package:
+atlas_add_component( IdDictDetDescrCnv
+                     src/*.cxx
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS}
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} AthenaBaseComps CxxUtils SGTools StoreGateLib SGtests FaserDetDescr DetDescrCnvSvcLib GeoModelUtilities GeoModelFaserUtilities IdDictDetDescr IdDictParser Identifier GaudiKernel )
+
+# Install files from the package:
+atlas_install_headers( IdDictDetDescrCnv )
+atlas_install_joboptions( share/*.py )
diff --git a/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py b/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py
new file mode 100644
index 0000000000000000000000000000000000000000..f80fb77d9150f00fba8fc8c696a5362e93e96857
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/share/IdDictDetDescrCnv_joboptions.py
@@ -0,0 +1,6 @@
+#
+#  Joboptions for the loading of the of InDetDDMgr
+#
+
+# DLLs 
+theApp.Dlls += [ "IdDictDetDescrCnv" ]
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.cxx b/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..3a34a0cee5b77614ece0d9e90125a8b6ca2417b3
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.cxx
@@ -0,0 +1,171 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ DetDescrCnv package
+ -----------------------------------------
+ ***************************************************************************/
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "FaserIDDetDescrCnv.h"
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+#include "DetDescrCnvSvc/DetDescrAddress.h"
+#include "GaudiKernel/MsgStream.h"
+#include "StoreGate/StoreGate.h" 
+#include "SGTools/StorableConversions.h"
+
+#include "IdDictDetDescr/IdDictManager.h"
+#include "FaserDetDescr/FaserDetectorIDBase.h"
+#include "CxxUtils/make_unique.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   
+FaserIDDetDescrCnv::repSvcType() const
+{
+  return (storageType());
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+FaserIDDetDescrCnv::initialize()
+{
+    // First call parent init
+    StatusCode sc = DetDescrConverter::initialize();
+    MsgStream log(msgSvc(), "FaserIDDetDescrCnv");
+    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 AtlasDetectorID into the detector store. However,
+    // AtlasIDDetDescrCnv::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 InDet_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 AtlasDetectorID to the Detector Store!" << endmsg;
+//  	return StatusCode::FAILURE;
+//      } else {}
+
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+FaserIDDetDescrCnv::finalize()
+{
+    MsgStream log(msgSvc(), "FaserIDDetDescrCnv");
+    log << MSG::DEBUG << "in finalize" << endmsg;
+
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode
+FaserIDDetDescrCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+{
+    //StatusCode sc = StatusCode::SUCCESS;
+    MsgStream log(msgSvc(), "FaserIDDetDescrCnv");
+    log << MSG::INFO << "in createObj: creating a FaserDetectorIDBase helper object in the detector store" << endmsg;
+
+    // Create a new AtlasDetectorID
+
+    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;
+    }
+
+
+    // create the helper
+    auto faser_id = CxxUtils::make_unique<FaserDetectorIDBase>();
+    faser_id->setMessageSvc(msgSvc());
+
+    if (idDictMgr->initializeHelper(*faser_id)) {
+	log << MSG::ERROR << "Unable to initialize FaserDetectorIDBase" << endmsg;
+	return StatusCode::FAILURE;
+    } 
+
+    // Pass a pointer to the container to the Persistency service by reference.
+    pObj = SG::asStorable(std::move(faser_id));
+
+    return StatusCode::SUCCESS; 
+
+}
+
+//--------------------------------------------------------------------
+
+long int
+FaserIDDetDescrCnv::storageType()
+{
+    return DetDescr_StorageType;
+}
+
+//--------------------------------------------------------------------
+const CLID& 
+FaserIDDetDescrCnv::classID() { 
+    return ClassID_traits<FaserDetectorIDBase>::ID(); 
+}
+
+//--------------------------------------------------------------------
+FaserIDDetDescrCnv::FaserIDDetDescrCnv(ISvcLocator* svcloc) 
+    :
+    DetDescrConverter(ClassID_traits<FaserDetectorIDBase>::ID(), svcloc)
+{}
+
+
+
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.h b/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.h
new file mode 100644
index 0000000000000000000000000000000000000000..abb3c0370af0843c746163ef4247ee3fcfb57fab
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/src/FaserIDDetDescrCnv.h
@@ -0,0 +1,50 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ DetDescrCnv package
+ -----------------------------------------
+ ***************************************************************************/
+
+#ifndef IDDICTDETDESCRCNV_FASERIDDETDESCRCNV_H
+#define IDDICTDETDESCRCNV_FASERIDDETDESCRCNV_H
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+
+//<<<<<< PUBLIC DEFINES                                                 >>>>>>
+//<<<<<< PUBLIC CONSTANTS                                               >>>>>>
+//<<<<<< PUBLIC TYPES                                                   >>>>>>
+//<<<<<< PUBLIC VARIABLES                                               >>>>>>
+//<<<<<< PUBLIC FUNCTIONS                                               >>>>>>
+//<<<<<< CLASS DECLARATIONS                                             >>>>>>
+
+/**
+ **  This class is a converter for the AtlasID an IdHelper which is
+ **  stored in the detector store. This class derives from
+ **  DetDescrConverter which is a converter of the DetDescrCnvSvc.
+ **
+ **/
+
+class FaserIDDetDescrCnv: 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 int    storageType();
+    static const CLID& classID();
+
+    FaserIDDetDescrCnv(ISvcLocator* svcloc);
+};
+
+
+//<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
+//<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
+
+#endif // IDDICTDETDESCRCNV_FASERIDDETDESCRCNV_H
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..bea39672556e5d21ef8f844878570217f4b7b49b
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.cxx
@@ -0,0 +1,1125 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+/***************************************************************************
+ IdDictDetDescrCnv package
+ -----------------------------------------
+ ***************************************************************************/
+
+//<doc><file>   $Id: IdDictDetDescrCnv.cxx,v 1.21 2009-02-15 13:08:19 schaffer Exp $
+//<version>     $Name: not supported by cvs2svn $
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "IdDictDetDescrCnv.h"
+
+#include "IdDictParser/IdDictParser.h"
+#include "IdDictDetDescr/IdDictManager.h"
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+#include "DetDescrCnvSvc/DetDescrAddress.h"
+
+#include "GeoModelInterfaces/IGeoModelSvc.h"
+#include "GeoModelFaserUtilities/DecodeFaserVersionKey.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+#include "RDBAccessSvc/IRDBRecord.h"
+#include "RDBAccessSvc/IRDBRecordset.h"
+ 
+#include "GaudiKernel/MsgStream.h"
+
+#include "StoreGate/StoreGate.h" 
+#include "SGTools/StorableConversions.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   
+IdDictDetDescrCnv::repSvcType() const
+{
+  return (storageType());
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+IdDictDetDescrCnv::initialize()
+{
+    // First call parent init
+    StatusCode sc = DetDescrConverter::initialize();
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+    log << MSG::INFO << "in initialize" << endmsg;
+
+    if (sc.isFailure()) {
+        log << MSG::ERROR << "DetDescrConverter::initialize failed" << endmsg;
+        return sc;
+    }
+    
+    // Must set indet tag to EMPTY
+    m_scintIDTag = "EMPTY";
+    
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+IdDictDetDescrCnv::finalize()
+{
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+    log << MSG::INFO << "in finalize" << endmsg;
+
+    // Remove parser
+    if(m_parser) delete m_parser;
+    m_parser = 0;
+
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+StatusCode
+IdDictDetDescrCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 
+{
+    //
+    // Here we create an IdDictManager and provide it with an
+    // IdDictMgr which has been filled by an IdDictParser. This mgr
+    // is used by each IdHelper to initialize itself. 
+    //
+    //   Lifetime management:
+    //
+    //     IdDictDetDescrCnv holds onto ONE IdDictParser, which in
+    //     turn holds the same IdDictMgr. 
+    //
+    //     Multiple initializations are possible. parseXMLDescription
+    //     will look for a new set of xml files, clear any
+    //     pre-existing IdDictMgr help by the parser and then parse
+    //     the new xml files, filling the IdDictMgr.
+    //
+    //     Since the parser "refills" the same IdDictMgr, one has the
+    //     option to delete and recreate the IdDictManager, or just
+    //     keep the same one which will be refreshed with the new
+    //     description. 
+    //
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+    log << MSG::INFO << "in createObj: creating a IdDictManager object in the detector store" << endmsg;
+
+    DetDescrAddress* ddAddr;
+    ddAddr = dynamic_cast<DetDescrAddress*> (pAddr);
+    if(!ddAddr) {
+        log << MSG::ERROR << "Could not cast to DetDescrAddress." << endmsg;
+        return StatusCode::FAILURE;
+    }
+
+    // Get the StoreGate key of this container.
+    std::string mgrKey  = *( ddAddr->par() );
+    if ("" == mgrKey) {
+        log << MSG::DEBUG << "No Manager key " << endmsg;
+    }
+    else {
+        log << MSG::DEBUG << "Manager key is " << mgrKey << endmsg;
+    }
+    
+    StatusCode sc = parseXMLDescription();
+    if (sc != StatusCode::SUCCESS ) {
+        log << MSG::ERROR << " Cannot parse the XML description " << endmsg; 
+        return sc ;
+    }
+
+
+    // Create the manager - only once
+    IdDictManager* dictMgr = new IdDictManager(m_parser->m_idd); 
+
+    log << MSG::DEBUG << "Created IdDictManager " 
+        << endmsg;
+    
+
+    // Print out the dictionary names
+    printDicts(dictMgr);
+
+    // Pass a pointer to the container to the Persistency service
+    // by reference.
+    pObj = SG::asStorable(dictMgr);
+
+    return StatusCode::SUCCESS; 
+
+}
+
+//--------------------------------------------------------------------
+
+StatusCode
+IdDictDetDescrCnv::parseXMLDescription() 
+{
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+    log << MSG::DEBUG << "in getManager" << endmsg;
+
+    // Parse the xml files to obtain the iddict dictionaries
+    //
+    //   Parsing of the xml files may not be needed. So we check. The
+    //   conditions to reparse are:
+    //
+    //     - first pass, i.e. creating a new IdDictParser
+    //     - a change in an input xml file
+    //     - a change in one of the "options" such as doIdChecks,
+    //       doInitNeighbors, etc.
+    //
+    
+    m_doParsing = false; // Preset to no parsing
+
+    if (!m_parser) {
+
+        // Create parser
+        m_parser    = new IdDictParser;
+        m_doParsing = true; 
+        
+    }
+    
+    // We access the properties on each pass
+
+    // Get the access to DetDescrCnvSvc for access to properties
+    IProperty* propertyServer(0); 
+    StatusCode sc = serviceLocator()->service("DetDescrCnvSvc", propertyServer); 
+    if (sc != StatusCode::SUCCESS ) {
+        log << MSG::ERROR 
+            << " Cannot get DetDescrCnvSvc " 
+            << endmsg; 
+        return sc ;
+    }
+
+    // Set flag for doing checks of ids
+    BooleanProperty     boolProperty("DoIdChecks", false);
+    sc = propertyServer->getProperty(&boolProperty);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get DoIdChecks flag: found " 
+            << boolProperty.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        bool doChecks = boolProperty.value();
+        if (doChecks != m_doChecks)m_doParsing = true; // Changed flag
+        m_doChecks = doChecks;
+        log << MSG::DEBUG << "Flag DoIdChecks is:  " 
+            << m_doChecks
+            << endmsg;
+    }
+
+    // Set flag for initializing neighbours
+    BooleanProperty     boolProperty1("DoInitNeighbours", true);
+    sc = propertyServer->getProperty(&boolProperty1);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get DoInitNeighbours flag: found " 
+            << boolProperty1.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        bool doNeighbours = boolProperty1.value();
+        if (doNeighbours != m_doNeighbours)m_doParsing = true; // Changed flag
+        m_doNeighbours = doNeighbours;
+        log << MSG::DEBUG << "Flag DoInitNeighbours is:  " 
+            << m_doNeighbours
+            << endmsg;
+    }
+
+    // Name of IdDict file
+    StringProperty property("IdDictName", "");
+    sc = propertyServer->getProperty(&property);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get IdDictName: found " 
+            << property.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        std::string idDictName = property.value();
+        if (idDictName != m_idDictName)m_doParsing = true; // Changed flag
+        m_idDictName = idDictName;
+        log << MSG::INFO << "IdDictName:  " 
+            << m_idDictName
+            << endmsg;
+    }
+
+
+    // Get the file names: two options - either from jobOpt
+    // properties of the DetDescrCnvSvc or from RDB tags
+        
+    // Determine if Dict filename comes from DD database or
+    // if properties from JobOptions should be used.
+    BooleanProperty  boolProperty2("IdDictFromRDB", false);
+    sc = propertyServer->getProperty(&boolProperty2);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get IdDictFromRDB: found " 
+            << boolProperty2.value()
+            << endmsg;
+        return sc;
+    } else {
+        m_idDictFromRDB =  boolProperty2.value();           
+        log << MSG::DEBUG << "IdDictFromRDB:  " 
+            << (boolProperty2.value() ? "True" : "False")
+            << endmsg;
+    }
+        
+    if (m_idDictFromRDB) {
+        log << MSG::DEBUG << "Dictonary file name from DD database" 
+            << endmsg;
+    } else {
+        log << MSG::DEBUG << "Dictonary file name from job options or using defaults." 
+            << endmsg;
+    }
+        
+    // Get the file name to parse:
+    //
+    //   1) From Relational DB
+    //   2) Via jobOptions
+    //   3) default name in the xml files
+    //
+    //  Currently the logic is 1) or 2) and 3) covers the case where
+    //  no file name is found.
+    //
+    if (m_idDictFromRDB) {
+
+        // Get file names from RDB
+        StatusCode sc = getFileNamesFromTags();
+        if (!sc.isSuccess()) {
+            log << MSG::ERROR << "unable to get Id file names from RDB " 
+                << endmsg;
+            return sc;
+        }
+        else {
+            log << MSG::DEBUG << "Looked for ID file name from RDB " 
+                << endmsg;
+        }
+
+    }
+    else {
+        // Get file names from properties
+        sc = getFileNamesFromProperties(propertyServer);
+        if (!sc.isSuccess()) {
+            log << MSG::ERROR << "unable to get Id file names from properties " 
+                << endmsg;
+            return sc;
+        }
+        else {
+            log << MSG::DEBUG << "Looked for ID file name from properties " 
+                << endmsg;
+        }
+    }
+        
+    // Only parse if necessary
+    if (m_doParsing) {
+        
+
+        // Register the requested files with the xml parser
+        sc = registerFilesWithParser();
+        if (!sc.isSuccess()) {
+            log << MSG::ERROR << "unable to register file names " 
+                << endmsg;
+            return sc;
+        }
+        else {
+            log << MSG::DEBUG << "Registered file names " 
+                << endmsg;
+        }
+        
+        // Check whether a tag is needed for dictionary initialization
+
+        // NOTE: the internal tag for IdDict is global, but is only
+        // used for InDet and thus is defined by InDet
+        std::string tag;
+        if (m_scintIDTag == "EMPTY") {
+            sc = getTag(tag);
+            if (!sc.isSuccess()) {
+                log << MSG::DEBUG << " no tag found " 
+                    << endmsg;
+                tag = "";  // force empty tag
+            } 
+        } else {
+            tag = m_scintIDTag;
+        }
+
+        log << MSG::DEBUG << "Attempting to parse dictionary " << m_idDictName <<
+            " with tag: " << ( tag == "" ? "default" : tag) << endmsg;
+
+        // Parse the dictionaries
+        m_parser->parse(m_idDictName.c_str(), tag);
+        
+        if (tag == "") tag = "default";
+        log << MSG::DEBUG << "Read dict:  " 
+            << m_idDictName << " with tag " << tag
+            << endmsg;
+
+        // Set flag to check ids
+        IdDictMgr& mgr = m_parser->m_idd;
+        if(m_doChecks) {
+            mgr.set_do_checks(true);
+            log << MSG::DEBUG << "Set IdDictManager doChecks flag to true " 
+                << endmsg;
+        }
+        else {
+            mgr.set_do_checks(false);
+            log << MSG::DEBUG << "Set IdDictManager doChecks flag to false  " 
+                << endmsg;
+        }
+
+        // Set flag to initialize neighbours
+        if(m_doNeighbours) {
+            mgr.set_do_neighbours(true);
+            log << MSG::DEBUG << "Set IdDictManager doNeighbours flag to true " 
+                << endmsg;
+        }
+        else {
+            mgr.set_do_neighbours(false);
+            log << MSG::DEBUG << "Set IdDictManager doNeighbours flag to false  " 
+                << endmsg;
+        }
+
+        // Do some checks
+        const IdDictMgr::dictionary_map& dm = mgr.get_dictionary_map (); 
+        if (dm.begin () == dm.end ()) {
+            // No dicts found
+            log << MSG::ERROR << "No dictionaries found!" << endmsg;
+            return StatusCode::FAILURE;
+        }
+        else {
+            log << MSG::DEBUG << "Found " << dm.size() << " dictionaries." << endmsg;
+        }
+
+        // Register the requested files and tags with the id dicts
+        sc = registerInfoWithDicts();
+        if (!sc.isSuccess()) {
+            log << MSG::ERROR << "unable to register info with dicts " 
+                << endmsg;
+            return sc;
+        }
+        else {
+            log << MSG::DEBUG << "Registered info with id dicts " 
+                << endmsg;
+        }
+    }
+    else {
+        log << MSG::WARNING << "NOTE:  ** parseXMLDescription called, but parsing was deemed unnecessary ** " 
+            << endmsg;
+    }
+    
+
+    log << MSG::DEBUG << "parseXMLDescription: Finished parsing and setting options " 
+        << endmsg;
+
+    return StatusCode::SUCCESS; 
+
+}
+
+//--------------------------------------------------------------------
+
+StatusCode 
+IdDictDetDescrCnv::initTheManager()
+{
+    return StatusCode::SUCCESS; 
+}
+
+//--------------------------------------------------------------------
+
+long int
+IdDictDetDescrCnv::storageType()
+{
+    return DetDescr_StorageType;
+}
+
+//--------------------------------------------------------------------
+const CLID& 
+IdDictDetDescrCnv::classID() { 
+    return ClassID_traits<IdDictManager>::ID(); 
+}
+
+//--------------------------------------------------------------------
+IdDictDetDescrCnv::IdDictDetDescrCnv(ISvcLocator* svcloc) 
+    :
+    DetDescrConverter(ClassID_traits<IdDictManager>::ID(), svcloc),
+    m_parser(0),
+    m_doChecks(false),
+    m_doNeighbours(true),
+    m_idDictFromRDB(false),
+    m_doParsing(false)
+{}
+
+//--------------------------------------------------------------------
+StatusCode
+IdDictDetDescrCnv::getTag(std::string& tag)
+{
+
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+
+    // Allow the internal tag for dictionaries to be set by
+    // jobOptions. Note that this is not used as far as I know. RDS
+    // 10/2007. 
+    log << MSG::DEBUG << "in getTag: chenk if tag is set in jobOpts" << endmsg;
+
+    // Check whether we initialize from Zebra or ROOT
+    IProperty* propertyServer(0); 
+    StatusCode sc = serviceLocator()->service("DetDescrCnvSvc", propertyServer); 
+    if (sc != StatusCode::SUCCESS ) {
+        log << MSG::ERROR 
+            << " Cannot get DetDescrCnvSvc " 
+            << endmsg; 
+        return sc ;
+    }
+
+    // Finally get tag from DetDescrCnvSvc property
+
+    StringProperty tagProperty("IdDictGlobalTag", "");
+    sc = propertyServer->getProperty(&tagProperty);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get IdDictGlobalTag: found " 
+            << tagProperty.value()
+            << endmsg;
+    }
+    else {
+        tag = tagProperty.value();
+        log << MSG::DEBUG << "Found IdDictGlobalTag:  " 
+            << tag
+            << endmsg;
+    }
+
+    return sc;
+}
+    
+//--------------------------------------------------------------------
+void    
+IdDictDetDescrCnv::printDicts(const IdDictManager* dictMgr)
+{
+    MsgStream  log(msgSvc(),"IdDictDetDescrCnv");
+
+    log << MSG::INFO 
+        << "Found id dicts:" 
+        << endmsg;
+
+    if(!dictMgr) return;
+    
+    std::string tag = dictMgr->manager()->tag();
+    if (!tag.size()) tag = "<no tag>";
+    log << MSG::INFO << "Using dictionary tag: " << tag << endmsg;
+    
+    const IdDictMgr::dictionary_map& dm = dictMgr->manager()->get_dictionary_map (); 
+    IdDictMgr::dictionary_map::const_iterator it;  
+ 
+    int n = 0; 
+ 
+    for (it = dm.begin (); it != dm.end (); ++it, ++n) { 
+        const IdDictDictionary& dictionary = *((*it).second); 
+        std::string version = ("" != dictionary.m_version) ? dictionary.m_version : "default";
+        log << MSG::INFO 
+            << "Dictionary " << dictionary.m_name;
+        if (dictionary.m_name.size() < 20) {
+            std::string space(20-dictionary.m_name.size(),' ');
+            log << MSG::INFO << space;
+        }
+        log << MSG::INFO 
+            << " version " << version;
+        if (version.size() < 20) {
+            std::string space(20-version.size(),' ');
+            log << MSG::INFO << space;
+        }
+        if (dictionary.dict_tag().size()) {
+            log << MSG::INFO 
+                << " DetDescr tag " << dictionary.dict_tag();
+            if (dictionary.dict_tag().size() < 20) {
+                std::string space(25-dictionary.dict_tag().size(),' ');
+                log << MSG::INFO << space;
+            }
+        }
+        else {
+            log << MSG::INFO 
+                << " DetDescr tag (using default)";
+        }
+        log << MSG::INFO 
+            << " file " << dictionary.file_name();
+        log << MSG::INFO << endmsg;
+    }
+}
+
+//--------------------------------------------------------------------
+StatusCode 
+IdDictDetDescrCnv::getFileNamesFromProperties(IProperty* propertyServer)
+{
+
+    // Check whether non-default names have been specified for the
+    // IdDict files of the subsystems
+
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+    // Faser IDs
+    StringProperty property = StringProperty("FaserIDFileName", "");
+    StatusCode sc = propertyServer->getProperty(&property);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get FaserIDFileName: found " 
+            << property.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        m_faserIDFileName = property.value();
+        std::string fileName = m_faserIDFileName;
+        if (fileName == "") fileName = "<not given>";
+        log << MSG::DEBUG << "FaserIDFileName:  " 
+            << fileName
+            << endmsg;
+    }
+
+    // Scint Ids
+    property = StringProperty("ScintIDFileName", "");
+    sc = propertyServer->getProperty(&property);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get ScintIDFileName: found " 
+            << property.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        m_scintIDFileName = property.value();
+        std::string fileName = m_scintIDFileName;
+        if (fileName == "") fileName = "<not given>";
+        log << MSG::DEBUG << "ScintIDFileName:  " 
+            << fileName
+            << endmsg;
+    }
+
+    // Tracker Ids
+    property = StringProperty("TrackerIDFileName", "");
+    sc = propertyServer->getProperty(&property);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get TrackerIDFileName: found " 
+            << property.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        m_trackerIDFileName = property.value();
+        std::string fileName = m_trackerIDFileName;
+        if (fileName == "") fileName = "<not given>";
+        log << MSG::DEBUG << "TrackerIDFileName:  " 
+            << fileName
+            << endmsg;
+    }
+
+    // Calo ids 
+    property = StringProperty("CaloIDFileName", "");
+    sc = propertyServer->getProperty(&property);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "unable to get CaloIDFileName: found " 
+            << property.value()
+            << endmsg;
+        return sc;
+    }
+    else {
+        m_caloIDFileName = property.value();
+        std::string fileName = m_caloIDFileName;
+        if (fileName == "") fileName = "<not given>";
+        log << MSG::DEBUG << "CaloIDFileName:  " 
+            << fileName
+            << endmsg;
+    }
+
+    // Calo neighbor files
+    // property = StringProperty("FullAtlasNeighborsFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get FullAtlasNeighborsFileName: found " 
+    //         << property.value() << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_fullAtlasNeighborsName = property.value();
+    //     std::string fileName = m_fullAtlasNeighborsName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "FullAtlasNeighborsFileName:  " << fileName << endmsg;
+    // }
+    // property = StringProperty("FCAL2DNeighborsFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get FCAL2DNeighborsFileName: found " 
+    //         << property.value() << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_fcal2dNeighborsName = property.value();
+    //     std::string fileName = m_fcal2dNeighborsName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "FCAL2DNeighborsFileName:  " << fileName << endmsg;
+    // }
+    // property = StringProperty("FCAL3DNeighborsNextFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get FCAL3DNeighborsNextFileName: found " 
+    //         << property.value() << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_fcal3dNeighborsNextName = property.value();
+    //     std::string fileName = m_fcal3dNeighborsNextName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "FCAL3DNeighborsNextFileName:  " << fileName << endmsg;
+    // }
+    // property = StringProperty("FCAL3DNeighborsPrevFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get FCAL3DNeighborsPrevFileName: found " 
+    //         << property.value() << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_fcal3dNeighborsPrevName = property.value();
+    //     std::string fileName = m_fcal3dNeighborsPrevName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "FCAL3DNeighborsPrevFileName:  " << fileName << endmsg;
+    // }
+    // property = StringProperty("TileNeighborsFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get TileNeighborsFileName: found " 
+    //         << property.value() << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_tileNeighborsName = property.value();
+    //     std::string fileName = m_tileNeighborsName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "TileNeighborsFileName:  " << fileName << endmsg;
+    // }
+
+    // Muon ids
+    // property = StringProperty("MuonIDFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get MuonIDFileName: found " 
+    //         << property.value()
+    //         << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_muonIDFileName = property.value();
+    //     std::string fileName = m_muonIDFileName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "MuonIDFileName:  " 
+    //         << fileName
+    //         << endmsg;
+    // }
+
+    // ForwardDetectors ids
+    // property = StringProperty("ForwardIDFileName", "");
+    // sc = propertyServer->getProperty(&property);
+    // if (!sc.isSuccess()) {
+    //     log << MSG::ERROR << "unable to get ForwardIDFileName: found " 
+    //         << property.value()
+    //         << endmsg;
+    //     return sc;
+    // }
+    // else {
+    //     m_forwardIDFileName = property.value();
+    //     std::string fileName = m_forwardIDFileName;
+    //     if (fileName == "") fileName = "<not given>";
+    //     log << MSG::DEBUG << "ForwardIDFileName:  " 
+    //         << fileName
+    //         << endmsg;
+    // }
+
+    return StatusCode::SUCCESS ;
+}
+
+    
+
+//--------------------------------------------------------------------
+StatusCode 
+IdDictDetDescrCnv::getFileNamesFromTags()
+{
+
+    // Fetch file names and tags from the RDB 
+
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+    const IGeoModelSvc* geoModelSvc  = 0;
+    IRDBAccessSvc*      rdbAccessSvc = 0;
+
+    // Get GeoModelSvc and RDBAccessSvc in order to get the XML filenames and tags from the 
+    // database
+    StatusCode sc = service ("GeoModelSvc",geoModelSvc);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "Unable to get GeoModelSvc." << endmsg;
+        return sc;
+    }
+    else log << MSG::DEBUG << "Accessed GeoModelSvc." << endmsg;
+          
+    sc = service("RDBAccessSvc",rdbAccessSvc);
+    if (!sc.isSuccess()) {
+        log << MSG::ERROR << "Unable to get RDBAccessSvc." << endmsg;
+        return sc;
+    }
+    else log << MSG::DEBUG << "Accessed RDBAccessSvc." << endmsg;
+
+
+    // RDS: not clear what a custom tag means.
+    //     if (detectorKey.custom()) {
+    //  // Get from properties - below. 
+    //  inDetCustom = true;
+    //} else {
+
+    // Get Scint
+    DecodeFaserVersionKey detectorKey(geoModelSvc, "Scintillator");
+    log << MSG::DEBUG << "From Version Tag: " 
+	<< detectorKey.tag()  << " at Node: " << detectorKey.node() << endmsg;
+    IRDBRecordset_ptr idDictSet   = rdbAccessSvc->getRecordsetPtr("ScintIdentifier",
+								  detectorKey.tag(), 
+								  detectorKey.node(),
+                                  "FASERDD");
+    std::string        dictName;
+    const IRDBRecord*  idDictTable = 0;
+    // Size == 0 if not found
+    if (idDictSet->size()) {
+      idDictTable       = (*idDictSet)[0];
+      dictName          = idDictTable->getString("DICT_NAME");
+      m_scintIDFileName = idDictTable->getString("DICT_FILENAME");
+      // NOTE: the internal tag for IdDict is global, but is
+      // only used for InDet and thus is defined by InDet
+      if(!idDictTable->isFieldNull("DICT_TAG")) {
+        m_scintIDTag    = idDictTable->getString("DICT_TAG");
+      }
+      m_scintIdDictTag  = idDictSet->tagName();
+      log << MSG::DEBUG << " using dictionary:  " << dictName 
+	  << ", file: " <<  m_scintIDFileName  
+	  << ", with internal tag: " << m_scintIDTag
+	  << ", dictionary tag: " << m_scintIdDictTag
+	  << endmsg;
+    }
+    else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;
+    
+    // Get Tracker
+    detectorKey = DecodeFaserVersionKey(geoModelSvc, "Tracker");
+    log << MSG::DEBUG << "From Version Tag: " 
+	<< detectorKey.tag()  << " at Node: " << detectorKey.node() << endmsg;
+    idDictSet = rdbAccessSvc->getRecordsetPtr("TrackerIdentifier", 
+					      detectorKey.tag(), 
+					      detectorKey.node(),
+                          "FASERDD");
+    // Size == 0 if not found
+    if (idDictSet->size()) {
+      idDictTable      = (*idDictSet)[0];
+      dictName         = idDictTable->getString("DICT_NAME");
+      m_trackerIDFileName  = idDictTable->getString("DICT_FILENAME");
+      m_trackerIdDictTag   = idDictSet->tagName();
+      log << MSG::DEBUG << " using Dictionary:  " << dictName 
+	  << ", file: " <<  m_trackerIDFileName
+	  << ", dictionary tag: " << m_trackerIdDictTag
+	  << endmsg;
+    }
+    else log << MSG::WARNING << " no record set found - using default dictionary " << endmsg;
+    
+    
+    //Get Calo
+    detectorKey = DecodeFaserVersionKey(geoModelSvc, "Calorimeter");
+    log << MSG::DEBUG << "From Version Tag: " 
+	<< detectorKey.tag()  << " at Node: " << detectorKey.node() << endmsg;
+    idDictSet = rdbAccessSvc->getRecordsetPtr("CaloIdentifier",
+					      detectorKey.tag(), 
+					      detectorKey.node(),
+                          "FASERDD");
+    // Size == 0 if not found
+    if (idDictSet->size()) {
+      idDictTable       = (*idDictSet)[0];
+      dictName          = idDictTable->getString("DICT_NAME");
+      m_caloIDFileName  = idDictTable->getString("DICT_FILENAME");
+      m_caloIdDictTag   = idDictSet->tagName();
+      log << MSG::DEBUG << " using Dictionary:  " << dictName  
+	  << ", file: " <<  m_caloIDFileName 
+	  << ", 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;
+                        
+
+    log << MSG::DEBUG << "End access to RDB for id dictionary info " << endmsg;
+
+    return StatusCode::SUCCESS ;
+}
+
+//--------------------------------------------------------------------
+StatusCode 
+IdDictDetDescrCnv::registerFilesWithParser()
+{
+    // If files names were found, register them with the parser to be read 
+
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+    if ("" != m_faserIDFileName) {
+        m_parser->register_external_entity("FASER", m_faserIDFileName);
+        log << MSG::INFO << "Reading FASER            IdDict file "
+            << m_faserIDFileName
+            << endmsg;
+    }
+    if ("" != m_scintIDFileName) {
+        m_parser->register_external_entity("Scintillator", m_scintIDFileName);
+        log << MSG::INFO << "Reading Scintillator     IdDict file "
+            << m_scintIDFileName
+            << endmsg;
+    }
+    if ("" != m_trackerIDFileName) {
+        m_parser->register_external_entity("Tracker", m_trackerIDFileName);
+        log << MSG::INFO << "Reading Tracker   IdDict file "
+            << m_trackerIDFileName
+            << endmsg;
+    }
+    if ("" != m_caloIDFileName) {
+        m_parser->register_external_entity("Calorimeter", m_caloIDFileName);
+        log << MSG::INFO << "Reading Calorimeter  IdDict file "
+            << 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 ;
+}
+
+//--------------------------------------------------------------------
+StatusCode
+IdDictDetDescrCnv::registerInfoWithDicts()
+{
+    // Save the file name and tag in each of the dictionaries
+    
+    MsgStream log(msgSvc(), "IdDictDetDescrCnv");
+
+    IdDictMgr& mgr = m_parser->m_idd;
+
+    if ("" != m_faserIDFileName) {
+        // Find Faser:
+        IdDictDictionary* dict = mgr.find_dictionary("FASER");  
+        if (!dict) {
+            log << MSG::ERROR 
+                << "unable to find idDict for FASER" 
+                << endmsg;
+            return StatusCode::FAILURE;
+        }
+        dict->set_file_name(m_faserIDFileName);
+        dict->set_dict_tag (m_faserIdDictTag);
+        log << MSG::DEBUG << "For FASER idDict, setting file/tag: "
+            << m_faserIDFileName << " " << m_faserIdDictTag
+            << endmsg;
+    }
+    if ("" != m_scintIDFileName) {
+        // Find Scint:
+        IdDictDictionary* dict = mgr.find_dictionary("Scintillator");  
+        if (!dict) {
+            log << MSG::ERROR 
+                << "unable to find idDict for Scintillator" 
+                << endmsg;
+            return StatusCode::FAILURE;
+        }
+        dict->set_file_name(m_scintIDFileName);
+        dict->set_dict_tag (m_scintIdDictTag);
+        log << MSG::DEBUG << "For Scintillator idDict, setting file/tag: "
+            << m_scintIDFileName << " " << m_scintIdDictTag
+            << endmsg;
+    }
+    if ("" != m_trackerIDFileName) {
+        // Find Tracker:
+        IdDictDictionary* dict = mgr.find_dictionary("Tracker");  
+        if (!dict) {
+            log << MSG::ERROR 
+                << "unable to find idDict for Tracker" 
+                << endmsg;
+            return StatusCode::FAILURE;
+        }
+        dict->set_file_name(m_trackerIDFileName);
+        dict->set_dict_tag (m_trackerIdDictTag);
+        log << MSG::DEBUG << "For Tracker idDict, setting file/tag: "
+            << m_trackerIDFileName << " " << m_trackerIdDictTag
+            << endmsg;
+    }
+    if ("" != m_caloIDFileName) {
+        // Find Calo:
+        IdDictDictionary* dict = mgr.find_dictionary("Calorimeter");  
+        if (!dict) {
+            log << MSG::ERROR 
+                << "unable to find idDict for Calorimeter" 
+                << endmsg;
+            return StatusCode::FAILURE;
+        }
+        dict->set_file_name(m_caloIDFileName);
+        dict->set_dict_tag (m_caloIdDictTag);
+        log << MSG::DEBUG << "For Calorimeter idDict, setting file/tag: "
+            << m_caloIDFileName << " " << m_caloIdDictTag
+            << endmsg;
+    }
+    // if ("" != m_fullAtlasNeighborsName) {
+    //     // Set neighbor file name:
+    //     mgr.add_metadata("FULLATLASNEIGHBORS", m_fullAtlasNeighborsName);  
+    //     log << MSG::DEBUG << "Added to dict mgr meta data: <FULLATLASNEIGHBORS, " 
+    //         << m_fullAtlasNeighborsName << endmsg;
+    // }
+    // if ("" != m_fcal2dNeighborsName) {
+    //     // Set neighbor file name:
+    //     mgr.add_metadata("FCAL2DNEIGHBORS", m_fcal2dNeighborsName);  
+    //     log << MSG::DEBUG << "Added to dict mgr meta data: <FCAL2DNEIGHBORS, " 
+    //         << m_fcal2dNeighborsName << endmsg;
+    // }
+    // if ("" != m_fcal3dNeighborsNextName) {
+    //     // Set neighbor file name:
+    //     mgr.add_metadata("FCAL3DNEIGHBORSNEXT", m_fcal3dNeighborsNextName);  
+    //     log << MSG::DEBUG << "Added to dict mgr meta data: <FCAL3DNEIGHBORSNEXT, " 
+    //         << m_fcal3dNeighborsNextName << endmsg;
+    // }
+    // if ("" != m_fcal3dNeighborsPrevName) {
+    //     // Set neighbor file name:
+    //     mgr.add_metadata("FCAL3DNEIGHBORSPREV", m_fcal3dNeighborsPrevName);  
+    //     log << MSG::DEBUG << "Added to dict mgr meta data: <FCAL3DNEIGHBORSPREV, " 
+    //         << m_fcal3dNeighborsPrevName << endmsg;
+    // }
+    // if ("" != m_tileNeighborsName) {
+    //     // Set neighbor file name:
+    //     mgr.add_metadata("TILENEIGHBORS", m_tileNeighborsName);  
+    //     log << MSG::DEBUG << "Added to dict mgr meta data: <TILENEIGHBORS, " 
+    //         << m_tileNeighborsName << endmsg;
+    // }
+    // if ("" != m_muonIDFileName) {
+    //     // Find Muon:
+    //     IdDictDictionary* dict = mgr.find_dictionary("MuonSpectrometer");  
+    //     if (!dict) {
+    //         log << MSG::ERROR 
+    //             << "unable to find idDict for MuonSpectrometer" 
+    //             << endmsg;
+    //         return StatusCode::FAILURE;
+    //     }
+    //     dict->set_file_name(m_muonIDFileName);
+    //     dict->set_dict_tag (m_muonIdDictTag);
+    //     log << MSG::DEBUG << "For MuonSpectrometer idDict, setting file/tag: "
+    //         << m_muonIDFileName << " " << m_muonIdDictTag
+    //         << endmsg;
+    // }
+    // if ("" != m_forwardIDFileName) {
+    //     // Find Forward:
+    //     IdDictDictionary* dict = mgr.find_dictionary("ForwardDetectors");  
+    //     if (!dict) {
+    //         log << MSG::ERROR 
+    //             << "unable to find idDict for ForwardDetectors" 
+    //             << endmsg;
+    //         return StatusCode::FAILURE;
+    //     }
+    //     dict->set_file_name(m_forwardIDFileName);
+    //     dict->set_dict_tag (m_forwardIdDictTag);
+    //     log << MSG::DEBUG << "For ForwardDetectors idDict, setting file/tag: "
+    //         << m_forwardIDFileName << " " << m_forwardIdDictTag
+    //         << endmsg;
+    // }
+
+    return StatusCode::SUCCESS ;
+}
+
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.h b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.h
new file mode 100644
index 0000000000000000000000000000000000000000..319bbbb7834f506dbae30d1770f75420ae01014a
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv.h
@@ -0,0 +1,153 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef IDDICTDETDESCRCNV_IDDICTDETDESCRCNV_H
+#define IDDICTDETDESCRCNV_IDDICTDETDESCRCNV_H
+/**
+ * @file IdDictDetDescrCnv.h
+ *
+ * @brief Converter for the DetDescrCnvSvc which parses the identifier
+ * xml dictionaries and creates an IdDictManager in the
+ * DetectorStore. This is used by the IdHelpers to initialize
+ * themselves.
+ *
+ */
+
+//<<<<<< INCLUDES                                                       >>>>>>
+
+#include "DetDescrCnvSvc/DetDescrConverter.h"
+
+//<<<<<< PUBLIC TYPES                                                   >>>>>>
+
+class IdDictParser;
+class IdDictManager;
+//class IProperty;
+
+//<<<<<< CLASS DECLARATIONS                                             >>>>>>
+
+/**
+ * @class IdDictDetDescrCnv
+ *
+ * @brief Converter for the DetDescrCnvSvc which parses the identifier
+ * xml dictionaries and creates an IdDictManager in the
+ * DetectorStore. This is used by the IdHelpers to initialize
+ * themselves.
+ *
+ */
+
+class IdDictDetDescrCnv: 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 int     storageType();
+    static const CLID&  classID();
+
+    IdDictDetDescrCnv(ISvcLocator* svcloc);
+
+private:
+
+    /// (re)Initialize the manager
+    StatusCode initTheManager();
+
+
+    /// Get file names from properties
+    StatusCode getFileNamesFromProperties(IProperty* propertyServer);
+    
+    /// Get file names from properties
+    StatusCode getFileNamesFromTags();
+
+    /// Register the requested files with the xml parser
+    StatusCode registerFilesWithParser();
+
+    /// Register the requested files and tag with the created id dicts
+    StatusCode registerInfoWithDicts();
+
+    /// Get tag to use for dictionary
+    StatusCode getTag(std::string& tag);
+
+    /// Print out the contained dictionaries and version
+    void printDicts(const IdDictManager* dictMgr);
+
+    /// Create and (re)initialize the IdDictManager - only create the
+    /// first time
+    StatusCode parseXMLDescription();
+
+    /// The xml parser for the dictionary descriptions
+    IdDictParser*  m_parser;
+
+    /// Flag to tell helpers to do Checks
+    bool           m_doChecks;
+
+    /// Flag to generate neighbor information - for calos
+    bool           m_doNeighbours;
+
+    /// Name of top-level xml dict file
+    std::string    m_idDictName;
+
+    /// Flag to get dict parameters from Relational DetDescr DB
+    bool           m_idDictFromRDB;
+
+    /// Flag to which determines whether the xml files are parsed or
+    /// not 
+    bool           m_doParsing;
+
+    /// File to be read for top-level subsystem ids values
+    std::string   m_faserIDFileName;
+
+    /// File to be read for Scint ids
+    std::string   m_scintIDFileName;
+
+    /// File to be read for Tracker ids
+    std::string   m_trackerIDFileName;
+
+    /// File to be read for Calo ids
+    std::string   m_caloIDFileName;
+
+    /// Files for Calo Neighbors
+    // std::string   m_fullAtlasNeighborsName;
+    // std::string   m_fcal2dNeighborsName;
+    // std::string   m_fcal3dNeighborsNextName;
+    // std::string   m_fcal3dNeighborsPrevName;
+    // std::string   m_tileNeighborsName;
+
+    /// File to be read for Muon ids
+    // std::string   m_muonIDFileName;
+
+    /// File to be read for Forward det ids
+    // std::string   m_forwardIDFileName;
+
+    /// Tag of RDB record for Atlas top-level ids
+    std::string   m_faserIdDictTag;
+
+    /// Tag of RDB record for Scint ids
+    std::string   m_scintIdDictTag;
+
+    /// Tag of RDB record for Tracker ids
+    std::string   m_trackerIdDictTag;
+
+    /// Tag of RDB record for Calo ids
+    std::string   m_caloIdDictTag;
+
+    /// Tag of RDB record for Muon ids
+    // std::string   m_muonIdDictTag;
+
+    /// Tag of RDB record for forwards det ids
+    // std::string   m_forwardIdDictTag;
+
+    /// Internal Scint id tag
+    std::string   m_scintIDTag;
+    
+};
+
+
+
+//<<<<<< INLINE PUBLIC FUNCTIONS                                        >>>>>>
+//<<<<<< INLINE MEMBER FUNCTIONS                                        >>>>>>
+
+#endif // IDDICTDETDESCRCNV_IDDICTDETDESCRCNV_H
diff --git a/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv_entries.cxx b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv_entries.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..64bf7746636ed7c9a4c64081b91d5dfcec928c9e
--- /dev/null
+++ b/DetectorDescription/IdDictDetDescrCnv/src/IdDictDetDescrCnv_entries.cxx
@@ -0,0 +1,8 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+#include "IdDictDetDescrCnv.h"
+#include "FaserIDDetDescrCnv.h"
+
+DECLARE_CONVERTER( FaserIDDetDescrCnv )
+DECLARE_CONVERTER( IdDictDetDescrCnv )
diff --git a/Scintillator/ScintDetDescr/ScintGeoModel/CMakeLists.txt b/Scintillator/ScintDetDescr/ScintGeoModel/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..47bba2ec4ef3a913db35c32ab6ada34838a1cf6a
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/CMakeLists.txt
@@ -0,0 +1,49 @@
+################################################################################
+# Package: ScintGeoModel
+################################################################################
+
+# Declare the package name:
+atlas_subdir( ScintGeoModel )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaKernel
+                          Database/RDBAccessSvc
+                          DetectorDescription/GeoModel/GeoModelUtilities
+                          DetectorDescription/GeoModel/GeoModelFaserUtilities
+			              DetectorDescription/GeoPrimitives
+                          GaudiKernel
+                          InnerDetector/InDetDetDescr/InDetGeoModelUtils
+#                          InnerDetector/InDetDetDescr/InDetReadoutGeometry
+                          PRIVATE
+                          Control/SGTools
+                          Control/StoreGate
+                          Database/AthenaPOOL/AthenaPoolUtilities
+                          DetectorDescription/DetDescrCond/DetDescrConditions
+                          DetectorDescription/GeoModel/GeoModelInterfaces
+                          DetectorDescription/GeometryDBSvc
+                          DetectorDescription/Identifier
+#                          InnerDetector/InDetDetDescr/InDetIdentifier 
+                          DetectorDescription/FaserDetDescr
+                          Scintillator/ScintDetDescr/ScintIdentifier )
+
+# 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( ScintGeoModel
+        		     src/*.cxx
+                     src/components/*.cxx
+                     INCLUDE_DIRS ${Boost_INCLUDE_DIRS} ${CORAL_INCLUDE_DIRS} 
+                     LINK_LIBRARIES ${Boost_LIBRARIES} ${CORAL_LIBRARIES} ${GEOMODEL_LIBRARIES} AthenaKernel GeoModelUtilities GeoModelFaserUtilities GaudiKernel SGTools StoreGateLib SGtests AthenaPoolUtilities InDetGeoModelUtils DetDescrConditions FaserDetDescr Identifier )
+
+#atlas_add_test( SCT_GMConfig_test
+#                SCRIPT test/SCT_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/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.h b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.h
new file mode 100644
index 0000000000000000000000000000000000000000..a90869b75bac310077f365dbf8900160610e1409
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.h
@@ -0,0 +1,32 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ScintGeoModel_ScintGeoModelAthenaComps_H
+#define ScintGeoModel_ScintGeoModelAthenaComps_H
+
+#include "InDetGeoModelUtils/InDetDDAthenaComps.h"
+
+// class VetoID;
+
+
+/// Class to hold various Athena components
+template <class ID_HELPER>
+class ScintGeoModelAthenaComps : public InDetDD::AthenaComps {
+
+public:
+
+  ScintGeoModelAthenaComps(const std::string& name);
+
+  void setIdHelper(const ID_HELPER* idHelper);
+
+  const ID_HELPER* getIdHelper() const;
+
+private:
+  const ID_HELPER* m_idHelper;
+
+};
+
+#include "ScintGeoModel/ScintGeoModelAthenaComps.icc"
+
+#endif // ScintGeoModel_ScintGeoModelAthenaComps_H
diff --git a/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.icc b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.icc
new file mode 100644
index 0000000000000000000000000000000000000000..aeed853028e1e57abb062b31b81310bccc450484
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/ScintGeoModelAthenaComps.icc
@@ -0,0 +1,26 @@
+/*
+  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "ScintGeoModel/ScintGeoModelAthenaComps.h"
+
+template <class ID_HELPER>
+ScintGeoModelAthenaComps<ID_HELPER>::ScintGeoModelAthenaComps(const std::string& name)
+  : InDetDD::AthenaComps(name),
+    m_idHelper(0)
+{}
+ 
+template <class ID_HELPER>
+void 
+ScintGeoModelAthenaComps<ID_HELPER>::setIdHelper(const ID_HELPER* idHelper)
+{
+  m_idHelper = idHelper;
+}
+
+template <class ID_HELPER>
+const ID_HELPER* 
+ScintGeoModelAthenaComps<ID_HELPER>::getIdHelper() const
+{
+  return m_idHelper;
+}
+
diff --git a/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoDetectorTool.h b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoDetectorTool.h
new file mode 100644
index 0000000000000000000000000000000000000000..a2b14569b66739f106b731b0521b6915c2ea0a0f
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoDetectorTool.h
@@ -0,0 +1,62 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef SCINTGEOMODEL_VETODETECTORTOOL_H
+#define SCINTGEOMODEL_VETODETECTORTOOL_H
+
+#include "GeoModelUtilities/GeoModelTool.h"
+#include "ScintGeoModel/ScintGeoModelAthenaComps.h" 
+
+#include "GeometryDBSvc/IGeometryDBSvc.h"
+#include "GeoModelInterfaces/IGeoDbTagSvc.h"
+#include "RDBAccessSvc/IRDBAccessSvc.h"
+
+#include "GaudiKernel/ServiceHandle.h"
+
+#include <string>
+
+namespace ScintDD {
+  class VetoDetectorManager;
+}
+
+//class VetoID;
+class FaserDetectorIDBase;
+
+class VetoDetectorTool : public GeoModelTool {
+
+public:
+  // Standard Constructor
+  VetoDetectorTool(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", "Veto"};
+  BooleanProperty m_alignable{this, "Alignable", true};
+//   BooleanProperty m_useDynamicAlignFolders{this, "useDynamicAlignFolders", false};
+  bool m_cosmic;
+
+  const ScintDD::VetoDetectorManager* m_manager;
+  
+  ScintGeoModelAthenaComps<FaserDetectorIDBase> m_athenaComps;
+  // ScintGeoModelAthenaComps<VetoID> 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 // SCINTGEOMODEL_VETODETECTORTOOL_H
diff --git a/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoOptions.h b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoOptions.h
new file mode 100644
index 0000000000000000000000000000000000000000..7f6a590401d520592fe0fe0dea1b24d8a4f1a68d
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/ScintGeoModel/VetoOptions.h
@@ -0,0 +1,35 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef ScintGeoModel_VetoOptions_H
+#define ScintGeoModel_VetoOptions_H
+
+// Class for any run time options.
+
+
+class VetoOptions
+{
+
+public:
+  VetoOptions();
+  bool alignable() const;
+//   bool alignAtModuleLevel() const;
+
+  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_alignable;
+//   bool m_alignModule;
+//   bool m_dynAlignFolders;   //controls which set of alignment folders is used
+
+};
+
+
+#endif // ScintGeoModel_VetoOptions_H
diff --git a/Scintillator/ScintDetDescr/ScintGeoModel/python/ScintGeoModelConfig.py b/Scintillator/ScintDetDescr/ScintGeoModel/python/ScintGeoModelConfig.py
new file mode 100644
index 0000000000000000000000000000000000000000..407fa3bc6415caf1b8abd8959ab2e9eccf859bd8
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/python/ScintGeoModelConfig.py
@@ -0,0 +1,49 @@
+# Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+
+from AthenaCommon import CfgMgr
+
+def getVetoDetectorTool(name="VetoDetectorTool", **kwargs):
+    kwargs.setdefault("DetectorName",     "Veto");
+    kwargs.setdefault("Alignable",        True);
+    kwargs.setdefault("RDBAccessSvc",     "RDBAccessSvc");
+    kwargs.setdefault("GeometryDBSvc",    "InDetGeometryDBSvc");
+    kwargs.setdefault("GeoDbTagSvc",      "GeoDbTagSvc");
+#    from AthenaCommon.DetFlags      import DetFlags
+    return CfgMgr.VetoDetectorTool(name, **kwargs)
+
+
+###### ComponentAccumulator
+
+from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
+from AthenaConfiguration.AthConfigFlags import AthConfigFlags
+from IOVDbSvc.IOVDbSvcConfig import addFoldersSplitOnline
+
+def ScintGeometryCfg( flags ):
+    from FaserGeoModel.GeoModelConfig import GeoModelCfg
+    acc,geoModelSvc = GeoModelCfg( flags )
+    from GeometryDBSvc.GeometryDBSvcConf import GeometryDBSvc
+    acc.addService(GeometryDBSvc("ScintGeometryDBSvc"))
+    from VetoGeoModel.VetoGeoModelConf import VetoDetectorTool
+    vetoDetectorTool = VetoDetectorTool()
+#    vetoDetectorTool.useDynamicAlignFolders = flags.GeoModel.Align.Dynamic
+    geoModelSvc.DetectorTools += [ vetoDetectorTool ]
+    acc.addService(geoModelSvc)
+    # 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/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoDetectorTool.cxx b/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoDetectorTool.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..30ae62864d65cdd76da3f7fcc79df321d3136cae
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoDetectorTool.cxx
@@ -0,0 +1,258 @@
+/*
+  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "ScintGeoModel/VetoDetectorTool.h"
+
+// #include "ScintGeoModel/VetoDetectorFactory.h" 
+// #include "ScintGeoModel/VetoDataBase.h" 
+// #include "ScintGeoModel/ScintMaterialManager.h" 
+#include "ScintGeoModel/VetoOptions.h" 
+
+// temporary
+// #include "InDetIdentifier/SCT_ID.h"
+// #include "ScintReadoutGeometry/VetoDetectorManager.h" 
+#include "FaserDetDescr/FaserDetectorIDBase.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 ScintDD::VetoDetectorManager;
+// using ScintDD::ScintDetectorManager;
+
+//
+// Constructor
+//
+VetoDetectorTool::VetoDetectorTool(const std::string& type,
+                                   const std::string& name, 
+                                   const IInterface* parent)
+  : GeoModelTool(type, name, parent),
+  m_cosmic{false},
+  m_manager{nullptr},
+  m_athenaComps{name},
+  m_geoDbTagSvc{"GeoDbTagSvc", name},
+  m_rdbAccessSvc{"RDBAccessSvc", name},
+  m_geometryDBSvc{"ScintGeometryDBSvc", 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
+VetoDetectorTool::create()
+{ 
+  // Reinit various singleton type objects.
+//   VetoDataBase::reinit();
+//   VetoMaterialManager::reinit();
+
+  // Get the detector configuration.
+  ATH_CHECK(m_geoDbTagSvc.retrieve());
+  
+  DecodeFaserVersionKey versionKey{&*m_geoDbTagSvc, "Veto"};
+  // Issue error if AUTO.
+  if (versionKey.tag() == "AUTO") {
+    ATH_MSG_ERROR("AUTO Faser version. Please select a version.");
+  }
+  ATH_MSG_INFO("Building Veto with Version Tag: " << versionKey.tag() << " at Node: " << versionKey.node());
+
+  ATH_CHECK(m_rdbAccessSvc.retrieve());
+  // Print the Veto version tag:
+  std::string vetoVersionTag{m_rdbAccessSvc->getChildTag("Veto", versionKey.tag(), versionKey.node(), "FASERDD")};
+  ATH_MSG_INFO("Veto Version: " << vetoVersionTag <<  "  Package Version: " << PACKAGE_VERSION);
+  // Check if version is empty. If so, then the Veto cannot be built. This may or may not be intentional. We
+  // just issue an INFO message. 
+  if (vetoVersionTag.empty()) {
+    ATH_MSG_INFO("No Veto Version. Veto will not be built.");
+  } else {
+    std::string versionName;
+    if (versionKey.custom()) {
+      ATH_MSG_WARNING("VetoDetectorTool:  Detector Information coming from a custom configuration!!");
+    } else {
+      ATH_MSG_DEBUG("VetoDetectorTool:  Detector Information coming from the database and job options IGNORED.");
+      ATH_MSG_DEBUG("Keys for Veto Switches are "  << versionKey.tag()  << "  " << versionKey.node());
+
+      IRDBRecordset_ptr switchSet{m_rdbAccessSvc->getRecordsetPtr("VetoSwitches", versionKey.tag(), versionKey.node(), "FASERDD")};
+      const IRDBRecord* switches{(*switchSet)[0]};
+      m_detectorName.setValue(switches->getString("DETECTORNAME"));
+
+      if (not switches->isFieldNull("COSMICLAYOUT")) 
+      {
+        m_cosmic = switches->getInt("COSMICLAYOUT");
+      }
+      if (not switches->isFieldNull("VERSIONNAME")) 
+      {
+        versionName = switches->getString("VERSIONNAME");
+      } 
+    }
+
+    ATH_MSG_DEBUG("Creating the Veto");
+    ATH_MSG_DEBUG("Veto Geometry Options: ");
+    ATH_MSG_DEBUG(" Alignable:             " << (m_alignable.value() ? "true" : "false"));
+    ATH_MSG_DEBUG(" CosmicLayout:          " << (m_cosmic ? "true" : "false"));
+    ATH_MSG_DEBUG(" VersionName:           " << versionName);
+
+    VetoOptions 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 FaserDetectorIDBase* idHelper{nullptr};
+    ATH_CHECK(detStore()->retrieve(idHelper, "FaserID"));
+    m_athenaComps.setIdHelper(idHelper);
+
+    //
+    // This strange way of casting is to avoid an
+    // utterly brain damaged compiler warning.
+    //
+    GeoPhysVol* world{&*theExpt->getPhysVol()};
+    if (world != nullptr) ATH_MSG_INFO("Retrieved World PhysVol");
+
+/*      
+    VetoDetectorFactory theVeto{&m_athenaComps, options};
+    theVeto.create(world);
+    m_manager = theVeto.getDetectorManager();
+    
+    if (m_manager==nullptr) {
+      ATH_MSG_FATAL("VetoDetectorManager 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 VetoDetectorManager. ");
+    ATH_CHECK(detStore()->record(m_manager, m_manager->getName()));
+    theExpt->addManager(m_manager);
+    
+    // Create a symLink to the ScintDetectorManager base class
+    const ScintDetectorManager* scintDetManager{m_manager};
+    ATH_CHECK(detStore()->symLink(m_manager, scintDetManager));
+*/
+  }
+
+  // Delete unneeded singleton objects
+//   VetoDataBase::reinit();
+//   ScintMaterialManager::reinit();
+
+  return StatusCode::SUCCESS;
+}
+
+StatusCode 
+VetoDetectorTool::clear()
+{
+    ATH_MSG_WARNING("Called unimplemented VetoDetectorTool::clear()");
+//   SG::DataProxy* proxy{detStore()->proxy(ClassID_traits<VetoDetectorManager>::ID(), m_manager->getName())};
+//   if (proxy) {
+//     proxy->reset();
+//     m_manager = nullptr;
+//   }
+  return StatusCode::SUCCESS;
+}
+
+StatusCode 
+VetoDetectorTool::registerCallback()
+{
+  StatusCode sc{StatusCode::FAILURE, true};
+  if (m_alignable.value()) {
+      ATH_MSG_WARNING("Called unimplemented VetoDetectorTool::registerCallback()");
+    // 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 
+VetoDetectorTool::align(IOVSVC_CALLBACK_ARGS_P(I, keys))
+{
+    ATH_MSG_WARNING("Called unimplemented VetoDetectorTool::align()");
+    void* i = &I;
+    void* k = &keys;
+    if (i == nullptr && k == nullptr) return StatusCode::SUCCESS; // suppress stupid warning
+//   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/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoOptions.cxx b/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoOptions.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..6e5bf75492b84a0648e189b502b4f14d7a183f29
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/src/VetoOptions.cxx
@@ -0,0 +1,47 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#include "ScintGeoModel/VetoOptions.h"
+
+VetoOptions::VetoOptions()
+  : m_alignable(true)
+//   , m_alignModule(true)
+//   , m_dynAlignFolders(false)
+{}
+
+void 
+VetoOptions::setAlignable(bool flag)
+{
+  m_alignable = flag;
+}
+
+bool 
+VetoOptions::alignable() const
+{
+  return m_alignable;
+}
+
+// following may eventually become useful
+//
+// 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/Scintillator/ScintDetDescr/ScintGeoModel/src/components/ScintGeoModel_entries.cxx b/Scintillator/ScintDetDescr/ScintGeoModel/src/components/ScintGeoModel_entries.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..50292b02389bf1af778b255db7200f7d6adafef3
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintGeoModel/src/components/ScintGeoModel_entries.cxx
@@ -0,0 +1,3 @@
+#include "ScintGeoModel/VetoDetectorTool.h"
+
+DECLARE_COMPONENT( VetoDetectorTool )
\ No newline at end of file
diff --git a/Scintillator/ScintDetDescr/ScintIdDictFiles/CMakeLists.txt b/Scintillator/ScintDetDescr/ScintIdDictFiles/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7fe6fbf34b844de151e06893fb9bddc6922bf881
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintIdDictFiles/CMakeLists.txt
@@ -0,0 +1,10 @@
+################################################################################
+# Package: ScintIdDictFiles
+################################################################################
+
+# Declare the package name:
+atlas_subdir( ScintIdDictFiles )
+
+# Install files from the package:
+atlas_install_xmls( data/*.xml )
+
diff --git a/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator.xml b/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ddd8100bc8c56cdb75918800da445871e102db9f
--- /dev/null
+++ b/Scintillator/ScintDetDescr/ScintIdDictFiles/data/IdDictScintillator.xml
@@ -0,0 +1,20 @@
+<IdDictionary name="Scintillator">
+
+  <field name="part" >
+    <label name="Veto" value="1" />
+    <label name="Trigger" value="2" />
+    <label name="Preshower" value="3" />
+  </field>
+
+  <region>
+    <range field="part" value="Veto" />
+  </region>
+
+  <region>
+    <range field="part" value="Trigger"/>
+  </region>
+
+  <region>
+    <range field="part" value="Preshower" />
+  </region>
+</IdDictionary>
\ No newline at end of file
diff --git a/Tracker/TrackerDetDescr/TrackerIdDictFiles/CMakeLists.txt b/Tracker/TrackerDetDescr/TrackerIdDictFiles/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7261a346887a5216219410099f78d013e64b7d95
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdDictFiles/CMakeLists.txt
@@ -0,0 +1,10 @@
+################################################################################
+# Package: TrackerIdDictFiles
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TrackerIdDictFiles )
+
+# Install files from the package:
+atlas_install_xmls( data/*.xml )
+
diff --git a/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml
new file mode 100644
index 0000000000000000000000000000000000000000..31560e0e0fb5ee7342bbae44c0cfa3a2101f8a58
--- /dev/null
+++ b/Tracker/TrackerDetDescr/TrackerIdDictFiles/data/IdDictTracker.xml
@@ -0,0 +1,11 @@
+<IdDictionary name="Tracker">
+
+  <field name="part" >
+    <label name="SCT" value="1" />
+  </field>
+
+  <region>
+    <range field="part" value="SCT" />
+  </region>
+
+</IdDictionary>
\ No newline at end of file