diff --git a/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx b/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx
index bf55b67a4dfcaaf6e8411d83ec0a440ce13a181e..61ab9e6b05db23e06571586bb15862591064d729 100755
--- a/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx
+++ b/Trigger/TrigT1/TrigT1CaloUtils/src/SystemEnergy.cxx
@@ -43,6 +43,8 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle<
                                                                                                                     m_debug(false)
 {
 
+  int xyMax = 1 << (m_sumBits - 1);
+
   /** Get Ex, Ey, ET sums from crates and form global sums <br>
       Propagate overflows and test for new ones <br> */
 
@@ -62,14 +64,8 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle<
       m_systemEt += (*it)->et();
     }
     
-    // In the current implementation we could not trust to
-    // overflow errors for restricted sums:
-    // m_overflowX = m_overflowX | (*it)->exOverflow();
-    // m_overflowY = m_overflowY | (*it)->eyOverflow();
-    // m_overflowT = m_overflowT | (*it)->etOverflow();
-    
-    m_overflowX = m_overflowX | ((*it)->ex() == -(m_maxEtSumThr + 1));
-    m_overflowY = m_overflowY | ((*it)->ey() == -(m_maxEtSumThr + 1));
+    m_overflowX = m_overflowX | ((*it)->ex() == -xyMax);
+    m_overflowY = m_overflowY | ((*it)->ey() == -xyMax);
     m_overflowT = m_overflowT | ((*it)->et() == m_maxEtSumThr);
 
     if ((*it)->restricted())
@@ -81,18 +77,18 @@ SystemEnergy::SystemEnergy(const DataVector<CrateEnergy> *crates, ServiceHandle<
     m_systemEt = m_etSumOverflow;
   }
     
-  /** Check for overflow of Ex, Ey sums */
-  int xyMax = 1 << (m_sumBits - 1);
 
-  if ((abs(m_systemEx) > xyMax) || m_overflowX)
+
+  if ((abs(m_systemEx) >= xyMax) || m_overflowX)
   {
     m_overflowX = 1;
-    m_systemEx = xyMax;
+    m_systemEx = -xyMax;
   }
-  if ((abs(m_systemEy) > xyMax) || m_overflowY)
+
+  if ((abs(m_systemEy) >= xyMax) || m_overflowY)
   {
     m_overflowY = 1;
-    m_systemEy = xyMax;
+    m_systemEy = -xyMax;
   }
 
   if (m_debug)
@@ -125,9 +121,16 @@ SystemEnergy::SystemEnergy(unsigned int et, unsigned int exTC, unsigned int eyTC
                                                                              m_metSigHits(0),
                                                                              m_debug(false)
 {
+
   m_systemEx = decodeTC(exTC);
   m_systemEy = decodeTC(eyTC);
 
+  int xyMax = 1 << (m_sumBits - 1);
+
+  m_overflowT = m_systemEt == m_etSumOverflow;
+  m_overflowX = m_systemEx == -xyMax;
+  m_overflowY = m_systemEy == -xyMax;
+
   if (m_debug)
   {
     std::cout << "SystemEnergy results: " << std::endl