diff --git a/configurations/A2UX8X4RISER.json b/configurations/A2UX8X4RISER.json
new file mode 100644
index 0000000..e960f87
--- /dev/null
+++ b/configurations/A2UX8X4RISER.json
@@ -0,0 +1,53 @@
+[
+    {
+        "Exposes": [
+            {
+                "Address": "0x4E",
+                "Bus": "$bus",
+                "Name": "Riser 3 Temp",
+                "Thresholds": [
+                    {
+                        "Direction": "greater than",
+                        "Name": "upper critical",
+                        "Severity": 1,
+                        "Value": 80
+                    },
+                    {
+                        "Direction": "greater than",
+                        "Name": "upper non critical",
+                        "Severity": 0,
+                        "Value": 75
+                    },
+                    {
+                        "Direction": "less than",
+                        "Name": "lower non critical",
+                        "Severity": 0,
+                        "Value": 5
+                    },
+                    {
+                        "Direction": "less than",
+                        "Name": "lower critical",
+                        "Severity": 1,
+                        "Value": 0
+                    }
+                ],
+                "Type": "TMP75"
+            },
+            {
+                "Address": "$address",
+                "Bus": "$bus",
+                "Name": "Riser 3 Fru",
+                "Type": "EEPROM"
+            }
+        ],
+        "Name": "2Ux8 Riser 3",
+        "Type": "Board",
+        "Probe": "xyz.openbmc_project.FruDevice({'BOARD_PRODUCT_NAME': 'A2UX8X4RISER'})",
+        "xyz.openbmc_project.Inventory.Decorator.Asset": {
+            "Manufacturer": "$BOARD_MANUFACTURER",
+            "Model": "$BOARD_PRODUCT_NAME",
+            "PartNumber": "$BOARD_PART_NUMBER",
+            "SerialNumber": "$BOARD_SERIAL_NUMBER"
+        }
+    }
+]
\ No newline at end of file
diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index 14b6fb6..94708b8 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -1080,51 +1080,48 @@
         }
         return;
     }
-    else if (keyPair.value().type() != nlohmann::json::value_t::string)
+
+    std::string* strPtr = keyPair.value().get_ptr<std::string*>();
+    if (strPtr == nullptr)
     {
         return;
     }
 
-    std::string value = keyPair.value();
-    if (value.find(TEMPLATE_CHAR) != std::string::npos)
+    boost::replace_all(*strPtr, "$index", std::to_string(foundDeviceIdx));
+
+    std::size_t templateIndex = 0;
+
+    for (auto& foundDevicePair : foundDevice)
     {
-        std::string templateValue = value;
-
-        templateValue.erase(0, 1); // remove template character
-
-        // special case index
-        if ("index" == templateValue)
+        std::string templateName = "$" + foundDevicePair.first;
+        if (boost::iequals(*strPtr, templateName))
         {
-            keyPair.value() = foundDeviceIdx;
+            std::visit([&](auto&& val) { keyPair.value() = val; },
+                       foundDevicePair.second);
+            // We probably just invalidated the pointer above, so set it to null
+            strPtr = nullptr;
+            break;
         }
-        else
-        {
-            bool found = false;
-            for (auto& foundDevicePair : foundDevice)
-            {
-                if (boost::iequals(foundDevicePair.first, templateValue))
-                {
-                    std::visit([&](auto&& val) { keyPair.value() = val; },
-                               foundDevicePair.second);
-                    found = true;
-                    break;
-                }
-            }
-            if (!found)
-            {
-                std::cerr << "could not find symbol " << templateValue << "\n";
-            }
-        }
+
+        std::string probeValue =
+            std::visit(VariantToStringVisitor(), foundDevicePair.second);
+        boost::replace_all(*strPtr, templateName, probeValue);
+    }
+
+    strPtr = keyPair.value().get_ptr<std::string*>();
+    if (strPtr == nullptr)
+    {
+        return;
     }
 
     // convert hex numbers to ints
-    else if (boost::starts_with(value, "0x"))
+    if (boost::starts_with(*strPtr, "0x"))
     {
         try
         {
             size_t pos = 0;
-            int64_t temp = std::stoul(value, &pos, 0);
-            if (pos == value.size())
+            int64_t temp = std::stoul(*strPtr, &pos, 0);
+            if (pos == strPtr->size())
             {
                 keyPair.value() = static_cast<uint64_t>(temp);
             }
