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;
