diff --git a/test/openpower-pels/additional_data_test.cpp b/test/openpower-pels/additional_data_test.cpp
index c93fdf2..45e1776 100644
--- a/test/openpower-pels/additional_data_test.cpp
+++ b/test/openpower-pels/additional_data_test.cpp
@@ -21,8 +21,8 @@
 
 TEST(AdditionalDataTest, GetKeywords)
 {
-    std::vector<std::string> data{"KEY1=VALUE1", "KEY2=VALUE2",
-                                  "KEY3=", "HELLOWORLD", "=VALUE5"};
+    std::map<std::string, std::string> data{
+        {"KEY1", "VALUE1"}, {"KEY2", "VALUE2"}, {"KEY3", ""}};
     AdditionalData ad{data};
 
     EXPECT_TRUE(ad.getValue("KEY1"));
diff --git a/test/openpower-pels/pel_manager_test.cpp b/test/openpower-pels/pel_manager_test.cpp
index e45fd55..18be5db 100644
--- a/test/openpower-pels/pel_manager_test.cpp
+++ b/test/openpower-pels/pel_manager_test.cpp
@@ -155,8 +155,8 @@
     pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
     pelFile.close();
 
-    std::string adItem = "RAWPEL=" + pelFilename.string();
-    std::vector<std::string> additionalData{adItem};
+    std::map<std::string, std::string> additionalData{
+        {"RAWPEL", pelFilename.string()}};
     std::vector<std::string> associations;
 
     manager.create("error message", 42, 0,
@@ -201,8 +201,8 @@
     pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
     pelFile.close();
 
-    std::string adItem = "RAWPEL=" + pelFilename.string();
-    std::vector<std::string> additionalData{adItem};
+    std::map<std::string, std::string> additionalData{
+        {"RAWPEL", pelFilename.string()}};
     std::vector<std::string> associations;
 
     manager.create("error message", 42, 0,
@@ -291,7 +291,7 @@
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
 
-    std::vector<std::string> additionalData{"FOO=BAR"};
+    std::map<std::string, std::string> additionalData{{"FOO", "BAR"}};
     std::vector<std::string> associations;
 
     // Create the event log to create the PEL from.
@@ -408,8 +408,8 @@
     pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
     pelFile.close();
 
-    std::string adItem = "RAWPEL=" + pelFilename.string();
-    std::vector<std::string> additionalData{adItem};
+    std::map<std::string, std::string> additionalData{
+        {"RAWPEL", pelFilename.string()}};
     std::vector<std::string> associations;
 
     manager.create("error message", 42, 0,
@@ -624,8 +624,7 @@
         std::move(journal)};
 
     {
-        std::string adItem = "ESEL=" + esel;
-        std::vector<std::string> additionalData{adItem};
+        std::map<std::string, std::string> additionalData{{"ESEL", esel}};
         std::vector<std::string> associations;
 
         manager.create("error message", 37, 0,
@@ -639,12 +638,12 @@
 
     // Now an invalid one
     {
-        std::string adItem = "ESEL=" + esel;
+        std::string adItem = esel;
 
         // Crop it
         adItem.resize(adItem.size() - 300);
 
-        std::vector<std::string> additionalData{adItem};
+        std::map<std::string, std::string> additionalData{{"ESEL", adItem}};
         std::vector<std::string> associations;
 
         manager.create("error message", 38, 0,
@@ -680,11 +679,11 @@
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
 
-    // Create 25 1000B (4096B on disk each, which is what is used for pruning)
-    // BMC non-informational PELs in the 100KB repository.  After the 24th one,
-    // the repo will be 96% full and a prune should be triggered to remove all
-    // but 7 to get under 30% full.  Then when the 25th is added there will be
-    // 8 left.
+    // Create 25 1000B (4096B on disk each, which is what is used for
+    // pruning) BMC non-informational PELs in the 100KB repository.  After
+    // the 24th one, the repo will be 96% full and a prune should be
+    // triggered to remove all but 7 to get under 30% full.  Then when the
+    // 25th is added there will be 8 left.
 
     auto dir = makeTempDir();
     for (int i = 1; i <= 25; i++)
@@ -696,8 +695,8 @@
         pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
         pelFile.close();
 
-        std::string adItem = "RAWPEL=" + pelFilename.string();
-        std::vector<std::string> additionalData{adItem};
+        std::map<std::string, std::string> additionalData{
+            {"RAWPEL", pelFilename.string()}};
         std::vector<std::string> associations;
 
         manager.create("error message", 42, 0,
@@ -759,8 +758,8 @@
     auto dir = makeTempDir();
     fs::path pelFilename = dir / "rawpel";
 
-    std::string adItem = "RAWPEL=" + pelFilename.string();
-    std::vector<std::string> additionalData{adItem};
+    std::map<std::string, std::string> additionalData{
+        {"RAWPEL", pelFilename.string()}};
     std::vector<std::string> associations;
 
     // Add 20 PELs, they will get incrementing IDs like
@@ -836,8 +835,8 @@
     auto dir = makeTempDir();
     fs::path pelFilename = dir / "rawpel";
 
-    std::string adItem = "RAWPEL=" + pelFilename.string();
-    std::vector<std::string> additionalData{adItem};
+    std::map<std::string, std::string> additionalData{
+        {"RAWPEL", pelFilename.string()}};
     std::vector<std::string> associations;
 
     // Add 200 PELs, they will get incrementing IDs like
@@ -922,8 +921,8 @@
         pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
         pelFile.close();
 
-        std::string adItem = "RAWPEL=" + pelFilename.string();
-        std::vector<std::string> additionalData{adItem};
+        std::map<std::string, std::string> additionalData{
+            {"RAWPEL", pelFilename.string()}};
         std::vector<std::string> associations;
 
         manager.create("error message", 42, 0,
@@ -991,7 +990,7 @@
         registryFile << registry;
         registryFile.close();
 
-        std::vector<std::string> additionalData;
+        std::map<std::string, std::string> additionalData;
         std::vector<std::string> associations;
 
         manager.create("xyz.openbmc_project.Error.Test", 42, 0,
@@ -1027,8 +1026,8 @@
         pelFile.write(reinterpret_cast<const char*>(data.data()), data.size());
         pelFile.close();
 
-        std::string adItem = "RAWPEL=" + pelFilename.string();
-        std::vector<std::string> additionalData{adItem};
+        std::map<std::string, std::string> additionalData{
+            {"RAWPEL", pelFilename.string()}};
         std::vector<std::string> associations;
 
         manager.create("error message", 42, 0,
@@ -1052,7 +1051,8 @@
     EXPECT_EQ(count, 1);
 }
 
-// Test termination bit set for pel with critical system termination severity
+// Test termination bit set for pel with critical system termination
+// severity
 TEST_F(ManagerTest, TestTerminateBitWithPELSevCriticalSysTerminate)
 {
     const auto registry = R"(
@@ -1097,7 +1097,7 @@
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
 
-    std::vector<std::string> additionalData{"FOO=BAR"};
+    std::map<std::string, std::string> additionalData{{"FOO", "BAR"}};
     std::vector<std::string> associations;
 
     // Create the event log to create the PEL from.
@@ -1200,7 +1200,7 @@
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
 
-    std::vector<std::string> additionalData;
+    std::map<std::string, std::string> additionalData;
     std::vector<std::string> associations;
 
     auto checkDeconfigured = [](bool deconfigured) {
@@ -1346,7 +1346,7 @@
         std::bind(std::mem_fn(&TestLogger::log), &logger, std::placeholders::_1,
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
-    std::vector<std::string> additionalData;
+    std::map<std::string, std::string> additionalData;
     std::vector<std::string> associations;
 
     // Check when there's no PEL with given id.
@@ -1363,8 +1363,8 @@
     {
         // Verify that the guard flag is false.
         EXPECT_FALSE(pel_unguarded.getGuardFlag());
-        // Check that `isDeleteProhibited` returns false when the guard flag is
-        // false.
+        // Check that `isDeleteProhibited` returns false when the guard flag
+        // is false.
         EXPECT_FALSE(manager.isDeleteProhibited(42));
     }
     manager.erase(42);
@@ -1449,7 +1449,7 @@
         std::bind(std::mem_fn(&TestLogger::log), &logger, std::placeholders::_1,
                   std::placeholders::_2, std::placeholders::_3),
         std::move(journal)};
-    std::vector<std::string> additionalData;
+    std::map<std::string, std::string> additionalData;
     std::vector<std::string> associations;
 
     int fd = createHWIsolatedCalloutFile();
@@ -1468,9 +1468,9 @@
     auto data = readPELFile(*pelFile);
     PEL pel(*data);
     EXPECT_TRUE(pel.valid());
-    // Test case where the guard flag is set to true and the hardware isolation
-    // guard is associated, which should result in `isDeleteProhibited`
-    // returning true as expected.
+    // Test case where the guard flag is set to true and the hardware
+    // isolation guard is associated, which should result in
+    // `isDeleteProhibited` returning true as expected.
     EXPECT_TRUE(pel.getGuardFlag());
     EXPECT_TRUE(manager.isDeleteProhibited(42));
     manager.erase(42);
diff --git a/test/openpower-pels/pel_test.cpp b/test/openpower-pels/pel_test.cpp
index fb88395..67ce75f 100644
--- a/test/openpower-pels/pel_test.cpp
+++ b/test/openpower-pels/pel_test.cpp
@@ -162,7 +162,7 @@
     regEntry.src.type = 0xBD;
     regEntry.src.reasonCode = 0x1234;
 
-    std::vector<std::string> data{"KEY1=VALUE1"};
+    std::map<std::string, std::string> data{{"KEY1", "VALUE1"}};
     AdditionalData ad{data};
     NiceMock<MockDataInterface> dataIface;
     NiceMock<MockJournal> journal;
@@ -237,10 +237,7 @@
     PelFFDC ffdc;
 
     // Over the 16KB max PEL size
-    std::string bigAD{"KEY1="};
-    bigAD += std::string(17000, 'G');
-
-    std::vector<std::string> data{bigAD};
+    std::map<std::string, std::string> data{{"KEY1", std::string(17000, 'G')}};
     AdditionalData ad{data};
     NiceMock<MockDataInterface> dataIface;
     NiceMock<MockJournal> journal;
@@ -362,8 +359,10 @@
 // Create a UserData section out of AdditionalData
 TEST_F(PELTest, MakeUDSectionTest)
 {
-    std::vector<std::string> ad{"KEY1=VALUE1", "KEY2=VALUE2", "KEY3=VALUE3",
-                                "ESEL=TEST"};
+    std::map<std::string, std::string> ad{{"KEY1", "VALUE1"},
+                                          {"KEY2", "VALUE2"},
+                                          {"KEY3", "VALUE3"},
+                                          {"ESEL", "TEST"}};
     AdditionalData additionalData{ad};
 
     auto ud = util::makeADUserDataSection(additionalData);
@@ -409,8 +408,7 @@
     EXPECT_CALL(dataIface, getSystemIMKeyword())
         .WillOnce(Return(std::vector<uint8_t>{0, 1, 0x55, 0xAA}));
 
-    std::string pid = "_PID=" + std::to_string(getpid());
-    std::vector<std::string> ad{pid};
+    std::map<std::string, std::string> ad{{"_PID", std::to_string(getpid())}};
     AdditionalData additionalData{ad};
 
     auto ud = util::makeSysInfoUserDataSection(additionalData, dataIface);
@@ -752,7 +750,7 @@
     regEntry.src.type = 0xBD;
     regEntry.src.reasonCode = 0x1234;
 
-    std::vector<std::string> additionalData{"KEY1=VALUE1"};
+    std::map<std::string, std::string> additionalData{{"KEY1", "VALUE1"}};
     AdditionalData ad{additionalData};
     NiceMock<MockDataInterface> dataIface;
     NiceMock<MockJournal> journal;
@@ -863,10 +861,10 @@
     file.close();
 
     {
-        std::vector<std::string> data{
-            "CALLOUT_ERRNO=5",
-            "CALLOUT_DEVICE_PATH=/sys/devices/platform/ahb/ahb:apb/"
-            "ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0072"};
+        std::map<std::string, std::string> data{
+            {"CALLOUT_ERRNO", "5"},
+            {"CALLOUT_DEVICE_PATH",
+             "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0072"}};
 
         AdditionalData ad{data};
 
@@ -917,10 +915,10 @@
 
     {
         // Device path not found (wrong i2c addr), so no callouts
-        std::vector<std::string> data{
-            "CALLOUT_ERRNO=5",
-            "CALLOUT_DEVICE_PATH=/sys/devices/platform/ahb/ahb:apb/"
-            "ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0099"};
+        std::map<std::string, std::string> data{
+            {"CALLOUT_ERRNO", "5"},
+            {"CALLOUT_DEVICE_PATH",
+             "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0099"}};
 
         AdditionalData ad{data};
 
@@ -1149,7 +1147,7 @@
     regEntry.src.type = 0xBD;
     regEntry.src.reasonCode = 0x1234;
 
-    std::vector<std::string> data;
+    std::map<std::string, std::string> data{};
     AdditionalData ad{data};
     NiceMock<MockDataInterface> dataIface;
     NiceMock<MockJournal> journal;
@@ -1231,7 +1229,8 @@
                 ad,        ffdc,
                 dataIface, journal};
 
-        // Two more sections than the 1 extra UD section in the first testcase
+        // Two more sections than the 1 extra UD section in the first
+        // testcase
         ASSERT_EQ(pel.privateHeader().sectionCount(), pelSectsWithOneUD + 2);
 
         const auto& optionalSections = pel.optionalSections();
@@ -1289,8 +1288,8 @@
         {
             auto userData = static_cast<UserData*>(optionalSection.get());
 
-            // convert the userdata section to string and then parse in to json
-            // format
+            // convert the userdata section to string and then parse in to
+            // json format
             std::string userDataString{userData->data().begin(),
                                        userData->data().end()};
             nlohmann::json userDataJson = nlohmann::json::parse(userDataString);
diff --git a/test/openpower-pels/registry_test.cpp b/test/openpower-pels/registry_test.cpp
index 322c25b..b6cf738 100644
--- a/test/openpower-pels/registry_test.cpp
+++ b/test/openpower-pels/registry_test.cpp
@@ -688,7 +688,7 @@
 
         {
             // Find callouts for PROC_NUM 0 on system3
-            std::vector<std::string> adData{"PROC_NUM=0"};
+            std::map<std::string, std::string> adData{{"PROC_NUM", "0"}};
             AdditionalData ad{adData};
             systemNames[0] = "system3";
 
@@ -723,7 +723,7 @@
         }
         {
             // Find callouts for PROC_NUM 1 that uses a default system entry.
-            std::vector<std::string> adData{"PROC_NUM=1"};
+            std::map<std::string, std::string> adData{{"PROC_NUM", "1"}};
             AdditionalData ad{adData};
             systemNames[0] = "system1";
 
@@ -737,7 +737,7 @@
         }
         {
             // There is no entry for PROC_NUM 2, so no callouts
-            std::vector<std::string> adData{"PROC_NUM=2"};
+            std::map<std::string, std::string> adData{{"PROC_NUM", "2"}};
             AdditionalData ad{adData};
 
             auto callouts = Registry::getCallouts(json, systemNames, ad);
@@ -783,7 +783,7 @@
 
         // There isn't an entry in the JSON for a PROC_NUM of 8
         // so it should choose the P1-C1 callout.
-        std::vector<std::string> adData{"PROC_NUM=8"};
+        std::map<std::string, std::string> adData{{"PROC_NUM", "8"}};
         AdditionalData ad{adData};
         systemNames.clear();
 
diff --git a/test/openpower-pels/src_test.cpp b/test/openpower-pels/src_test.cpp
index 069dacd..2c49a7b 100644
--- a/test/openpower-pels/src_test.cpp
+++ b/test/openpower-pels/src_test.cpp
@@ -198,8 +198,11 @@
         {9, {"TEST4", "DESCR4"}}};
 
     // Values for the SRC words pointed to above
-    std::vector<std::string> adData{"TEST1=0x12345678", "TEST2=12345678",
-                                    "TEST3=0XDEF", "TEST4=Z"};
+    std::map<std::string, std::string> adData{
+        {"TEST1", "0x12345678"},
+        {"TEST2", "12345678"},
+        {"TEST3", "0XDEF"},
+        {"TEST4", "Z"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -260,7 +263,7 @@
     entry.src.reasonCode = 0xABCD;
     entry.subsystem = 0x42;
 
-    std::vector<std::string> adData{};
+    std::map<std::string, std::string> adData{};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -301,8 +304,11 @@
     message::Registry registry{path};
     auto entry = registry.lookup("0xABCD", message::LookupType::reasonCode);
 
-    std::vector<std::string> adData{"COMPID=0x1", "FREQUENCY=0x4",
-                                    "DURATION=30", "ERRORCODE=0x01ABCDEF"};
+    std::map<std::string, std::string> adData{
+        {"COMPID", "0x1"},
+        {"FREQUENCY", "0x4"},
+        {"DURATION", "30"},
+        {"ERRORCODE", "0x01ABCDEF"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -324,7 +330,8 @@
     entry.src.reasonCode = 0xABCD;
     entry.subsystem = 0x42;
 
-    std::vector<std::string> adData{"CALLOUT_INVENTORY_PATH=motherboard"};
+    std::map<std::string, std::string> adData{
+        {"CALLOUT_INVENTORY_PATH", "motherboard"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -375,7 +382,8 @@
     entry.src.reasonCode = 0xABCD;
     entry.subsystem = 0x42;
 
-    std::vector<std::string> adData{"CALLOUT_INVENTORY_PATH=motherboard"};
+    std::map<std::string, std::string> adData{
+        {"CALLOUT_INVENTORY_PATH", "motherboard"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -415,7 +423,8 @@
     entry.src.reasonCode = 0xABCD;
     entry.subsystem = 0x42;
 
-    std::vector<std::string> adData{"CALLOUT_INVENTORY_PATH=motherboard"};
+    std::map<std::string, std::string> adData{
+        {"CALLOUT_INVENTORY_PATH", "motherboard"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -692,7 +701,8 @@
         // The location code for the first symbolic FRU callout will
         // come from this inventory path since UseInventoryLocCode is set.
         // In this case there will be no normal FRU callout for the motherboard.
-        std::vector<std::string> adData{"CALLOUT_INVENTORY_PATH=motherboard"};
+        std::map<std::string, std::string> adData{
+            {"CALLOUT_INVENTORY_PATH", "motherboard"}};
         AdditionalData ad{adData};
         NiceMock<MockDataInterface> dataIface;
         std::vector<std::string> names{"systemA"};
@@ -910,34 +920,36 @@
 
     {
         // Callouts based on the device path
-        std::vector<std::string> items{
-            "CALLOUT_ERRNO=5",
-            "CALLOUT_DEVICE_PATH=/sys/devices/platform/ahb/ahb:apb/"
-            "ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0072"};
+        std::map<std::string, std::string> items{
+            {"CALLOUT_ERRNO", "5"},
+            {"CALLOUT_DEVICE_PATH",
+             "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-14/14-0072"}};
 
         checkCallouts(items);
     }
 
     {
         // Callouts based on the I2C bus and address
-        std::vector<std::string> items{"CALLOUT_ERRNO=5", "CALLOUT_IIC_BUS=14",
-                                       "CALLOUT_IIC_ADDR=0x72"};
+        std::map<std::string, std::string> items{{"CALLOUT_ERRNO", "5"},
+                                                 {"CALLOUT_IIC_BUS", "14"},
+                                                 {"CALLOUT_IIC_ADDR", "0x72"}};
         checkCallouts(items);
     }
 
     {
         // Also based on I2C bus and address, but with bus = /dev/i2c-14
-        std::vector<std::string> items{"CALLOUT_ERRNO=5", "CALLOUT_IIC_BUS=14",
-                                       "CALLOUT_IIC_ADDR=0x72"};
+        std::map<std::string, std::string> items{{"CALLOUT_ERRNO", "5"},
+                                                 {"CALLOUT_IIC_BUS", "14"},
+                                                 {"CALLOUT_IIC_ADDR", "0x72"}};
         checkCallouts(items);
     }
 
     {
         // Callout not found
-        std::vector<std::string> items{
-            "CALLOUT_ERRNO=5",
-            "CALLOUT_DEVICE_PATH=/sys/devices/platform/ahb/ahb:apb/"
-            "ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-24/24-0012"};
+        std::map<std::string, std::string> items{
+            {"CALLOUT_ERRNO", "5"},
+            {"CALLOUT_DEVICE_PATH",
+             "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a340.i2c-bus/i2c-24/24-0012"}};
 
         AdditionalData ad{items};
         SRC src{entry, ad, dataIface};
@@ -951,8 +963,9 @@
 
     {
         // Callout not found
-        std::vector<std::string> items{"CALLOUT_ERRNO=5", "CALLOUT_IIC_BUS=22",
-                                       "CALLOUT_IIC_ADDR=0x99"};
+        std::map<std::string, std::string> items{{"CALLOUT_ERRNO", "5"},
+                                                 {"CALLOUT_IIC_BUS", "22"},
+                                                 {"CALLOUT_IIC_ADDR", "0x99"}};
         AdditionalData ad{items};
         SRC src{entry, ad, dataIface};
 
@@ -1290,8 +1303,8 @@
     entry.src.reasonCode = 0xABCD;
     entry.subsystem = 0x42;
 
-    std::vector<std::string> adData{"CALLOUT_INVENTORY_PATH=motherboard",
-                                    "CALLOUT_PRIORITY=M"};
+    std::map<std::string, std::string> adData{
+        {"CALLOUT_INVENTORY_PATH", "motherboard"}, {"CALLOUT_PRIORITY", "M"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
@@ -1325,7 +1338,7 @@
     entry.subsystem = 0x42;
 
     // Values for the SRC words pointed to above
-    std::vector<std::string> adData{"PEL_SUBSYSTEM=0x20"};
+    std::map<std::string, std::string> adData{{"PEL_SUBSYSTEM", "0x20"}};
     AdditionalData ad{adData};
     NiceMock<MockDataInterface> dataIface;
 
diff --git a/test/openpower-pels/user_header_test.cpp b/test/openpower-pels/user_header_test.cpp
index 233f08b..dfab636 100644
--- a/test/openpower-pels/user_header_test.cpp
+++ b/test/openpower-pels/user_header_test.cpp
@@ -247,7 +247,8 @@
     // Leave off severity
 
     MockDataInterface dataIface;
-    std::vector<std::string> adData{"SEVERITY_DETAIL=SYSTEM_TERM"};
+    std::map<std::string, std::string> adData{
+        {"SEVERITY_DETAIL", "SYSTEM_TERM"}};
     AdditionalData ad{adData};
 
     UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
@@ -324,7 +325,7 @@
         regEntry.eventScope = 2;
 
         MockDataInterface dataIface;
-        std::vector<std::string> adData{"PEL_SUBSYSTEM=0x25"};
+        std::map<std::string, std::string> adData{{"PEL_SUBSYSTEM", "0x25"}};
         AdditionalData ad{adData};
 
         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
@@ -341,7 +342,7 @@
         regEntry.eventScope = 2;
 
         MockDataInterface dataIface;
-        std::vector<std::string> adData{"PEL_SUBSYSTEM=0x99"};
+        std::map<std::string, std::string> adData{{"PEL_SUBSYSTEM", "0x99"}};
         AdditionalData ad{adData};
 
         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
@@ -358,7 +359,7 @@
         regEntry.eventScope = 2;
 
         MockDataInterface dataIface;
-        std::vector<std::string> adData;
+        std::map<std::string, std::string> adData;
         AdditionalData ad{adData};
 
         UserHeader uh(regEntry, phosphor::logging::Entry::Level::Critical, ad,
