diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.cxx b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.cxx
index 65fa9da05b7b4db15018c6c1941cfea7e14e126d..c620467b51c50706e96a24925b78f398ea31ca8f 100755
--- a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.cxx
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.cxx
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2019 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "SCT_FrontEnd.h"
@@ -72,9 +72,9 @@ SCT_FrontEnd::SCT_FrontEnd(const std::string &type, const std::string &name,
                     "Threshold time");
     declareProperty("PulseAveragingFlag", m_PulseAveragingFlag = false,
                     "Flag to set the Pulse Averaging");
-    declareProperty("DataCompressionMode", m_data_compression_mode = 1,
+    declareProperty("DataCompressionMode", m_data_compression_mode = Edge_01X,
                     "Front End Data Compression Mode");
-    declareProperty("DataReadOutMode", m_data_readout_mode = 0,
+    declareProperty("DataReadOutMode", m_data_readout_mode = Condensed,
                     "Front End Data Read out mode Mode");
     declareProperty("UseCalibData", m_useCalibData = true,
                     "Flag to use Calib Data");
@@ -150,6 +150,29 @@ StatusCode SCT_FrontEnd::initialize() {
     ATH_MSG_INFO("m_data_readout_mode     (DataReadOutMode)     = " <<
         m_data_readout_mode);
 
+    // Check configuration. If it is invalid, abort this job.
+    if (not (m_data_compression_mode==Level_X1X or
+             m_data_compression_mode==Edge_01X or
+             m_data_compression_mode==AnyHit_1XX_X1X_XX1)) {
+      ATH_MSG_FATAL("m_data_compression_mode = " << m_data_compression_mode
+                    << " is invalid. Abort this job!!!");
+      return StatusCode::FAILURE;
+    }
+    if (not (m_data_readout_mode==Condensed or m_data_readout_mode==Expanded)) {
+      ATH_MSG_FATAL("m_data_readout_mode = " << m_data_readout_mode
+                    << " is invalid. Abort this job!!!");
+      return StatusCode::FAILURE;
+    }
+    if ((m_data_compression_mode==Level_X1X or m_data_compression_mode==AnyHit_1XX_X1X_XX1)
+        and m_data_readout_mode==Condensed) {
+      ATH_MSG_FATAL("m_data_compression_mode = " << m_data_compression_mode
+                    << (m_data_compression_mode==Level_X1X ? " (Level_X1X)" : " (AnyHit_1XX_X1X_XX1)")
+                    << " requires timing information."
+                    << " However, m_data_readout_mode = " << m_data_readout_mode
+                    << " (Condensed) does not keep timing information. Abort this job!!!");
+      return StatusCode::FAILURE;
+    }
+
     return m_sc;
 }
 
@@ -174,22 +197,15 @@ StatusCode SCT_FrontEnd::initVectors(const int &strips) const {
     m_GainFactor.assign(strips, 0.0);
     m_NoiseFactor.assign(strips, 0.0);
 
-    if (m_data_compression_mode == 1 and m_data_readout_mode == 0) {
-        m_Analogue[0].reserve(1);
-        m_Analogue[1].reserve(strips);
-    }
-    else if (m_data_compression_mode == 2 and m_data_readout_mode == 0) {
+    if (m_data_readout_mode == Condensed) {
         m_Analogue[0].reserve(strips);
         m_Analogue[1].reserve(strips);
     }
-    else if (m_data_compression_mode == 3 or m_data_readout_mode == 1) {
+    else { // Expanded
         m_Analogue[0].reserve(strips);
         m_Analogue[1].reserve(strips);
         m_Analogue[2].reserve(strips);
     }
-    else {
-        return StatusCode::FAILURE;
-    }
 
     return StatusCode::SUCCESS;
 }
@@ -308,14 +324,7 @@ StatusCode SCT_FrontEnd::prepareGainAndOffset(
                         m_NoiseFactor[i] = Noise * mode;
 
                         // Fill the noise and offset values into the Analogue
-                        if (m_data_compression_mode == 1 and
-                            m_data_readout_mode == 0) { // level mode x1x
-                            m_Analogue[1][i] = m_Offset[i] + m_NoiseFactor[i] *
-                                               CLHEP::RandGaussZiggurat::shoot(
-                                m_rndmEngine);
-                        }
-                        else if (m_data_compression_mode == 2 and
-                                 m_data_readout_mode == 0) { // edge mode 01x
+                        if (m_data_readout_mode == Condensed) {
                             m_Analogue[0][i] = m_Offset[i] + m_NoiseFactor[i] *
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
@@ -323,10 +332,7 @@ StatusCode SCT_FrontEnd::prepareGainAndOffset(
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
                         }
-                        else if (m_data_compression_mode == 3 or
-                                 m_data_readout_mode == 1) { // any hit mode xxx
-                                                             // or expanded read
-                                                             // out mode
+                        else { // Expanded
                             m_Analogue[0][i] = m_Offset[i] + m_NoiseFactor[i] *
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
@@ -483,14 +489,7 @@ StatusCode SCT_FrontEnd::prepareGainAndOffset(
                         m_NoiseFactor[i] = noiseByChipVect[chip];
 
                         // Fill the noise and offset values into the Analogue
-                        if (m_data_compression_mode == 1 and
-                            m_data_readout_mode == 0) { // level mode x1x
-                            m_Analogue[1][i] = m_Offset[i] + m_NoiseFactor[i] *
-                                               CLHEP::RandGaussZiggurat::shoot(
-                                m_rndmEngine);
-                        }
-                        else if (m_data_compression_mode == 2 and
-                                 m_data_readout_mode == 0) { // edge mode 01x
+                        if (m_data_readout_mode == Condensed) {
                             m_Analogue[0][i] = m_Offset[i] + m_NoiseFactor[i] *
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
@@ -498,10 +497,7 @@ StatusCode SCT_FrontEnd::prepareGainAndOffset(
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
                         }
-                        else if (m_data_compression_mode == 3 or
-                                 m_data_readout_mode == 1) { // any hit mode xxx
-                                                             // or expanded read
-                                                             // out mode
+                        else { // Expanded
                             m_Analogue[0][i] = m_Offset[i] + m_NoiseFactor[i] *
                                                CLHEP::RandGaussZiggurat::shoot(
                                 m_rndmEngine);
@@ -534,7 +530,7 @@ StatusCode SCT_FrontEnd::randomNoise(SiChargedDiodeCollection &collection, const
     int nNoisyStrips = 0;
     double mode = 1.;
 
-    const bool noise_expanded_mode = (m_data_compression_mode == 3 and m_data_readout_mode == 1);
+    const bool noise_expanded_mode = (m_data_compression_mode == AnyHit_1XX_X1X_XX1 and m_data_readout_mode == Expanded);
 
     // Will give 3 times as much noise occupancy if running in any hit expanded
     // mode
@@ -685,7 +681,7 @@ StatusCode SCT_FrontEnd::randomNoise(SiChargedDiodeCollection &collection, const
     std::vector<int> nNoisyStrips(n_chips, 0);
     double mode = 1.;
 
-    const bool noise_expanded_mode = (m_data_compression_mode == 3 and m_data_readout_mode == 1);
+    const bool noise_expanded_mode = (m_data_compression_mode == AnyHit_1XX_X1X_XX1 and m_data_readout_mode == Expanded);
 
     // Will give 3 times as much noise occupancy if running in any hit expanded
     // mode
@@ -844,18 +840,13 @@ void SCT_FrontEnd::process(SiChargedDiodeCollection &collection) const {
     m_StripHitsOnWafer.assign(m_strip_max, 0);
 
     // Containes the charge for each bin on each hit strip
-    if (m_data_compression_mode == 1 and m_data_readout_mode == 0) {
-        for (int i = 0; i < m_strip_max; ++i) {
-            m_Analogue[1][i] = 0.0;
-        }
-    }
-    else if (m_data_compression_mode == 2 and m_data_readout_mode == 0) {
+    if (m_data_readout_mode == Condensed) {
         for (int i = 0; i < m_strip_max; ++i) {
             m_Analogue[0][i] = 0.0;
             m_Analogue[1][i] = 0.0;
         }
     }
-    else if (m_data_compression_mode == 3 or m_data_readout_mode == 1) {
+    else { // Expanded
         for (int i = 0; i < m_strip_max; ++i) {
             m_Analogue[0][i] = 0.0;
             m_Analogue[1][i] = 0.0;
@@ -929,7 +920,7 @@ StatusCode SCT_FrontEnd::doSignalChargeForHits(
 
     // set up number of needed bins depending on the compression mode
     short bin_max = 0;
-    if (m_data_readout_mode == 0) {
+    if (m_data_readout_mode == Condensed) {
         bin_max = m_data_compression_mode;
     }
     else {
@@ -966,30 +957,7 @@ StatusCode SCT_FrontEnd::doSignalChargeForHits(
                     m_sct_amplifier->AccumulateAverages(ChargesOnStrip);
                 }
 
-                if (m_data_compression_mode == 1 and m_data_readout_mode == 0) { //
-                                                                                 // level
-                                                                                 // mode
-                                                                                 // x1x
-                    // Amplifier response
-                    m_Analogue[1][strip] += m_GainFactor[strip] *
-                                            m_sct_amplifier->response(
-                        ChargesOnStrip,
-                        m_timeOfThreshold);
-
-                    // Add Crosstalk signal for neighboring strip
-                    response[0] = m_sct_amplifier->crosstalk(ChargesOnStrip,
-                                                             m_timeOfThreshold);
-                    if (strip + 1 < m_strip_max) {
-                        m_Analogue[1][strip + 1] += m_GainFactor[strip + 1] *
-                                                    response[0];
-                    }
-                    if (strip > 0) {
-                        m_Analogue[1][strip - 1] += m_GainFactor[strip - 1] *
-                                                    response[0];
-                    }
-                }
-                else if (m_data_compression_mode == 2 and m_data_readout_mode ==
-                         0) { // edge mode 01x
+                if (m_data_readout_mode == Condensed) {
                     // Amplifier response
                     m_sct_amplifier->response(ChargesOnStrip, m_timeOfThreshold,
                                               response);
@@ -1013,8 +981,7 @@ StatusCode SCT_FrontEnd::doSignalChargeForHits(
                         }
                     }
                 }
-                else if (m_data_compression_mode == 3 or m_data_readout_mode ==
-                         1) { // any hit mode xxx or expanded read out mode
+                else { // Expanded
                     // Amplifier response
                     m_sct_amplifier->response(ChargesOnStrip, m_timeOfThreshold,
                                               response);
@@ -1066,30 +1033,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
         if (roCell.isValid()) {
             int strip = roCell.strip();
             if (strip > -1 && strip < m_strip_max) {
-                if (m_data_compression_mode == 1 and m_data_readout_mode == 0) { //
-                                                                                 // level
-                                                                                 // mode
-                                                                                 // x1x
-                    if (m_Analogue[1][strip] < m_Threshold) {
-                        SiHelper::belowThreshold(diode, true);   // Below strip
-                                                                 // diode signal
-                                                                 // threshold
-                        m_StripHitsOnWafer[strip] = -1;
-                    }
-                    else if (((0x10 & diode.flag()) == 0x10) || ((0x4 &
-                                                                  diode.flag())
-                                                                 == 0x4)) {
-                        // previously a crazy strip number could have screwed
-                        // things up here.
-                        m_StripHitsOnWafer[strip] = -1;
-                    }
-                    else {
-                        m_StripHitsOnWafer[strip] = 1;
-                        SiHelper::SetTimeBin(diode, 2); // set timebin info
-                    }
-                }
-                else if (m_data_compression_mode == 2 and m_data_readout_mode ==
-                         0) { // edge mode 01x
+                if (m_data_readout_mode == Condensed) {
                     if ((m_Analogue[0][strip] >= m_Threshold ||
                          m_Analogue[1][strip] < m_Threshold)) {
                         SiHelper::belowThreshold(diode, true);   // Below strip
@@ -1109,8 +1053,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
                         SiHelper::SetTimeBin(diode, 2); // set timebin info
                     }
                 }
-                else if (m_data_compression_mode == 3 or m_data_readout_mode ==
-                         1) {
+                else { // Expanded
                     // Check hit pattern
                     int have_hit_bin = 0;
                     if (m_Analogue[0][strip] >= m_Threshold) {
@@ -1129,8 +1072,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
                         // things up here.
                         m_StripHitsOnWafer[strip] = -1;
                     }
-                    else if (m_data_compression_mode == 1) { // !< level and
-                                                             // expanded mode
+                    else if (m_data_compression_mode == Level_X1X) {
                         if (have_hit_bin == 2 or have_hit_bin == 3 or
                             have_hit_bin == 6 or have_hit_bin == 7) {
                             m_StripHitsOnWafer[strip] = 1;
@@ -1145,8 +1087,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
                             m_StripHitsOnWafer[strip] = -1;
                         }
                     }
-                    else if (m_data_compression_mode == 2) { // !< edge and
-                                                             // expanded mode
+                    else if (m_data_compression_mode == Edge_01X) {
                         if (have_hit_bin == 2 or have_hit_bin == 3) {
                             m_StripHitsOnWafer[strip] = 1;
                             SiHelper::SetTimeBin(diode, have_hit_bin);
@@ -1160,7 +1101,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
                             m_StripHitsOnWafer[strip] = -1;
                         }
                     }
-                    else if (m_data_compression_mode == 3) { // !< any hit mode
+                    else if (m_data_compression_mode == AnyHit_1XX_X1X_XX1) {
                         if (have_hit_bin == 0) {
                             SiHelper::belowThreshold(diode, true); // Below
                                                                    // strip
@@ -1171,12 +1112,12 @@ StatusCode SCT_FrontEnd::doThresholdCheckForRealHits(
                         }
                         else {
                             m_StripHitsOnWafer[strip] = 1;
-                            if (m_data_readout_mode == 1) {    // !< check for
+                            if (m_data_readout_mode == Expanded) { // !< check for
                                                                // exp mode or
                                                                // not
                                 SiHelper::SetTimeBin(diode, have_hit_bin);
                             }
-                            else {
+                            else { // Condensed
                                 SiHelper::SetTimeBin(diode, 2);
                             }
                         }
@@ -1207,24 +1148,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
         if (m_Analogue[1][strip] > 0) { // Better way of doing this?! set
                                         // m_StripHitsOnWafer to x in
                                         // prepareGainAndOffset
-            if (m_data_compression_mode == 1 and m_data_readout_mode == 0) { // level
-                                                                             // mode
-                                                                             // x1x
-                if (m_Analogue[1][strip] < m_Threshold) {
-                    m_StripHitsOnWafer[strip] = -2;           // Below threshold
-                }
-                else {
-                    m_StripHitsOnWafer[strip] = 2;            // Crosstalk+Noise
-                                                              // hit
-                    if (StatusCode::SUCCESS != addNoiseDiode(collection, strip,
-                                                             2)) {
-                        ATH_MSG_ERROR(
-                            "Can't add noise hit diode to collection");
-                    }
-                }
-            }
-            else if (m_data_compression_mode == 2 and m_data_readout_mode ==
-                     0) { // edge mode 01x
+            if (m_data_readout_mode == Condensed) {
                 if ((m_Analogue[0][strip] >= m_Threshold ||
                      m_Analogue[1][strip] < m_Threshold)) {
                     m_StripHitsOnWafer[strip] = -2;           // Below threshold
@@ -1239,7 +1163,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                     }
                 }
             }
-            else if (m_data_compression_mode == 3 or m_data_readout_mode == 1) {
+            else { // Expanded
                 int have_hit_bin = 0;
                 if (m_Analogue[0][strip] >= m_Threshold) {
                     have_hit_bin = 4;
@@ -1250,8 +1174,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                 if (m_Analogue[2][strip] >= m_Threshold) {
                     have_hit_bin += 1;
                 }
-                if (m_data_compression_mode == 1) { // !< level and expanded
-                                                    // mode
+                if (m_data_compression_mode == Level_X1X) {
                     if (have_hit_bin == 2 or have_hit_bin == 3 or
                         have_hit_bin == 6 or have_hit_bin == 7) {
                         m_StripHitsOnWafer[strip] = 2;          // Crosstalk+Noise
@@ -1269,8 +1192,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                                                                 // threshold
                     }
                 }
-                else if (m_data_compression_mode == 2) {// !< edge and expanded
-                                                        // mode
+                else if (m_data_compression_mode == Edge_01X) {
                     if (have_hit_bin == 2 or have_hit_bin == 3) {
                         m_StripHitsOnWafer[strip] = 2; // Noise hit
                         if (StatusCode::SUCCESS != addNoiseDiode(collection,
@@ -1286,7 +1208,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                                                                 // threshold
                     }
                 }
-                else if (m_data_compression_mode == 3) { // !< any hit mode
+                else if (m_data_compression_mode == AnyHit_1XX_X1X_XX1) {
                     if (have_hit_bin == 0) {
                         m_StripHitsOnWafer[strip] = -2;         // Below
                                                                 // threshold
@@ -1295,7 +1217,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                         m_StripHitsOnWafer[strip] = 2;          // !<
                                                                 // Crosstalk+Noise
                                                                 // hit
-                        if (m_data_readout_mode == 1) {       // !< check for
+                        if (m_data_readout_mode == Expanded) { // !< check for
                                                               // exp mode or not
                             if (StatusCode::SUCCESS != addNoiseDiode(collection,
                                                                      strip,
@@ -1305,7 +1227,7 @@ StatusCode SCT_FrontEnd::doThresholdCheckForCrosstalkHits(
                                     "Can't add noise hit diode to collection");
                             }
                         }
-                        else {
+                        else { // Condensed
                             if (StatusCode::SUCCESS != addNoiseDiode(collection,
                                                                      strip,
                                                                      2)) {
@@ -1335,7 +1257,7 @@ StatusCode SCT_FrontEnd::doClustering(SiChargedDiodeCollection &collection)
     
     SiCellId hitStrip;        
 
-    if (m_data_readout_mode == 0) {
+    if (m_data_readout_mode == Condensed) {
         do {
             if (m_StripHitsOnWafer[strip] > 0) {
                 // ====== First step: Get the cluster size
diff --git a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.h b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.h
index 7ad0308c73a17e2527431162f9ea9599ef858c3c..b28ae99ff3babe7e2d2937d1f5ab4315d70500fd 100755
--- a/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.h
+++ b/InnerDetector/InDetDigitization/SCT_Digitization/src/SCT_FrontEnd.h
@@ -1,5 +1,5 @@
 /*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
 */
 
 /**
@@ -89,6 +89,9 @@ class  SCT_FrontEnd : public AthAlgTool, virtual public ISCT_FrontEnd {
 
  private:
 
+  enum CompressionMode { Level_X1X=1, Edge_01X=2, AnyHit_1XX_X1X_XX1=3 }; // Used for m_data_compression_mode (DataCompressionMode)
+  enum ReadOutMode { Condensed=0, Expanded=1 }; // Used for m_data_readout_mode (DataReadOutMode)
+
   bool m_PulseAveragingFlag;
 
   float m_NoiseBarrel ;                     //!< Noise factor, Barrel  (in the case of no use of calibration data)