diff --git a/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx b/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx
index 24513fcf0dcb8765e40489e2925eef3ff5536020..28e56462ec14b3429b65b90909d3a5564e7a3305 100755
--- a/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx
+++ b/Trigger/TrigT1/TrigT1RPClogic/src/decodeSL.cxx
@@ -1,20 +1,34 @@
 /*
-  Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
+  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
 */
 
 #include "TrigT1RPClogic/decodeSL.h"
 
+namespace{
+  /*
+   * Note implicit sign extension: field with type unsigned short (16 bits, unsigned) 
+   * is promoted in (unsigned short)field << posit to type int (32 bits, signed), 
+   * then sign-extended to type unsigned long (64 bits, unsigned). If 
+   * (unsigned short)field << posit is greater than 0x7FFFFFFF, the upper bits of the 
+   * result will all be 1.
+  */
+  unsigned short
+  code(unsigned long int slword, unsigned short int field, unsigned short int posit){
+    return ((slword&((unsigned short int) field<<posit))>>posit);
+  }
+}
+
 namespace TriggerRPC{
 
 //****************************************************************************//
 unsigned short int moreThan2(unsigned long int slword) {
 //
-// returns 1 if the rae more than 2 candidates in a sector
+// returns 1 if there are more than 2 candidates in a sector
 // returns 0 otherwise
 //
  unsigned short int field=0x1;
  unsigned short int posit=0;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short int ROI1(unsigned long int slword) {
@@ -23,7 +37,7 @@ unsigned short int ROI1(unsigned long int slword) {
 //
  unsigned short int field=0x1f;
  unsigned short int posit=1;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short int OVL1(unsigned long int slword) {
@@ -32,7 +46,7 @@ unsigned short int OVL1(unsigned long int slword) {
 //
  unsigned short int field=0x3;
  unsigned short int posit=8;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short int ROI2(unsigned long int slword) {
@@ -41,7 +55,7 @@ unsigned short int ROI2(unsigned long int slword) {
 //
  unsigned short int field=0x1f;
  unsigned short int posit=10;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short int OVL2(unsigned long int slword) {
@@ -50,7 +64,7 @@ unsigned short int OVL2(unsigned long int slword) {
 //
  unsigned short int field=0x3;
  unsigned short int posit=17;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short int PT1(unsigned long int slword) {
@@ -59,7 +73,7 @@ unsigned short int PT1(unsigned long int slword) {
 //
  unsigned short int field=0x7;
  unsigned short int posit=19;
- unsigned short int ptcode=((slword&((unsigned short int) field<<posit))>>posit);
+ unsigned short int ptcode = code(slword, field, posit);
  if(!ptcode) {
   return 0;
  } else {
@@ -74,7 +88,7 @@ unsigned short int PT2(unsigned long int slword) {
 //
  unsigned short int field=0x7;
  unsigned short int posit=22;
- unsigned short int ptcode=((slword&((unsigned short int) field<<posit))>>posit);
+ unsigned short int ptcode = code(slword, field, posit);
  if(!ptcode) {
   return 0;
  } else {
@@ -85,22 +99,22 @@ unsigned short int PT2(unsigned long int slword) {
 //****************************************************************************//
 unsigned short moreThan1_1(unsigned long int slword) {
 //
-// returns 1 if the are more than 1 candidates in ROI1
+// returns 1 if there is more than 1 candidate in ROI1
 // returns 0 otherwise
 //
  unsigned short int field=0x1;
  unsigned short int posit=25;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short moreThan1_2(unsigned long int slword) {
 //
-// returns 1 if the are more than 1 candidates in ROI2
+// returns 1 if there is more than 1 candidate in ROI2
 // returns 0 otherwise
 //
  unsigned short int field=0x1;
  unsigned short int posit=26;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }
 //****************************************************************************//
 unsigned short BunchXID(unsigned long int slword) {
@@ -109,7 +123,7 @@ unsigned short BunchXID(unsigned long int slword) {
 //
  unsigned short int field=0x7;
  unsigned short int posit=27;
- return ((slword&((unsigned short int) field<<posit))>>posit);
+ return code(slword, field, posit);
 }