diff --git a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetDescrDict.h b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetDescrDict.h
index 8ad54288ae61caca55627e883eadcfbd13b60e34..ba1fbebed567b7b1be426f0e06141233286269c9 100644
--- a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetDescrDict.h
+++ b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetDescrDict.h
@@ -11,6 +11,7 @@
 
 #include "FaserDetDescr/FaserRegion.h"
 #include "FaserDetDescr/FaserDetectorIDBase.h"
+#include "FaserDetDescr/FaserDetectorID.h"
 
 namespace FaserDetDescr {
    // Athena namespace autoloading trigger for ROOT6
diff --git a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetectorID.h b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetectorID.h
index ab6a59775601757775deb7dedabf2bde735f3096..695819aae7aeb549892a20323fb8a245fc5eebca 100644
--- a/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetectorID.h
+++ b/DetectorDescription/FaserDetDescr/FaserDetDescr/FaserDetectorID.h
@@ -265,8 +265,8 @@ private:
     int         init_neighbors(void);
 
     size_type                   m_faser_region_index;
-    // size_type                   m_DET_INDEX;
-    // size_type                   m_SUBDET_INDEX;
+    size_type                   m_SUBDET_INDEX;
+    size_type                   m_PART_INDEX;
     size_type                   m_STATION_INDEX;
     size_type                   m_PLANE_INDEX;
     size_type                   m_MODULE_INDEX;
@@ -307,8 +307,8 @@ CLASS_DEF(FaserDetectorID, 125694213, 1)
 //----------------------------------------------------------------------------
 inline Identifier  
 FaserDetectorID::module_id ( int station,
-                    int plane,
-                    int module ) const 
+                             int plane,
+                             int module ) const 
 {
     
     // Build identifier
@@ -324,19 +324,21 @@ FaserDetectorID::module_id ( int station,
 
 //----------------------------------------------------------------------------
 inline Identifier  
-VetoID::station_id ( const Identifier& plate_id ) const
+FaserDetectorID::module_id ( const Identifier& submodule_id ) const
 {
-    Identifier result(plate_id);
+    Identifier result(submodule_id);
     //  Reset the plate and pmt fields
-    m_plate_impl.reset(result);
-    m_pmt_impl.reset(result);
+    m_submodule_impl.reset(result);
+    m_sensor_impl.reset(result);
     return (result);
 }
 
 //----------------------------------------------------------------------------
 inline Identifier
-VetoID::plate_id ( int station,  
-                   int plate ) const 
+FaserDetectorID::submodule_id ( int station, 
+                                int plane,
+                                int module,
+                                int submodule ) const 
 {
     // Build identifier
     Identifier result((Identifier::value_type)0);
@@ -345,89 +347,107 @@ VetoID::plate_id ( int station,
     m_scint_impl.pack    (scint_field_value(), result);
     m_veto_impl.pack     (veto_field_value(),  result);
     m_station_impl.pack  (station,             result);
-    m_plate_impl.pack    (plate,              result);
+    m_plane_impl.pack    (plane,               result);
+    m_module_impl.pack   (module,              result);
+    m_submodule_impl.pack(submodule,           result);
 
     return result;
 }
 
 //----------------------------------------------------------------------------
 inline Identifier
-VetoID::plate_id ( const Identifier& pmt_id ) const
+FaserDetectorID::submodule_id ( const Identifier& sensor_id ) const
 {
-    Identifier result(pmt_id);
+    Identifier result(sensor_id);
     // reset the strip field
-    m_pmt_impl.reset(result);
+    m_sensor_impl.reset(result);
     return (result);
 }
 
 inline IdentifierHash
-VetoID::plate_hash      (Identifier plate_id) const 
+FaserDetectorID::submodule_hash      (Identifier submodule_id) const 
 {
-    id_vec_it it = std::lower_bound(m_plate_vec.begin(), 
-                                    m_plate_vec.end(), 
-                                    plate_id);
-    // Require that plate_id matches the one in vector
-    if (it != m_plate_vec.end() && plate_id == (*it)) {
-        return (it - m_plate_vec.begin());
+    id_vec_it it = std::lower_bound(m_submodule_vec.begin(), 
+                                    m_submodule_vec.end(), 
+                                    submodule_id);
+    // Require that submodule_id matches the one in vector
+    if (it != m_submodule_vec.end() && submodule_id == (*it)) {
+        return (it - m_submodule_vec.begin());
     }
     IdentifierHash result;
     return (result); // return hash in invalid state
 }
 
-
-
 //----------------------------------------------------------------------------
 inline Identifier
-VetoID::pmt_id (   int station,  
-                   int plate, 
-                   int pmt) const
+FaserDetectorID::sensor_id ( int station,  
+                             int plane, 
+                             int module,
+                             int submodule,
+                             int sensor ) const
 {
     // Build identifier
     Identifier result((Identifier::value_type)0);
 
     // Pack fields independently
     m_scint_impl.pack    (scint_field_value(), result);
-    m_veto_impl.pack     (veto_field_value(), result);
-    m_station_impl.pack  (station,            result);
-    m_plate_impl.pack    (plate,              result);
-    m_pmt_impl.pack      (pmt,                result);
+    m_veto_impl.pack     (veto_field_value(),  result);
+    m_station_impl.pack  (station,             result);
+    m_plane_impl.pack    (plane,               result);
+    m_module_impl.pack   (module,              result);
+    m_submodule_impl.pack(submodule,           result);
+    m_sensor_impl.pack   (sensor,              result);
 
     return result;
 }
 
 //----------------------------------------------------------------------------
 inline Identifier  
-VetoID::pmt_id ( const Identifier& plate_id, int pmt ) const
+FaserDetectorID::sensor_id ( const Identifier& submodule_id, int sensor ) const
 {
 	// Build identifier
-    Identifier result(plate_id);
+    Identifier result(submodule_id);
   
-    // Reset strip and then add in value
-    m_pmt_impl.reset   (result);
- 	m_pmt_impl.pack    (pmt, result);
+    // Reset sensor and then add in value
+    m_sensor_impl.reset   (result);
+ 	m_sensor_impl.pack    (sensor, result);
   
 	return result;  
 }
+
 //----------------------------------------------------------------------------
 inline int 
-VetoID::station       (const Identifier& id) const
+FaserDetectorID::station       (const Identifier& id) const
 {
     return (m_station_impl.unpack(id));
 }
 
 //----------------------------------------------------------------------------
 inline int 
-VetoID::plate     (const Identifier& id) const
+FaserDetectorID::plane         (const Identifier& id) const
+{
+    return (m_plane_impl.unpack(id));
+}
+//----------------------------------------------------------------------------
+inline int 
+FaserDetectorID::module        (const Identifier& id) const
+{
+    return (m_module_impl.unpack(id));
+}
+
+//----------------------------------------------------------------------------
+inline int 
+FaserDetectorID::submodule     (const Identifier& id) const
 {
-    return (m_plate_impl.unpack(id));
+    return (m_submodule_impl.unpack(id));
 }
 
 //----------------------------------------------------------------------------
 inline int 
-VetoID::pmt           (const Identifier& id) const
+FaserDetectorID::sensor       (const Identifier& id) const
 {
-    return (m_pmt_impl.unpack(id));
+    return (m_sensor_impl.unpack(id));
 }
 
 
-#endif // SCINTIDENTIFIER_VETOID_H
+#endif // FASERDETDESCR_FASERDETECTORID_H
diff --git a/DetectorDescription/FaserDetDescr/src/FaserDetectorID.cxx b/DetectorDescription/FaserDetDescr/src/FaserDetectorID.cxx
index c1851a07a594f5fc11f0dfd57988f23caf2a2595..ebfba7692d04d3e54538db78bc1a2e53e533918b 100644
--- a/DetectorDescription/FaserDetDescr/src/FaserDetectorID.cxx
+++ b/DetectorDescription/FaserDetDescr/src/FaserDetectorID.cxx
@@ -10,7 +10,7 @@
 //<<<<<< INCLUDES                                                       >>>>>>
 #include "GaudiKernel/MsgStream.h"
 
-#include "ScintIdentifier/VetoID.h"
+#include "FaserDetDescr/FaserDetectorID.h"
 #include "Identifier/IdentifierHash.h"
 #include "IdDict/IdDictDefs.h"  
 #include <set>
@@ -33,29 +33,31 @@
 /////////////////////////////////////////////////////////////////////////////
 
 
-VetoID::VetoID(void)
+FaserDetectorID::FaserDetectorID(void)
         :
-        m_veto_region_index(0),
-        m_SCINT_INDEX(0),
-        m_VETO_INDEX(1),
+        m_faser_region_index(0),
+        m_SUBDET_INDEX(0),
+        m_PART_INDEX(1),
         m_STATION_INDEX(2),
-        m_PLATE_INDEX(3),
-        m_PMT_INDEX(4),
-        m_plate_hash_max(0),
-        m_pmt_hash_max(0),
+        m_PLANE_INDEX(3),
+        m_MODULE_INDEX(4),
+        m_SUBMODULE_INDEX(5),
+        m_SENSOR_INDEX(6),
+        m_submodule_hash_max(0),
+        m_sensor_hash_max(0),
         m_dict(0)
 {
 }
 
 int
-VetoID::init_hashes(void)
+FaserDetectorID::init_hashes(void)
 {
 
     //
     // create a vector(s) to retrieve the hashes for compact ids. For
-    // the moment, we implement a hash for plates but NOT for pmts
+    // the moment, we implement a hash for submodules but NOT for sensors
     //
-    MsgStream log(m_msgSvc, "VetoID");
+    MsgStream log(m_msgSvc, "FaserDetectorID");
     // wafer hash
     m_plate_hash_max = m_full_plate_range.cardinality();
     m_plate_vec.resize(m_plate_hash_max);
@@ -70,7 +72,7 @@ VetoID::init_hashes(void)
             Identifier id = plate_id(exp_id[m_STATION_INDEX],
                                      exp_id[m_PLATE_INDEX]);
             if(!(ids.insert(id)).second) {
-                log << MSG::ERROR << " VetoID::init_hashes "
+                log << MSG::ERROR << " FaserDetectorID::init_hashes "
                     << " Error: duplicated id for plate id. nid " << nids
                     << " compact id " << id.getString()
                     << " id " << (std::string)exp_id << endmsg;
@@ -80,7 +82,7 @@ VetoID::init_hashes(void)
         }
     }
     if(ids.size() != m_plate_hash_max) {
-        log << MSG::ERROR << " VetoID::init_hashes "
+        log << MSG::ERROR << " FaserDetectorID::init_hashes "
             << " Error: set size NOT EQUAL to hash max. size " << ids.size()
             << " hash max " << m_plate_hash_max 
             << endmsg;
@@ -103,9 +105,9 @@ VetoID::init_hashes(void)
 
 
 int
-VetoID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
+FaserDetectorID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
 {
-    MsgStream log(m_msgSvc, "VetoID");
+    MsgStream log(m_msgSvc, "FaserDetectorID");
     log << MSG::INFO << "Initialize from dictionary" << endmsg;
   
     // Check whether this helper should be reinitialized
@@ -130,7 +132,7 @@ VetoID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
 
     m_dict = dict_mgr.find_dictionary ("Scintillator"); 
     if(!m_dict) {
-        log << MSG::ERROR << " VetoID::initialize_from_dict - cannot access Scintillator dictionary " << endmsg;
+        log << MSG::ERROR << " FaserDetectorID::initialize_from_dict - cannot access Scintillator dictionary " << endmsg;
         return 1;
     }
 
@@ -203,31 +205,33 @@ VetoID::initialize_from_dictionary(const IdDictMgr& dict_mgr)
 }
 
 int     
-VetoID::initLevelsFromDict()
+FaserDetectorID::initLevelsFromDict()
 {
 
 
-    MsgStream log(m_msgSvc, "VetoID");
+    MsgStream log(m_msgSvc, "FaserDetectorID");
     if(!m_dict) {
-        log << MSG::ERROR << " VetoID::initLevelsFromDict - dictionary NOT initialized " << endmsg;
+        log << MSG::ERROR << " FaserDetectorID::initLevelsFromDict - dictionary NOT initialized " << endmsg;
         return (1);
     }
     
     // Find out which identifier field corresponds to each level. Use
     // names to find each field/leve.
 
-    m_SCINT_INDEX               = 999;
-    m_VETO_INDEX                = 999;
+    m_SUBDET_INDEX              = 999;
+    m_PART_INDEX                = 999;
     m_STATION_INDEX             = 999;
-    m_PLATE_INDEX               = 999;
-    m_PMT_INDEX                 = 999;
+    m_PLANE_INDEX               = 999;
+    m_MODULE_INDEX              = 999;
+    m_SUBMODULE_INDEX           = 999;
+    m_SENSOR_INDEX              = 999;
     
 
     // Save index to a Veto region for unpacking
     ExpandedIdentifier id; 
     id << scint_field_value() << veto_field_value();
     if (m_dict->find_region(id, m_veto_region_index)) {
-        log << MSG::ERROR << "VetoID::initLevelsFromDict - unable to find veto region index: id, reg "  
+        log << MSG::ERROR << "FaserDetectorID::initLevelsFromDict - unable to find veto region index: id, reg "  
             << (std::string)id << " " << m_veto_region_index
             << endmsg;
         return (1);