diff --git a/include/sensorcommands.hpp b/include/sensorcommands.hpp
index 691fb11..6135105 100644
--- a/include/sensorcommands.hpp
+++ b/include/sensorcommands.hpp
@@ -132,3 +132,35 @@
     ipmiCmdGetSensorType = 0x2F,
     ipmiCmdSetSensorReadingAndEventStatus = 0x30,
 };
+
+extern SensorSubTree sensorTree;
+static ipmi_ret_t getSensorConnection(uint8_t sensnum, std::string &connection,
+                                      std::string &path)
+{
+    if (sensorTree.empty() && !getSensorSubtree(sensorTree))
+    {
+        return IPMI_CC_RESPONSE_ERROR;
+    }
+
+    if (sensorTree.size() < (sensnum + 1))
+    {
+        return IPMI_CC_INVALID_FIELD_REQUEST;
+    }
+
+    uint8_t sensorIndex = sensnum;
+    for (const auto &sensor : sensorTree)
+    {
+        if (sensorIndex-- == 0)
+        {
+            if (!sensor.second.size())
+            {
+                return IPMI_CC_RESPONSE_ERROR;
+            }
+            connection = sensor.second.begin()->first;
+            path = sensor.first;
+            break;
+        }
+    }
+
+    return 0;
+}
diff --git a/src/sensorcommands.cpp b/src/sensorcommands.cpp
index a4fe05a..aea03ab 100644
--- a/src/sensorcommands.cpp
+++ b/src/sensorcommands.cpp
@@ -50,7 +50,7 @@
 static uint32_t sdrLastAdd = noTimestamp;
 static uint32_t sdrLastRemove = noTimestamp;
 
-static SensorSubTree sensorTree;
+SensorSubTree sensorTree;
 static boost::container::flat_map<std::string, ManagedObjectType> SensorCache;
 
 // Specify the comparison required to sort and find char* map objects
@@ -112,37 +112,6 @@
     }
 }
 
-static ipmi_ret_t getSensorConnection(uint8_t sensnum, std::string &connection,
-                                      std::string &path)
-{
-    if (sensorTree.empty() && !getSensorSubtree(sensorTree))
-    {
-        return IPMI_CC_RESPONSE_ERROR;
-    }
-
-    if (sensorTree.size() < (sensnum + 1))
-    {
-        return IPMI_CC_INVALID_FIELD_REQUEST;
-    }
-
-    uint8_t sensorIndex = sensnum;
-    for (const auto &sensor : sensorTree)
-    {
-        if (sensorIndex-- == 0)
-        {
-            if (!sensor.second.size())
-            {
-                return IPMI_CC_RESPONSE_ERROR;
-            }
-            connection = sensor.second.begin()->first;
-            path = sensor.first;
-            break;
-        }
-    }
-
-    return 0;
-}
-
 static bool getSensorMap(std::string sensorConnection, std::string sensorPath,
                          SensorMap &sensorMap)
 {
