diff --git a/include/sdrutils.hpp b/include/sdrutils.hpp
index b3d7689..43a53fd 100644
--- a/include/sdrutils.hpp
+++ b/include/sdrutils.hpp
@@ -48,6 +48,13 @@
 
 using SensorNumMap = boost::bimap<int, std::string>;
 
+static constexpr uint16_t maxSensorsPerLUN = 255;
+static constexpr uint16_t maxIPMISensors = (maxSensorsPerLUN * 3);
+static constexpr uint16_t lun1Sensor0 = 0x100;
+static constexpr uint16_t lun3Sensor0 = 0x300;
+static constexpr uint16_t invalidSensorNumber = 0xFFFF;
+static constexpr uint8_t reservedSensorNumber = 0xFF;
+
 namespace details
 {
 inline static bool getSensorSubtree(std::shared_ptr<SensorSubTree>& subtree)
@@ -131,11 +138,28 @@
 
     sensorNumMapPtr = std::make_shared<SensorNumMap>();
 
-    uint8_t sensorNum = 0;
+    uint16_t sensorNum = 0;
+    uint16_t sensorIndex = 0;
     for (const auto& sensor : *sensorTree)
     {
         sensorNumMapPtr->insert(
-            SensorNumMap::value_type(sensorNum++, sensor.first));
+            SensorNumMap::value_type(sensorNum, sensor.first));
+        sensorIndex++;
+        if (sensorIndex == maxSensorsPerLUN)
+        {
+            sensorIndex = lun1Sensor0;
+        }
+        else if (sensorIndex == (lun1Sensor0 | maxSensorsPerLUN))
+        {
+            // Skip assigning LUN 0x2 any sensors
+            sensorIndex = lun3Sensor0;
+        }
+        else if (sensorIndex == (lun3Sensor0 | maxSensorsPerLUN))
+        {
+            // this is an error, too many IPMI sensors
+            throw std::out_of_range("Maximum number of IPMI sensors exceeded.");
+        }
+        sensorNum = sensorIndex;
     }
     sensorNumMap = sensorNumMapPtr;
     sensorNumMapUpated = true;
@@ -214,13 +238,13 @@
     return sensorType;
 }
 
-inline static uint8_t getSensorNumberFromPath(const std::string& path)
+inline static uint16_t getSensorNumberFromPath(const std::string& path)
 {
     std::shared_ptr<SensorNumMap> sensorNumMapPtr;
     details::getSensorNumMap(sensorNumMapPtr);
     if (!sensorNumMapPtr)
     {
-        return 0xFF;
+        return invalidSensorNumber;
     }
 
     try
@@ -230,7 +254,7 @@
     catch (std::out_of_range& e)
     {
         phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
-        return 0xFF;
+        return invalidSensorNumber;
     }
 }
 
@@ -240,7 +264,7 @@
     return 0x1; // reading type = threshold
 }
 
-inline static std::string getPathFromSensorNumber(uint8_t sensorNum)
+inline static std::string getPathFromSensorNumber(uint16_t sensorNum)
 {
     std::shared_ptr<SensorNumMap> sensorNumMapPtr;
     details::getSensorNumMap(sensorNumMapPtr);
diff --git a/include/sensorcommands.hpp b/include/sensorcommands.hpp
index c0d7853..a7f9fb2 100644
--- a/include/sensorcommands.hpp
+++ b/include/sensorcommands.hpp
@@ -121,7 +121,8 @@
 namespace ipmi
 {
 extern SensorSubTree sensorTree;
-static ipmi_ret_t getSensorConnection(uint8_t sensnum, std::string& connection,
+static ipmi_ret_t getSensorConnection(ipmi::Context::ptr ctx, uint8_t sensnum,
+                                      std::string& connection,
                                       std::string& path)
 {
     if (sensorTree.empty() && !getSensorSubtree(sensorTree))
@@ -129,22 +130,22 @@
         return IPMI_CC_RESPONSE_ERROR;
     }
 
-    if (sensorTree.size() < (sensnum + 1))
+    if (ctx == nullptr)
+    {
+        return IPMI_CC_RESPONSE_ERROR;
+    }
+
+    path = getPathFromSensorNumber((ctx->lun << 8) | sensnum);
+    if (path.empty())
     {
         return IPMI_CC_INVALID_FIELD_REQUEST;
     }
 
-    uint8_t sensorIndex = sensnum;
     for (const auto& sensor : sensorTree)
     {
-        if (sensorIndex-- == 0)
+        if (path == sensor.first)
         {
-            if (!sensor.second.size())
-            {
-                return IPMI_CC_RESPONSE_ERROR;
-            }
             connection = sensor.second.begin()->first;
-            path = sensor.first;
             break;
         }
     }
