diff --git a/include/Thresholds.hpp b/include/Thresholds.hpp
index 9b9799d..df55182 100644
--- a/include/Thresholds.hpp
+++ b/include/Thresholds.hpp
@@ -109,7 +109,7 @@
 bool parseThresholdsFromConfig(
     const SensorData& sensorData,
     std::vector<thresholds::Threshold>& thresholdVector,
-    const std::string* matchLabel = nullptr);
+    const std::string* matchLabel = nullptr, const int* sensorIndex = nullptr);
 
 bool parseThresholdsFromAttr(std::vector<thresholds::Threshold>& thresholds,
                              const std::string& inputPath,
diff --git a/src/HwmonTempMain.cpp b/src/HwmonTempMain.cpp
index 9b5e786..60a8fde 100644
--- a/src/HwmonTempMain.cpp
+++ b/src/HwmonTempMain.cpp
@@ -204,11 +204,15 @@
                         continue;
                     }
                 }
+
                 std::vector<thresholds::Threshold> sensorThresholds;
-                if (!parseThresholdsFromConfig(*sensorData, sensorThresholds))
+                int index = 1;
+
+                if (!parseThresholdsFromConfig(*sensorData, sensorThresholds,
+                                               nullptr, &index))
                 {
                     std::cerr << "error populating thresholds for "
-                              << sensorName << "\n";
+                              << sensorName << " index 1\n";
                 }
 
                 auto findPollRate = baseConfiguration->second.find("PollRate");
@@ -264,13 +268,28 @@
                         permitSet);
                     if (hwmonFile)
                     {
+                        // To look up thresholds for these additional sensors,
+                        // match on the Index property in the threshold data
+                        // where the index comes from the sysfs file we're on,
+                        // i.e. index = 2 for temp2_input.
+                        int index = i + 1;
+                        std::vector<thresholds::Threshold> thresholds;
+
+                        if (!parseThresholdsFromConfig(*sensorData, thresholds,
+                                                       nullptr, &index))
+                        {
+                            std::cerr << "error populating thresholds for "
+                                      << sensorName << " index " << index
+                                      << "\n";
+                        }
+
                         auto& sensor = sensors[sensorName];
                         sensor = nullptr;
                         sensor = std::make_shared<HwmonTempSensor>(
                             *hwmonFile, sensorType, objectServer,
                             dbusConnection, io, sensorName,
-                            std::vector<thresholds::Threshold>(), pollRate,
-                            *interfacePath, readState);
+                            std::move(thresholds), pollRate, *interfacePath,
+                            readState);
                         sensor->setupRead();
                     }
                 }
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index 5466ff5..a74ec4a 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -60,7 +60,7 @@
 bool parseThresholdsFromConfig(
     const SensorData& sensorData,
     std::vector<thresholds::Threshold>& thresholdVector,
-    const std::string* matchLabel)
+    const std::string* matchLabel, const int* sensorIndex)
 {
     for (const auto& item : sensorData)
     {
@@ -81,6 +81,25 @@
                 continue;
             }
         }
+
+        if (sensorIndex != nullptr)
+        {
+            auto indexFind = item.second.find("Index");
+
+            // If we're checking for index 1, a missing Index is OK.
+            if ((indexFind == item.second.end()) && (*sensorIndex != 1))
+            {
+                continue;
+            }
+
+            if ((indexFind != item.second.end()) &&
+                (std::visit(VariantToIntVisitor(), indexFind->second) !=
+                 *sensorIndex))
+            {
+                continue;
+            }
+        }
+
         auto directionFind = item.second.find("Direction");
         auto severityFind = item.second.find("Severity");
         auto valueFind = item.second.find("Value");
@@ -88,7 +107,8 @@
             severityFind == item.second.end() ||
             directionFind == item.second.end())
         {
-            std::cerr << "Malformed threshold in configuration\n";
+            std::cerr << "Malformed threshold on configuration interface "
+                      << item.first << "\n";
             return false;
         }
         Level level;
