diff --git a/include/event_service_store.hpp b/include/event_service_store.hpp
index 345b690..dcc99f1 100644
--- a/include/event_service_store.hpp
+++ b/include/event_service_store.hpp
@@ -1,6 +1,7 @@
 #pragma once
 #include "logging.hpp"
 
+#include <boost/beast/http/fields.hpp>
 #include <boost/container/flat_map.hpp>
 #include <nlohmann/json.hpp>
 
@@ -19,7 +20,7 @@
     std::vector<std::string> registryMsgIds;
     std::vector<std::string> registryPrefixes;
     std::vector<std::string> resourceTypes;
-    std::vector<nlohmann::json> httpHeaders; // key-value pair
+    boost::beast::http::fields httpHeaders;
     std::vector<std::string> metricReportDefinitions;
 
     static std::shared_ptr<UserSubscription>
@@ -146,13 +147,15 @@
                 const auto& obj = element.value();
                 for (const auto& val : obj.items())
                 {
-                    const auto value =
-                        val.value().get_ptr<const nlohmann::json::object_t*>();
+                    const std::string* value =
+                        val.value().get_ptr<const std::string*>();
                     if (value == nullptr)
                     {
+                        BMCWEB_LOG_ERROR << "Failed to parse value for key"
+                                         << val.key();
                         continue;
                     }
-                    subvalue->httpHeaders.emplace_back(*value);
+                    subvalue->httpHeaders.set(val.key(), *value);
                 }
             }
             else if (element.key() == "MetricReportDefinitions")
diff --git a/include/persistent_data.hpp b/include/persistent_data.hpp
index 4178d7d..d7230cb 100644
--- a/include/persistent_data.hpp
+++ b/include/persistent_data.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <app.hpp>
+#include <boost/beast/http/fields.hpp>
 #include <boost/container/flat_map.hpp>
 #include <boost/uuid/uuid.hpp>
 #include <boost/uuid/uuid_generators.hpp>
@@ -253,20 +254,31 @@
                     << "The subscription type is SSE, so skipping.";
                 continue;
             }
+            nlohmann::json::object_t headers;
+            for (const boost::beast::http::fields::value_type& header :
+                 subValue->httpHeaders)
+            {
+                // Note, these are technically copies because nlohmann doesn't
+                // support key lookup by std::string_view.  At least the
+                // following code can use move
+                // https://github.com/nlohmann/json/issues/1529
+                std::string name(header.name_string());
+                headers[std::move(name)] = header.value();
+            }
+
             subscriptions.push_back({
                 {"Id", subValue->id},
                 {"Context", subValue->customText},
                 {"DeliveryRetryPolicy", subValue->retryPolicy},
                 {"Destination", subValue->destinationUrl},
                 {"EventFormatType", subValue->eventFormatType},
-                {"HttpHeaders", subValue->httpHeaders},
+                {"HttpHeaders", std::move(headers)},
                 {"MessageIds", subValue->registryMsgIds},
                 {"Protocol", subValue->protocol},
                 {"RegistryPrefixes", subValue->registryPrefixes},
                 {"ResourceTypes", subValue->resourceTypes},
                 {"SubscriptionType", subValue->subscriptionType},
                 {"MetricReportDefinitions", subValue->metricReportDefinitions},
-
             });
         }
         persistentFile << data;
