diff --git a/redfish-core/include/registries.hpp b/redfish-core/include/registries.hpp
index d379147..f7a8df3 100644
--- a/redfish-core/include/registries.hpp
+++ b/redfish-core/include/registries.hpp
@@ -11,6 +11,9 @@
 #include <charconv>
 #include <cstddef>
 #include <format>
+#include <functional>
+#include <map>
+#include <optional>
 #include <span>
 #include <string>
 #include <string_view>
@@ -43,6 +46,30 @@
     const char* resolution;
 };
 using MessageEntry = std::pair<const char*, const Message>;
+using MessageEntries = std::span<const MessageEntry>;
+
+struct RegistryEntry
+{
+    const Header& header;
+    const char* url;
+    MessageEntries entries;
+};
+using RegistryEntryRef = std::reference_wrapper<RegistryEntry>;
+
+auto allRegistries() -> std::map<std::string, RegistryEntry>&;
+
+auto getRegistryFromPrefix(const std::string& registryName)
+    -> std::optional<RegistryEntryRef>;
+
+auto getRegistryMessagesFromPrefix(const std::string& registryName)
+    -> MessageEntries;
+
+template <typename T>
+void registerRegistry()
+{
+    allRegistries().emplace(T::header.registryPrefix,
+                            RegistryEntry{T::header, T::url, T::registry});
+}
 
 inline std::string fillMessageArgs(
     const std::span<const std::string_view> messageArgs, std::string_view msg)
diff --git a/redfish-core/include/registries/base_message_registry.hpp b/redfish-core/include/registries/base_message_registry.hpp
index c35a7a5..e82c728 100644
--- a/redfish-core/include/registries/base_message_registry.hpp
+++ b/redfish-core/include/registries/base_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::base
+namespace redfish::registries
 {
-const Header header = {
+struct Base
+{
+static constexpr Header header = {
     "Copyright 2014-2024 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Base",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Base.1.19.0.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "AccessDenied",
@@ -1479,4 +1482,9 @@
     undeterminedFault = 112,
     unrecognizedRequestBody = 113,
 };
-} // namespace redfish::registries::base
+}; // struct base
+
+[[gnu::constructor]] inline void registerBase()
+{ registerRegistry<Base>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/composition_message_registry.hpp b/redfish-core/include/registries/composition_message_registry.hpp
index 26e465f..3152350 100644
--- a/redfish-core/include/registries/composition_message_registry.hpp
+++ b/redfish-core/include/registries/composition_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::composition
+namespace redfish::registries
 {
-const Header header = {
+struct Composition
+{
+static constexpr Header header = {
     "Copyright 2019-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Composition",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Composition.1.1.2.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "ConstrainedResourceAlreadyReserved",
@@ -209,4 +212,9 @@
     specifiedResourceAlreadyReserved = 11,
     unableToProcessStanzaRequest = 12,
 };
-} // namespace redfish::registries::composition
+}; // struct composition
+
+[[gnu::constructor]] inline void registerComposition()
+{ registerRegistry<Composition>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/environmental_message_registry.hpp b/redfish-core/include/registries/environmental_message_registry.hpp
index dc3d66d..5f267cf 100644
--- a/redfish-core/include/registries/environmental_message_registry.hpp
+++ b/redfish-core/include/registries/environmental_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::environmental
+namespace redfish::registries
 {
-const Header header = {
+struct Environmental
+{
+static constexpr Header header = {
     "Copyright 2024 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Environmental",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Environmental.1.1.0.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "FanFailed",
@@ -1280,4 +1283,9 @@
     temperatureNormal = 85,
     temperatureWarning = 86,
 };
-} // namespace redfish::registries::environmental
+}; // struct environmental
+
+[[gnu::constructor]] inline void registerEnvironmental()
+{ registerRegistry<Environmental>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/ethernet_fabric_message_registry.hpp b/redfish-core/include/registries/ethernet_fabric_message_registry.hpp
index a19b114..04e1fb9 100644
--- a/redfish-core/include/registries/ethernet_fabric_message_registry.hpp
+++ b/redfish-core/include/registries/ethernet_fabric_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::ethernet_fabric
+namespace redfish::registries
 {
-const Header header = {
+struct EthernetFabric
+{
+static constexpr Header header = {
     "Copyright 2020-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "EthernetFabric",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/EthernetFabric.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "LLDPInterfaceDisabled",
@@ -154,4 +157,9 @@
     mLAGPeerUp = 6,
     routingFailureThresholdExceeded = 7,
 };
-} // namespace redfish::registries::ethernet_fabric
+}; // struct ethernet_fabric
+
+[[gnu::constructor]] inline void registerEthernetFabric()
+{ registerRegistry<EthernetFabric>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/fabric_message_registry.hpp b/redfish-core/include/registries/fabric_message_registry.hpp
index 3b3c68b..295dbf0 100644
--- a/redfish-core/include/registries/fabric_message_registry.hpp
+++ b/redfish-core/include/registries/fabric_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::fabric
+namespace redfish::registries
 {
-const Header header = {
+struct Fabric
+{
+static constexpr Header header = {
     "Copyright 2014-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Fabric",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Fabric.1.0.2.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "AddressPoolCreated",
@@ -634,4 +637,9 @@
     zoneModified = 40,
     zoneRemoved = 41,
 };
-} // namespace redfish::registries::fabric
+}; // struct fabric
+
+[[gnu::constructor]] inline void registerFabric()
+{ registerRegistry<Fabric>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/heartbeat_event_message_registry.hpp b/redfish-core/include/registries/heartbeat_event_message_registry.hpp
index d669556..b98876e 100644
--- a/redfish-core/include/registries/heartbeat_event_message_registry.hpp
+++ b/redfish-core/include/registries/heartbeat_event_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::heartbeat_event
+namespace redfish::registries
 {
-const Header header = {
+struct HeartbeatEvent
+{
+static constexpr Header header = {
     "Copyright 2021-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "HeartbeatEvent",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/HeartbeatEvent.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "RedfishServiceFunctional",
@@ -53,4 +56,9 @@
 {
     redfishServiceFunctional = 0,
 };
-} // namespace redfish::registries::heartbeat_event
+}; // struct heartbeat_event
+
+[[gnu::constructor]] inline void registerHeartbeatEvent()
+{ registerRegistry<HeartbeatEvent>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/job_event_message_registry.hpp b/redfish-core/include/registries/job_event_message_registry.hpp
index 68eb7f3..6096398 100644
--- a/redfish-core/include/registries/job_event_message_registry.hpp
+++ b/redfish-core/include/registries/job_event_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::job_event
+namespace redfish::registries
 {
-const Header header = {
+struct JobEvent
+{
+static constexpr Header header = {
     "Copyright 2014-2023 DMTF in cooperation with the Storage Networking Industry Association (SNIA). All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "JobEvent",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/JobEvent.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "JobCancelled",
@@ -147,4 +150,9 @@
     jobStarted = 6,
     jobSuspended = 7,
 };
-} // namespace redfish::registries::job_event
+}; // struct job_event
+
+[[gnu::constructor]] inline void registerJobEvent()
+{ registerRegistry<JobEvent>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/license_message_registry.hpp b/redfish-core/include/registries/license_message_registry.hpp
index 28a2428..30bf1a2 100644
--- a/redfish-core/include/registries/license_message_registry.hpp
+++ b/redfish-core/include/registries/license_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::license
+namespace redfish::registries
 {
-const Header header = {
+struct License
+{
+static constexpr Header header = {
     "Copyright 2014-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "License",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/License.1.0.3.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "DaysBeforeExpiration",
@@ -142,4 +145,9 @@
     notApplicableToTarget = 6,
     targetsRequired = 7,
 };
-} // namespace redfish::registries::license
+}; // struct license
+
+[[gnu::constructor]] inline void registerLicense()
+{ registerRegistry<License>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/log_service_message_registry.hpp b/redfish-core/include/registries/log_service_message_registry.hpp
index 700692b..6294f98 100644
--- a/redfish-core/include/registries/log_service_message_registry.hpp
+++ b/redfish-core/include/registries/log_service_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::log_service
+namespace redfish::registries
 {
-const Header header = {
+struct LogService
+{
+static constexpr Header header = {
     "Copyright 2020-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "LogService",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/LogService.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "DiagnosticDataCollected",
@@ -55,4 +58,9 @@
 {
     diagnosticDataCollected = 0,
 };
-} // namespace redfish::registries::log_service
+}; // struct log_service
+
+[[gnu::constructor]] inline void registerLogService()
+{ registerRegistry<LogService>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/network_device_message_registry.hpp b/redfish-core/include/registries/network_device_message_registry.hpp
index 996a47f..933596e 100644
--- a/redfish-core/include/registries/network_device_message_registry.hpp
+++ b/redfish-core/include/registries/network_device_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::network_device
+namespace redfish::registries
 {
-const Header header = {
+struct NetworkDevice
+{
+static constexpr Header header = {
     "Copyright 2019-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "NetworkDevice",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/NetworkDevice.1.0.3.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "CableInserted",
@@ -132,4 +135,9 @@
     degradedConnectionEstablished = 4,
     linkFlapDetected = 5,
 };
-} // namespace redfish::registries::network_device
+}; // struct network_device
+
+[[gnu::constructor]] inline void registerNetworkDevice()
+{ registerRegistry<NetworkDevice>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/openbmc_message_registry.hpp b/redfish-core/include/registries/openbmc_message_registry.hpp
index 16b5c24..0f22153 100644
--- a/redfish-core/include/registries/openbmc_message_registry.hpp
+++ b/redfish-core/include/registries/openbmc_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::openbmc
+namespace redfish::registries
 {
-const Header header = {
+struct Openbmc
+{
+static constexpr Header header = {
     "Copyright 2022 OpenBMC. All rights reserved.",
     "#MessageRegistry.v1_4_0.MessageRegistry",
     0,
@@ -31,10 +33,11 @@
     "OpenBMC",
     "OpenBMC",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://raw.githubusercontent.com/openbmc/bmcweb/refs/heads/master/redfish-core/include/registries/openbmc.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "ADDDCCorrectable",
@@ -2549,4 +2552,9 @@
     systemPowerOnFailed = 190,
     voltageRegulatorOverheated = 191,
 };
-} // namespace redfish::registries::openbmc
+}; // struct openbmc
+
+[[gnu::constructor]] inline void registerOpenbmc()
+{ registerRegistry<Openbmc>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/platform_message_registry.hpp b/redfish-core/include/registries/platform_message_registry.hpp
index e092879..cfae35d 100644
--- a/redfish-core/include/registries/platform_message_registry.hpp
+++ b/redfish-core/include/registries/platform_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::platform
+namespace redfish::registries
 {
-const Header header = {
+struct Platform
+{
+static constexpr Header header = {
     "Copyright 2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Platform",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Platform.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "OperatingSystemCrash",
@@ -88,4 +91,9 @@
     platformErrorAtLocation = 2,
     unhandledExceptionDetectedAfterReset = 3,
 };
-} // namespace redfish::registries::platform
+}; // struct platform
+
+[[gnu::constructor]] inline void registerPlatform()
+{ registerRegistry<Platform>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/power_message_registry.hpp b/redfish-core/include/registries/power_message_registry.hpp
index cb5c966..13fb5a7 100644
--- a/redfish-core/include/registries/power_message_registry.hpp
+++ b/redfish-core/include/registries/power_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::power
+namespace redfish::registries
 {
-const Header header = {
+struct Power
+{
+static constexpr Header header = {
     "Copyright 2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Power",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Power.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "BreakerFault",
@@ -1053,4 +1056,9 @@
     voltageNormal = 69,
     voltageWarning = 70,
 };
-} // namespace redfish::registries::power
+}; // struct power
+
+[[gnu::constructor]] inline void registerPower()
+{ registerRegistry<Power>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/resource_event_message_registry.hpp b/redfish-core/include/registries/resource_event_message_registry.hpp
index 7c84971..48b8a1c 100644
--- a/redfish-core/include/registries/resource_event_message_registry.hpp
+++ b/redfish-core/include/registries/resource_event_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::resource_event
+namespace redfish::registries
 {
-const Header header = {
+struct ResourceEvent
+{
+static constexpr Header header = {
     "Copyright 2014-2023 DMTF in cooperation with the Storage Networking Industry Association (SNIA). All rights reserved.",
     "#MessageRegistry.v1_6_0.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "ResourceEvent",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/ResourceEvent.1.3.0.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "AggregationSourceDiscovered",
@@ -395,4 +398,9 @@
     testMessage = 25,
     uRIForResourceChanged = 26,
 };
-} // namespace redfish::registries::resource_event
+}; // struct resource_event
+
+[[gnu::constructor]] inline void registerResourceEvent()
+{ registerRegistry<ResourceEvent>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/sensor_event_message_registry.hpp b/redfish-core/include/registries/sensor_event_message_registry.hpp
index 3716398..fe6e301 100644
--- a/redfish-core/include/registries/sensor_event_message_registry.hpp
+++ b/redfish-core/include/registries/sensor_event_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::sensor_event
+namespace redfish::registries
 {
-const Header header = {
+struct SensorEvent
+{
+static constexpr Header header = {
     "Copyright 2022-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "SensorEvent",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/SensorEvent.1.0.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "InvalidSensorReading",
@@ -301,4 +304,9 @@
     sensorReadingNormalRange = 15,
     sensorRestored = 16,
 };
-} // namespace redfish::registries::sensor_event
+}; // struct sensor_event
+
+[[gnu::constructor]] inline void registerSensorEvent()
+{ registerRegistry<SensorEvent>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/storage_device_message_registry.hpp b/redfish-core/include/registries/storage_device_message_registry.hpp
index 5e48038..c384470 100644
--- a/redfish-core/include/registries/storage_device_message_registry.hpp
+++ b/redfish-core/include/registries/storage_device_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::storage_device
+namespace redfish::registries
 {
-const Header header = {
+struct StorageDevice
+{
+static constexpr Header header = {
     "Copyright 2020-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "StorageDevice",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/StorageDevice.1.2.1.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "BatteryCharging",
@@ -493,4 +496,9 @@
     writeCacheProtected = 32,
     writeCacheTemporarilyDegraded = 33,
 };
-} // namespace redfish::registries::storage_device
+}; // struct storage_device
+
+[[gnu::constructor]] inline void registerStorageDevice()
+{ registerRegistry<StorageDevice>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/task_event_message_registry.hpp b/redfish-core/include/registries/task_event_message_registry.hpp
index 08e9014..137f181 100644
--- a/redfish-core/include/registries/task_event_message_registry.hpp
+++ b/redfish-core/include/registries/task_event_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::task_event
+namespace redfish::registries
 {
-const Header header = {
+struct TaskEvent
+{
+static constexpr Header header = {
     "Copyright 2014-2020 DMTF in cooperation with the Storage Networking Industry Association (SNIA). All rights reserved.",
     "#MessageRegistry.v1_4_1.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "TaskEvent",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/TaskEvent.1.0.3.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "TaskAborted",
@@ -160,4 +163,9 @@
     taskResumed = 7,
     taskStarted = 8,
 };
-} // namespace redfish::registries::task_event
+}; // struct task_event
+
+[[gnu::constructor]] inline void registerTaskEvent()
+{ registerRegistry<TaskEvent>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/telemetry_message_registry.hpp b/redfish-core/include/registries/telemetry_message_registry.hpp
index ed59bf6..abb2874 100644
--- a/redfish-core/include/registries/telemetry_message_registry.hpp
+++ b/redfish-core/include/registries/telemetry_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::telemetry
+namespace redfish::registries
 {
-const Header header = {
+struct Telemetry
+{
+static constexpr Header header = {
     "Copyright 2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Telemetry",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Telemetry.1.0.0.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "TriggerDiscreteConditionMet",
@@ -168,4 +171,9 @@
     triggerNumericBelowUpperCritical = 6,
     triggerNumericReadingNormal = 7,
 };
-} // namespace redfish::registries::telemetry
+}; // struct telemetry
+
+[[gnu::constructor]] inline void registerTelemetry()
+{ registerRegistry<Telemetry>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries/update_message_registry.hpp b/redfish-core/include/registries/update_message_registry.hpp
index 0c5d1f6..578b77a 100644
--- a/redfish-core/include/registries/update_message_registry.hpp
+++ b/redfish-core/include/registries/update_message_registry.hpp
@@ -17,9 +17,11 @@
 
 // clang-format off
 
-namespace redfish::registries::update
+namespace redfish::registries
 {
-const Header header = {
+struct Update
+{
+static constexpr Header header = {
     "Copyright 2014-2023 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
@@ -31,10 +33,11 @@
     "Update",
     "DMTF",
 };
-constexpr const char* url =
+
+static constexpr const char* url =
     "https://redfish.dmtf.org/registries/Update.1.0.2.json";
 
-constexpr std::array registry =
+static constexpr std::array registry =
 {
     MessageEntry{
         "ActivateFailed",
@@ -245,4 +248,9 @@
     verificationFailed = 13,
     verifyingAtComponent = 14,
 };
-} // namespace redfish::registries::update
+}; // struct update
+
+[[gnu::constructor]] inline void registerUpdate()
+{ registerRegistry<Update>(); }
+
+} // namespace redfish::registries
diff --git a/redfish-core/include/registries_selector.hpp b/redfish-core/include/registries_selector.hpp
index 01160b7..6440ca5 100644
--- a/redfish-core/include/registries_selector.hpp
+++ b/redfish-core/include/registries_selector.hpp
@@ -1,83 +1,17 @@
 // SPDX-License-Identifier: Apache-2.0
 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
 #pragma once
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/base_message_registry.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/heartbeat_event_message_registry.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/openbmc_message_registry.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/resource_event_message_registry.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/task_event_message_registry.hpp"
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries/telemetry_message_registry.hpp"
-
-#include <optional>
-#include <span>
-#include <string_view>
-
-namespace redfish::registries
-{
-struct HeaderAndUrl
-{
-    const Header& header;
-    const char* url;
-};
-
-inline std::optional<registries::HeaderAndUrl>
-    getRegistryHeaderAndUrlFromPrefix(std::string_view registryName)
-{
-    if (base::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{base::header, base::url};
-    }
-    if (heartbeat_event::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{heartbeat_event::header, heartbeat_event::url};
-    }
-    if (openbmc::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{openbmc::header, openbmc::url};
-    }
-    if (resource_event::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{resource_event::header, resource_event::url};
-    }
-    if (task_event::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{task_event::header, task_event::url};
-    }
-    if (telemetry::header.registryPrefix == registryName)
-    {
-        return HeaderAndUrl{telemetry::header, telemetry::url};
-    }
-    return std::nullopt;
-}
-
-inline std::span<const MessageEntry> getRegistryFromPrefix(
-    std::string_view registryName)
-{
-    if (base::header.registryPrefix == registryName)
-    {
-        return {base::registry};
-    }
-    if (heartbeat_event::header.registryPrefix == registryName)
-    {
-        return {heartbeat_event::registry};
-    }
-    if (openbmc::header.registryPrefix == registryName)
-    {
-        return {openbmc::registry};
-    }
-    if (resource_event::header.registryPrefix == registryName)
-    {
-        return {resource_event::registry};
-    }
-    if (task_event::header.registryPrefix == registryName)
-    {
-        return {task_event::registry};
-    }
-    if (telemetry::header.registryPrefix == registryName)
-    {
-        return {telemetry::registry};
-    }
-    return {openbmc::registry};
-}
-} // namespace redfish::registries
diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index 66f49ab..a9093b3 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -16,7 +16,6 @@
 #include "query.hpp"
 #include "registries.hpp"
 #include "registries/privilege_registry.hpp"
-#include "registries_selector.hpp"
 #include "snmp_trap_event_clients.hpp"
 #include "subscription.hpp"
 #include "utils/json_utils.hpp"
@@ -41,7 +40,6 @@
 #include <memory>
 #include <optional>
 #include <ranges>
-#include <span>
 #include <string>
 #include <utility>
 #include <vector>
@@ -652,9 +650,9 @@
                     // Check for Message ID in each of the selected Registry
                     for (const std::string& it : registryPrefix)
                     {
-                        const std::span<const redfish::registries::MessageEntry>
-                            registry =
-                                redfish::registries::getRegistryFromPrefix(it);
+                        const registries::MessageEntries registry =
+                            redfish::registries::getRegistryMessagesFromPrefix(
+                                it);
 
                         if (std::ranges::any_of(
                                 registry,
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp
index 6bbdb48..325fe6b 100644
--- a/redfish-core/lib/message_registries.hpp
+++ b/redfish-core/lib/message_registries.hpp
@@ -10,17 +10,15 @@
 #include "query.hpp"
 #include "registries.hpp"
 #include "registries/privilege_registry.hpp"
-#include "registries_selector.hpp"
 
 #include <boost/beast/http/verb.hpp>
 #include <boost/url/format.hpp>
 
-#include <array>
 #include <format>
 #include <functional>
 #include <memory>
 #include <optional>
-#include <span>
+#include <ranges>
 #include <utility>
 
 namespace redfish
@@ -46,11 +44,7 @@
 
     nlohmann::json& members = asyncResp->res.jsonValue["Members"];
 
-    static constexpr const auto registryFiles = std::to_array(
-        {"Base", "TaskEvent", "ResourceEvent", "OpenBMC", "Telemetry",
-         "HeartbeatEvent"});
-
-    for (const char* memberName : registryFiles)
+    for (const auto& memberName : std::views::keys(registries::allRegistries()))
     {
         nlohmann::json::object_t member;
         member["@odata.id"] =
@@ -81,10 +75,10 @@
         return;
     }
     std::string dmtf = "DMTF ";
-    std::optional<registries::HeaderAndUrl> headerAndUrl =
-        registries::getRegistryHeaderAndUrlFromPrefix(registry);
+    std::optional<registries::RegistryEntryRef> registryEntry =
+        registries::getRegistryFromPrefix(registry);
 
-    if (!headerAndUrl)
+    if (!registryEntry)
     {
         messages::resourceNotFound(asyncResp->res, "MessageRegistryFile",
                                    registry);
@@ -94,8 +88,8 @@
     {
         dmtf.clear();
     }
-    const registries::Header& header = headerAndUrl->header;
-    const char* url = headerAndUrl->url;
+    const registries::Header& header = registryEntry->get().header;
+    const char* url = registryEntry->get().url;
 
     asyncResp->res.jsonValue["@odata.id"] =
         boost::urls::format("/redfish/v1/Registries/{}", registry);
@@ -145,16 +139,16 @@
         return;
     }
 
-    std::optional<registries::HeaderAndUrl> headerAndUrl =
-        registries::getRegistryHeaderAndUrlFromPrefix(registry);
-    if (!headerAndUrl)
+    std::optional<registries::RegistryEntryRef> registryEntry =
+        registries::getRegistryFromPrefix(registry);
+    if (!registryEntry)
     {
         messages::resourceNotFound(asyncResp->res, "MessageRegistryFile",
                                    registry);
         return;
     }
 
-    const registries::Header& header = headerAndUrl->header;
+    const registries::Header& header = registryEntry->get().header;
     if (registry != registryMatch)
     {
         messages::resourceNotFound(asyncResp->res, header.type, registryMatch);
@@ -178,8 +172,8 @@
     nlohmann::json& messageObj = asyncResp->res.jsonValue["Messages"];
 
     // Go through the Message Registry and populate each Message
-    const std::span<const registries::MessageEntry> registryEntries =
-        registries::getRegistryFromPrefix(registry);
+    const registries::MessageEntries registryEntries =
+        registries::getRegistryMessagesFromPrefix(registry);
 
     for (const registries::MessageEntry& message : registryEntries)
     {
diff --git a/redfish-core/src/error_messages.cpp b/redfish-core/src/error_messages.cpp
index 9637bd4..1d6a544 100644
--- a/redfish-core/src/error_messages.cpp
+++ b/redfish-core/src/error_messages.cpp
@@ -40,16 +40,16 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::base::Index name,
+static nlohmann::json getLog(redfish::registries::Base::Index name,
                              std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
-    if (index >= redfish::registries::base::registry.size())
+    if (index >= redfish::registries::Base::registry.size())
     {
         return {};
     }
-    return getLogFromRegistry(redfish::registries::base::header,
-                              redfish::registries::base::registry, index, args);
+    return getLogFromRegistry(redfish::registries::Base::header,
+                              redfish::registries::Base::registry, index, args);
 }
 
 /**
@@ -61,7 +61,7 @@
  */
 nlohmann::json success()
 {
-    return getLog(redfish::registries::base::Index::success, {});
+    return getLog(redfish::registries::Base::Index::success, {});
 }
 
 void success(crow::Response& res)
@@ -78,7 +78,7 @@
  */
 nlohmann::json generalError()
 {
-    return getLog(redfish::registries::base::Index::generalError, {});
+    return getLog(redfish::registries::Base::Index::generalError, {});
 }
 
 void generalError(crow::Response& res)
@@ -96,7 +96,7 @@
  */
 nlohmann::json created()
 {
-    return getLog(redfish::registries::base::Index::created, {});
+    return getLog(redfish::registries::Base::Index::created, {});
 }
 
 void created(crow::Response& res)
@@ -114,7 +114,7 @@
  */
 nlohmann::json noOperation()
 {
-    return getLog(redfish::registries::base::Index::noOperation, {});
+    return getLog(redfish::registries::Base::Index::noOperation, {});
 }
 
 void noOperation(crow::Response& res)
@@ -132,7 +132,7 @@
  */
 nlohmann::json propertyDuplicate(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyDuplicate,
+    return getLog(redfish::registries::Base::Index::propertyDuplicate,
                   std::to_array({arg1}));
 }
 
@@ -151,7 +151,7 @@
  */
 nlohmann::json propertyUnknown(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyUnknown,
+    return getLog(redfish::registries::Base::Index::propertyUnknown,
                   std::to_array({arg1}));
 }
 
@@ -173,7 +173,7 @@
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueTypeError,
+    return getLog(redfish::registries::Base::Index::propertyValueTypeError,
                   std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -196,7 +196,7 @@
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueFormatError,
+    return getLog(redfish::registries::Base::Index::propertyValueFormatError,
                   std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -219,7 +219,7 @@
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueNotInList,
+    return getLog(redfish::registries::Base::Index::propertyValueNotInList,
                   std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -242,7 +242,7 @@
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueOutOfRange,
+    return getLog(redfish::registries::Base::Index::propertyValueOutOfRange,
                   std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -262,7 +262,7 @@
  */
 nlohmann::json propertyValueError(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyValueError,
+    return getLog(redfish::registries::Base::Index::propertyValueError,
                   std::to_array({arg1}));
 }
 
@@ -281,7 +281,7 @@
  */
 nlohmann::json propertyNotWritable(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyNotWritable,
+    return getLog(redfish::registries::Base::Index::propertyNotWritable,
                   std::to_array({arg1}));
 }
 
@@ -300,7 +300,7 @@
  */
 nlohmann::json propertyNotUpdated(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyNotUpdated,
+    return getLog(redfish::registries::Base::Index::propertyNotUpdated,
                   std::to_array({arg1}));
 }
 
@@ -319,7 +319,7 @@
  */
 nlohmann::json propertyMissing(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyMissing,
+    return getLog(redfish::registries::Base::Index::propertyMissing,
                   std::to_array({arg1}));
 }
 
@@ -338,7 +338,7 @@
  */
 nlohmann::json malformedJSON()
 {
-    return getLog(redfish::registries::base::Index::malformedJSON, {});
+    return getLog(redfish::registries::Base::Index::malformedJSON, {});
 }
 
 void malformedJSON(crow::Response& res)
@@ -356,7 +356,7 @@
  */
 nlohmann::json invalidJSON(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::invalidJSON,
+    return getLog(redfish::registries::Base::Index::invalidJSON,
                   std::to_array({arg1}));
 }
 
@@ -375,7 +375,7 @@
  */
 nlohmann::json emptyJSON()
 {
-    return getLog(redfish::registries::base::Index::emptyJSON, {});
+    return getLog(redfish::registries::Base::Index::emptyJSON, {});
 }
 
 void emptyJSON(crow::Response& res)
@@ -393,7 +393,7 @@
  */
 nlohmann::json actionNotSupported(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::actionNotSupported,
+    return getLog(redfish::registries::Base::Index::actionNotSupported,
                   std::to_array({arg1}));
 }
 
@@ -413,7 +413,7 @@
 nlohmann::json actionParameterMissing(std::string_view arg1,
                                       std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::actionParameterMissing,
+    return getLog(redfish::registries::Base::Index::actionParameterMissing,
                   std::to_array({arg1, arg2}));
 }
 
@@ -434,7 +434,7 @@
 nlohmann::json actionParameterDuplicate(std::string_view arg1,
                                         std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::actionParameterDuplicate,
+    return getLog(redfish::registries::Base::Index::actionParameterDuplicate,
                   std::to_array({arg1, arg2}));
 }
 
@@ -455,7 +455,7 @@
 nlohmann::json actionParameterUnknown(std::string_view arg1,
                                       std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::actionParameterUnknown,
+    return getLog(redfish::registries::Base::Index::actionParameterUnknown,
                   std::to_array({arg1, arg2}));
 }
 
@@ -479,7 +479,7 @@
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::actionParameterValueTypeError,
+        redfish::registries::Base::Index::actionParameterValueTypeError,
         std::to_array<std::string_view>({arg1Str, arg2, arg3}));
 }
 
@@ -505,7 +505,7 @@
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::actionParameterValueFormatError,
+        redfish::registries::Base::Index::actionParameterValueFormatError,
         std::to_array<std::string_view>({arg1Str, arg2, arg3}));
 }
 
@@ -529,7 +529,7 @@
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(
-        redfish::registries::base::Index::actionParameterValueNotInList,
+        redfish::registries::Base::Index::actionParameterValueNotInList,
         std::to_array({arg1, arg2, arg3}));
 }
 
@@ -552,7 +552,7 @@
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
     return getLog(
-        redfish::registries::base::Index::actionParameterValueOutOfRange,
+        redfish::registries::Base::Index::actionParameterValueOutOfRange,
         std::to_array({arg1, arg2, arg3}));
 }
 
@@ -577,7 +577,7 @@
 {
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::actionParameterValueError,
+    return getLog(redfish::registries::Base::Index::actionParameterValueError,
                   std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -598,7 +598,7 @@
 nlohmann::json actionParameterNotSupported(std::string_view arg1,
                                            std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::actionParameterNotSupported,
+    return getLog(redfish::registries::Base::Index::actionParameterNotSupported,
                   std::to_array({arg1, arg2}));
 }
 
@@ -620,7 +620,7 @@
 nlohmann::json arraySizeTooLong(std::string_view arg1, uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
-    return getLog(redfish::registries::base::Index::arraySizeTooLong,
+    return getLog(redfish::registries::Base::Index::arraySizeTooLong,
                   std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
@@ -639,7 +639,7 @@
  */
 nlohmann::json arraySizeTooShort(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::arraySizeTooShort,
+    return getLog(redfish::registries::Base::Index::arraySizeTooShort,
                   std::to_array({arg1, arg2}));
 }
 
@@ -663,7 +663,7 @@
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::queryParameterValueTypeError,
+        redfish::registries::Base::Index::queryParameterValueTypeError,
         std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -688,7 +688,7 @@
     std::string arg1Str =
         arg1.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::queryParameterValueFormatError,
+        redfish::registries::Base::Index::queryParameterValueFormatError,
         std::to_array<std::string_view>({arg1Str, arg2}));
 }
 
@@ -709,7 +709,7 @@
  */
 nlohmann::json queryParameterValueError(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::queryParameterValueError,
+    return getLog(redfish::registries::Base::Index::queryParameterValueError,
                   std::to_array({arg1}));
 }
 
@@ -729,7 +729,7 @@
 nlohmann::json queryParameterOutOfRange(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
-    return getLog(redfish::registries::base::Index::queryParameterOutOfRange,
+    return getLog(redfish::registries::Base::Index::queryParameterOutOfRange,
                   std::to_array({arg1, arg2, arg3}));
 }
 
@@ -750,7 +750,7 @@
  */
 nlohmann::json queryNotSupportedOnResource()
 {
-    return getLog(redfish::registries::base::Index::queryNotSupportedOnResource,
+    return getLog(redfish::registries::Base::Index::queryNotSupportedOnResource,
                   {});
 }
 
@@ -770,7 +770,7 @@
 nlohmann::json queryNotSupportedOnOperation()
 {
     return getLog(
-        redfish::registries::base::Index::queryNotSupportedOnOperation, {});
+        redfish::registries::Base::Index::queryNotSupportedOnOperation, {});
 }
 
 void queryNotSupportedOnOperation(crow::Response& res)
@@ -788,7 +788,7 @@
  */
 nlohmann::json queryNotSupported()
 {
-    return getLog(redfish::registries::base::Index::queryNotSupported, {});
+    return getLog(redfish::registries::Base::Index::queryNotSupported, {});
 }
 
 void queryNotSupported(crow::Response& res)
@@ -806,7 +806,7 @@
  */
 nlohmann::json queryCombinationInvalid()
 {
-    return getLog(redfish::registries::base::Index::queryCombinationInvalid,
+    return getLog(redfish::registries::Base::Index::queryCombinationInvalid,
                   {});
 }
 
@@ -825,7 +825,7 @@
  */
 nlohmann::json queryParameterUnsupported(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::queryParameterUnsupported,
+    return getLog(redfish::registries::Base::Index::queryParameterUnsupported,
                   std::to_array({arg1}));
 }
 
@@ -844,7 +844,7 @@
  */
 nlohmann::json sessionLimitExceeded()
 {
-    return getLog(redfish::registries::base::Index::sessionLimitExceeded, {});
+    return getLog(redfish::registries::Base::Index::sessionLimitExceeded, {});
 }
 
 void sessionLimitExceeded(crow::Response& res)
@@ -863,7 +863,7 @@
 nlohmann::json eventSubscriptionLimitExceeded()
 {
     return getLog(
-        redfish::registries::base::Index::eventSubscriptionLimitExceeded, {});
+        redfish::registries::Base::Index::eventSubscriptionLimitExceeded, {});
 }
 
 void eventSubscriptionLimitExceeded(crow::Response& res)
@@ -881,7 +881,7 @@
  */
 nlohmann::json resourceCannotBeDeleted()
 {
-    return getLog(redfish::registries::base::Index::resourceCannotBeDeleted,
+    return getLog(redfish::registries::Base::Index::resourceCannotBeDeleted,
                   {});
 }
 
@@ -900,7 +900,7 @@
  */
 nlohmann::json resourceInUse()
 {
-    return getLog(redfish::registries::base::Index::resourceInUse, {});
+    return getLog(redfish::registries::Base::Index::resourceInUse, {});
 }
 
 void resourceInUse(crow::Response& res)
@@ -919,7 +919,7 @@
 nlohmann::json resourceAlreadyExists(
     std::string_view arg1, std::string_view arg2, std::string_view arg3)
 {
-    return getLog(redfish::registries::base::Index::resourceAlreadyExists,
+    return getLog(redfish::registries::Base::Index::resourceAlreadyExists,
                   std::to_array({arg1, arg2, arg3}));
 }
 
@@ -940,7 +940,7 @@
  */
 nlohmann::json resourceNotFound(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::resourceNotFound,
+    return getLog(redfish::registries::Base::Index::resourceNotFound,
                   std::to_array({arg1, arg2}));
 }
 
@@ -960,7 +960,7 @@
  */
 nlohmann::json payloadTooLarge()
 {
-    return getLog(redfish::registries::base::Index::payloadTooLarge, {});
+    return getLog(redfish::registries::Base::Index::payloadTooLarge, {});
 }
 
 void payloadTooLarge(crow::Response& res)
@@ -978,7 +978,7 @@
  */
 nlohmann::json insufficientStorage()
 {
-    return getLog(redfish::registries::base::Index::insufficientStorage, {});
+    return getLog(redfish::registries::Base::Index::insufficientStorage, {});
 }
 
 void insufficientStorage(crow::Response& res)
@@ -996,7 +996,7 @@
  */
 nlohmann::json missingOrMalformedPart()
 {
-    return getLog(redfish::registries::base::Index::missingOrMalformedPart, {});
+    return getLog(redfish::registries::Base::Index::missingOrMalformedPart, {});
 }
 
 void missingOrMalformedPart(crow::Response& res)
@@ -1014,7 +1014,7 @@
  */
 nlohmann::json invalidURI(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::invalidURI,
+    return getLog(redfish::registries::Base::Index::invalidURI,
                   std::to_array({arg1}));
 }
 
@@ -1034,7 +1034,7 @@
 nlohmann::json createFailedMissingReqProperties(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::base::Index::createFailedMissingReqProperties,
+        redfish::registries::Base::Index::createFailedMissingReqProperties,
         std::to_array({arg1}));
 }
 
@@ -1056,7 +1056,7 @@
 nlohmann::json createLimitReachedForResource()
 {
     return getLog(
-        redfish::registries::base::Index::createLimitReachedForResource, {});
+        redfish::registries::Base::Index::createLimitReachedForResource, {});
 }
 
 void createLimitReachedForResource(crow::Response& res)
@@ -1074,7 +1074,7 @@
  */
 nlohmann::json serviceShuttingDown()
 {
-    return getLog(redfish::registries::base::Index::serviceShuttingDown, {});
+    return getLog(redfish::registries::Base::Index::serviceShuttingDown, {});
 }
 
 void serviceShuttingDown(crow::Response& res)
@@ -1092,7 +1092,7 @@
  */
 nlohmann::json serviceInUnknownState()
 {
-    return getLog(redfish::registries::base::Index::serviceInUnknownState, {});
+    return getLog(redfish::registries::Base::Index::serviceInUnknownState, {});
 }
 
 void serviceInUnknownState(crow::Response& res)
@@ -1110,7 +1110,7 @@
  */
 nlohmann::json noValidSession()
 {
-    return getLog(redfish::registries::base::Index::noValidSession, {});
+    return getLog(redfish::registries::Base::Index::noValidSession, {});
 }
 
 void noValidSession(crow::Response& res)
@@ -1128,7 +1128,7 @@
  */
 nlohmann::json insufficientPrivilege()
 {
-    return getLog(redfish::registries::base::Index::insufficientPrivilege, {});
+    return getLog(redfish::registries::Base::Index::insufficientPrivilege, {});
 }
 
 void insufficientPrivilege(crow::Response& res)
@@ -1146,7 +1146,7 @@
  */
 nlohmann::json accountModified()
 {
-    return getLog(redfish::registries::base::Index::accountModified, {});
+    return getLog(redfish::registries::Base::Index::accountModified, {});
 }
 
 void accountModified(crow::Response& res)
@@ -1164,7 +1164,7 @@
  */
 nlohmann::json accountNotModified()
 {
-    return getLog(redfish::registries::base::Index::accountNotModified, {});
+    return getLog(redfish::registries::Base::Index::accountNotModified, {});
 }
 
 void accountNotModified(crow::Response& res)
@@ -1182,7 +1182,7 @@
  */
 nlohmann::json accountRemoved()
 {
-    return getLog(redfish::registries::base::Index::accountRemoved, {});
+    return getLog(redfish::registries::Base::Index::accountRemoved, {});
 }
 
 void accountRemoved(crow::Response& res)
@@ -1201,7 +1201,7 @@
 nlohmann::json accountForSessionNoLongerExists()
 {
     return getLog(
-        redfish::registries::base::Index::accountForSessionNoLongerExists, {});
+        redfish::registries::Base::Index::accountForSessionNoLongerExists, {});
 }
 
 void accountForSessionNoLongerExists(crow::Response& res)
@@ -1219,7 +1219,7 @@
  */
 nlohmann::json invalidObject(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::invalidObject,
+    return getLog(redfish::registries::Base::Index::invalidObject,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1238,7 +1238,7 @@
  */
 nlohmann::json internalError()
 {
-    return getLog(redfish::registries::base::Index::internalError, {});
+    return getLog(redfish::registries::Base::Index::internalError, {});
 }
 
 void internalError(crow::Response& res, const std::source_location location)
@@ -1259,7 +1259,7 @@
  */
 nlohmann::json unrecognizedRequestBody()
 {
-    return getLog(redfish::registries::base::Index::unrecognizedRequestBody,
+    return getLog(redfish::registries::Base::Index::unrecognizedRequestBody,
                   {});
 }
 
@@ -1278,7 +1278,7 @@
  */
 nlohmann::json resourceMissingAtURI(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::resourceMissingAtURI,
+    return getLog(redfish::registries::Base::Index::resourceMissingAtURI,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1300,7 +1300,7 @@
     const boost::urls::url_view_base& arg1)
 {
     return getLog(
-        redfish::registries::base::Index::resourceAtUriInUnknownFormat,
+        redfish::registries::Base::Index::resourceAtUriInUnknownFormat,
         std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1321,7 +1321,7 @@
 nlohmann::json resourceAtUriUnauthorized(const boost::urls::url_view_base& arg1,
                                          std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::resourceAtUriUnauthorized,
+    return getLog(redfish::registries::Base::Index::resourceAtUriUnauthorized,
                   std::to_array<std::string_view>({arg1.buffer(), arg2}));
 }
 
@@ -1343,7 +1343,7 @@
 nlohmann::json couldNotEstablishConnection(
     const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::couldNotEstablishConnection,
+    return getLog(redfish::registries::Base::Index::couldNotEstablishConnection,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1365,7 +1365,7 @@
     const boost::urls::url_view_base& arg1, std::string_view arg2)
 {
     return getLog(
-        redfish::registries::base::Index::sourceDoesNotSupportProtocol,
+        redfish::registries::Base::Index::sourceDoesNotSupportProtocol,
         std::to_array<std::string_view>({arg1.buffer(), arg2}));
 }
 
@@ -1387,7 +1387,7 @@
  */
 nlohmann::json accessDenied(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::accessDenied,
+    return getLog(redfish::registries::Base::Index::accessDenied,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1407,7 +1407,7 @@
 nlohmann::json serviceTemporarilyUnavailable(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::base::Index::serviceTemporarilyUnavailable,
+        redfish::registries::Base::Index::serviceTemporarilyUnavailable,
         std::to_array({arg1}));
 }
 
@@ -1428,7 +1428,7 @@
 nlohmann::json invalidIndex(uint64_t arg1)
 {
     std::string arg1Str = std::to_string(arg1);
-    return getLog(redfish::registries::base::Index::invalidIndex,
+    return getLog(redfish::registries::Base::Index::invalidIndex,
                   std::to_array<std::string_view>({arg1Str}));
 }
 
@@ -1450,7 +1450,7 @@
 {
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueModified,
+    return getLog(redfish::registries::Base::Index::propertyValueModified,
                   std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
@@ -1470,7 +1470,7 @@
  */
 nlohmann::json resourceInStandby()
 {
-    return getLog(redfish::registries::base::Index::resourceInStandby, {});
+    return getLog(redfish::registries::Base::Index::resourceInStandby, {});
 }
 
 void resourceInStandby(crow::Response& res)
@@ -1488,7 +1488,7 @@
  */
 nlohmann::json resourceExhaustion(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::resourceExhaustion,
+    return getLog(redfish::registries::Base::Index::resourceExhaustion,
                   std::to_array({arg1}));
 }
 
@@ -1508,7 +1508,7 @@
 nlohmann::json stringValueTooLong(std::string_view arg1, uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
-    return getLog(redfish::registries::base::Index::stringValueTooLong,
+    return getLog(redfish::registries::Base::Index::stringValueTooLong,
                   std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
@@ -1528,7 +1528,7 @@
  */
 nlohmann::json stringValueTooShort(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::stringValueTooShort,
+    return getLog(redfish::registries::Base::Index::stringValueTooShort,
                   std::to_array({arg1, arg2}));
 }
 
@@ -1548,7 +1548,7 @@
  */
 nlohmann::json sessionTerminated()
 {
-    return getLog(redfish::registries::base::Index::sessionTerminated, {});
+    return getLog(redfish::registries::Base::Index::sessionTerminated, {});
 }
 
 void sessionTerminated(crow::Response& res)
@@ -1566,7 +1566,7 @@
  */
 nlohmann::json subscriptionTerminated()
 {
-    return getLog(redfish::registries::base::Index::subscriptionTerminated, {});
+    return getLog(redfish::registries::Base::Index::subscriptionTerminated, {});
 }
 
 void subscriptionTerminated(crow::Response& res)
@@ -1585,7 +1585,7 @@
 nlohmann::json resourceTypeIncompatible(std::string_view arg1,
                                         std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::resourceTypeIncompatible,
+    return getLog(redfish::registries::Base::Index::resourceTypeIncompatible,
                   std::to_array({arg1, arg2}));
 }
 
@@ -1605,7 +1605,7 @@
  */
 nlohmann::json passwordChangeRequired(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::passwordChangeRequired,
+    return getLog(redfish::registries::Base::Index::passwordChangeRequired,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1625,7 +1625,7 @@
 nlohmann::json resetRequired(const boost::urls::url_view_base& arg1,
                              std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::resetRequired,
+    return getLog(redfish::registries::Base::Index::resetRequired,
                   std::to_array<std::string_view>({arg1.buffer(), arg2}));
 }
 
@@ -1645,7 +1645,7 @@
  */
 nlohmann::json resetRecommended(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::resetRecommended,
+    return getLog(redfish::registries::Base::Index::resetRecommended,
                   std::to_array({arg1, arg2}));
 }
 
@@ -1665,7 +1665,7 @@
  */
 nlohmann::json chassisPowerStateOnRequired(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::chassisPowerStateOnRequired,
+    return getLog(redfish::registries::Base::Index::chassisPowerStateOnRequired,
                   std::to_array({arg1}));
 }
 
@@ -1685,7 +1685,7 @@
 nlohmann::json chassisPowerStateOffRequired(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::base::Index::chassisPowerStateOffRequired,
+        redfish::registries::Base::Index::chassisPowerStateOffRequired,
         std::to_array({arg1}));
 }
 
@@ -1705,7 +1705,7 @@
 nlohmann::json propertyValueConflict(std::string_view arg1,
                                      std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::propertyValueConflict,
+    return getLog(redfish::registries::Base::Index::propertyValueConflict,
                   std::to_array({arg1, arg2}));
 }
 
@@ -1730,7 +1730,7 @@
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::propertyValueResourceConflict,
+        redfish::registries::Base::Index::propertyValueResourceConflict,
         std::to_array<std::string_view>({arg1, arg2Str, arg3.buffer()}));
 }
 
@@ -1756,7 +1756,7 @@
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
     return getLog(
-        redfish::registries::base::Index::propertyValueExternalConflict,
+        redfish::registries::Base::Index::propertyValueExternalConflict,
         std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
@@ -1780,7 +1780,7 @@
 {
     std::string arg2Str =
         arg2.dump(-1, ' ', true, nlohmann::json::error_handler_t::replace);
-    return getLog(redfish::registries::base::Index::propertyValueIncorrect,
+    return getLog(redfish::registries::Base::Index::propertyValueIncorrect,
                   std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
@@ -1800,7 +1800,7 @@
  */
 nlohmann::json resourceCreationConflict(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::resourceCreationConflict,
+    return getLog(redfish::registries::Base::Index::resourceCreationConflict,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
@@ -1822,7 +1822,7 @@
                                             std::string_view arg2)
 {
     return getLog(
-        redfish::registries::base::Index::actionParameterValueConflict,
+        redfish::registries::Base::Index::actionParameterValueConflict,
         std::to_array({arg1, arg2}));
 }
 
@@ -1843,7 +1843,7 @@
  */
 nlohmann::json maximumErrorsExceeded()
 {
-    return getLog(redfish::registries::base::Index::maximumErrorsExceeded, {});
+    return getLog(redfish::registries::Base::Index::maximumErrorsExceeded, {});
 }
 
 void maximumErrorsExceeded(crow::Response& res)
@@ -1861,7 +1861,7 @@
  */
 nlohmann::json preconditionFailed()
 {
-    return getLog(redfish::registries::base::Index::preconditionFailed, {});
+    return getLog(redfish::registries::Base::Index::preconditionFailed, {});
 }
 
 void preconditionFailed(crow::Response& res)
@@ -1879,7 +1879,7 @@
  */
 nlohmann::json preconditionRequired()
 {
-    return getLog(redfish::registries::base::Index::preconditionRequired, {});
+    return getLog(redfish::registries::Base::Index::preconditionRequired, {});
 }
 
 void preconditionRequired(crow::Response& res)
@@ -1897,7 +1897,7 @@
  */
 nlohmann::json headerMissing(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::headerMissing,
+    return getLog(redfish::registries::Base::Index::headerMissing,
                   std::to_array({arg1}));
 }
 
@@ -1916,7 +1916,7 @@
  */
 nlohmann::json headerInvalid(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::headerInvalid,
+    return getLog(redfish::registries::Base::Index::headerInvalid,
                   std::to_array({arg1}));
 }
 
@@ -1935,7 +1935,7 @@
  */
 nlohmann::json operationFailed()
 {
-    return getLog(redfish::registries::base::Index::operationFailed, {});
+    return getLog(redfish::registries::Base::Index::operationFailed, {});
 }
 
 void operationFailed(crow::Response& res)
@@ -1953,7 +1953,7 @@
  */
 nlohmann::json operationTimeout()
 {
-    return getLog(redfish::registries::base::Index::operationTimeout, {});
+    return getLog(redfish::registries::Base::Index::operationTimeout, {});
 }
 
 void operationTimeout(crow::Response& res)
@@ -1971,7 +1971,7 @@
  */
 nlohmann::json operationNotAllowed()
 {
-    return getLog(redfish::registries::base::Index::operationNotAllowed, {});
+    return getLog(redfish::registries::Base::Index::operationNotAllowed, {});
 }
 
 void operationNotAllowed(crow::Response& res)
@@ -1989,7 +1989,7 @@
  */
 nlohmann::json undeterminedFault(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::undeterminedFault,
+    return getLog(redfish::registries::Base::Index::undeterminedFault,
                   std::to_array({arg1}));
 }
 
@@ -2008,7 +2008,7 @@
  */
 nlohmann::json conditionInRelatedResource()
 {
-    return getLog(redfish::registries::base::Index::conditionInRelatedResource,
+    return getLog(redfish::registries::Base::Index::conditionInRelatedResource,
                   {});
 }
 
@@ -2027,7 +2027,7 @@
  */
 nlohmann::json restrictedRole(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::restrictedRole,
+    return getLog(redfish::registries::Base::Index::restrictedRole,
                   std::to_array({arg1}));
 }
 
@@ -2046,7 +2046,7 @@
  */
 nlohmann::json restrictedPrivilege(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::restrictedPrivilege,
+    return getLog(redfish::registries::Base::Index::restrictedPrivilege,
                   std::to_array({arg1}));
 }
 
@@ -2065,7 +2065,7 @@
  */
 nlohmann::json strictAccountTypes(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::strictAccountTypes,
+    return getLog(redfish::registries::Base::Index::strictAccountTypes,
                   std::to_array({arg1}));
 }
 
@@ -2084,7 +2084,7 @@
  */
 nlohmann::json propertyDeprecated(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::propertyDeprecated,
+    return getLog(redfish::registries::Base::Index::propertyDeprecated,
                   std::to_array({arg1}));
 }
 
@@ -2103,7 +2103,7 @@
  */
 nlohmann::json resourceDeprecated(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::resourceDeprecated,
+    return getLog(redfish::registries::Base::Index::resourceDeprecated,
                   std::to_array({arg1}));
 }
 
@@ -2123,7 +2123,7 @@
 nlohmann::json propertyValueDeprecated(std::string_view arg1,
                                        std::string_view arg2)
 {
-    return getLog(redfish::registries::base::Index::propertyValueDeprecated,
+    return getLog(redfish::registries::Base::Index::propertyValueDeprecated,
                   std::to_array({arg1, arg2}));
 }
 
@@ -2143,7 +2143,7 @@
  */
 nlohmann::json actionDeprecated(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::actionDeprecated,
+    return getLog(redfish::registries::Base::Index::actionDeprecated,
                   std::to_array({arg1}));
 }
 
@@ -2163,7 +2163,7 @@
 nlohmann::json networkNameResolutionNotConfigured()
 {
     return getLog(
-        redfish::registries::base::Index::networkNameResolutionNotConfigured,
+        redfish::registries::Base::Index::networkNameResolutionNotConfigured,
         {});
 }
 
@@ -2183,7 +2183,7 @@
 nlohmann::json networkNameResolutionNotSupported()
 {
     return getLog(
-        redfish::registries::base::Index::networkNameResolutionNotSupported,
+        redfish::registries::Base::Index::networkNameResolutionNotSupported,
         {});
 }
 
@@ -2202,7 +2202,7 @@
  */
 nlohmann::json serviceDisabled(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::serviceDisabled,
+    return getLog(redfish::registries::Base::Index::serviceDisabled,
                   std::to_array({arg1}));
 }
 
@@ -2221,7 +2221,7 @@
  */
 nlohmann::json eventBufferExceeded()
 {
-    return getLog(redfish::registries::base::Index::eventBufferExceeded, {});
+    return getLog(redfish::registries::Base::Index::eventBufferExceeded, {});
 }
 
 void eventBufferExceeded(crow::Response& res)
@@ -2239,7 +2239,7 @@
  */
 nlohmann::json authenticationTokenRequired()
 {
-    return getLog(redfish::registries::base::Index::authenticationTokenRequired,
+    return getLog(redfish::registries::Base::Index::authenticationTokenRequired,
                   {});
 }
 
@@ -2258,7 +2258,7 @@
  */
 nlohmann::json oneTimePasscodeSent(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::oneTimePasscodeSent,
+    return getLog(redfish::registries::Base::Index::oneTimePasscodeSent,
                   std::to_array({arg1}));
 }
 
@@ -2277,7 +2277,7 @@
  */
 nlohmann::json licenseRequired(std::string_view arg1)
 {
-    return getLog(redfish::registries::base::Index::licenseRequired,
+    return getLog(redfish::registries::Base::Index::licenseRequired,
                   std::to_array({arg1}));
 }
 
@@ -2296,7 +2296,7 @@
  */
 nlohmann::json propertyModified()
 {
-    return getLog(redfish::registries::base::Index::propertyModified, {});
+    return getLog(redfish::registries::Base::Index::propertyModified, {});
 }
 
 void propertyModified(crow::Response& res)
@@ -2314,7 +2314,7 @@
  */
 nlohmann::json generateSecretKeyRequired(const boost::urls::url_view_base& arg1)
 {
-    return getLog(redfish::registries::base::Index::generateSecretKeyRequired,
+    return getLog(redfish::registries::Base::Index::generateSecretKeyRequired,
                   std::to_array<std::string_view>({arg1.buffer()}));
 }
 
diff --git a/redfish-core/src/heartbeat_messages.cpp b/redfish-core/src/heartbeat_messages.cpp
index 3cef110..2f9575e 100644
--- a/redfish-core/src/heartbeat_messages.cpp
+++ b/redfish-core/src/heartbeat_messages.cpp
@@ -31,16 +31,16 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::heartbeat_event::Index name,
+static nlohmann::json getLog(redfish::registries::HeartbeatEvent::Index name,
                              std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
-    if (index >= redfish::registries::heartbeat_event::registry.size())
+    if (index >= redfish::registries::HeartbeatEvent::registry.size())
     {
         return {};
     }
-    return getLogFromRegistry(redfish::registries::heartbeat_event::header,
-                              redfish::registries::heartbeat_event::registry,
+    return getLogFromRegistry(redfish::registries::HeartbeatEvent::header,
+                              redfish::registries::HeartbeatEvent::registry,
                               index, args);
 }
 
@@ -54,7 +54,7 @@
 nlohmann::json redfishServiceFunctional()
 {
     return getLog(
-        redfish::registries::heartbeat_event::Index::redfishServiceFunctional,
+        redfish::registries::HeartbeatEvent::Index::redfishServiceFunctional,
         {});
 }
 
diff --git a/redfish-core/src/registries.cpp b/redfish-core/src/registries.cpp
index 1549dd3..2a426bf 100644
--- a/redfish-core/src/registries.cpp
+++ b/redfish-core/src/registries.cpp
@@ -2,11 +2,17 @@
 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
 #include "registries.hpp"
 
+// We need the registries_selector pulled into some cpp part so that the
+// registration hooks run.
+// NOLINTNEXTLINE(misc-include-cleaner)
 #include "registries_selector.hpp"
 #include "str_utility.hpp"
 
 #include <algorithm>
 #include <cstring>
+#include <functional>
+#include <map>
+#include <optional>
 #include <ranges>
 #include <span>
 #include <string>
@@ -16,6 +22,36 @@
 namespace redfish::registries
 {
 
+auto allRegistries() -> std::map<std::string, RegistryEntry>&
+{
+    static std::map<std::string, RegistryEntry> registries;
+    return registries;
+}
+
+auto getRegistryFromPrefix(const std::string& registryName)
+    -> std::optional<RegistryEntryRef>
+{
+    auto& registries = allRegistries();
+    if (auto it = registries.find(registryName); it != registries.end())
+    {
+        return std::ref(it->second);
+    }
+
+    return std::nullopt;
+}
+
+auto getRegistryMessagesFromPrefix(const std::string& registryName)
+    -> MessageEntries
+{
+    auto registry = getRegistryFromPrefix(registryName);
+    if (!registry)
+    {
+        return {};
+    }
+
+    return registry->get().entries;
+}
+
 const Message* getMessageFromRegistry(const std::string& messageKey,
                                       std::span<const MessageEntry> registry)
 {
@@ -48,9 +84,8 @@
     const std::string& messageKey = fields[3];
 
     // Find the right registry and check it for the MessageKey
-    // Find the right registry and check it for the MessageKey
     return getMessageFromRegistry(messageKey,
-                                  getRegistryFromPrefix(registryName));
+                                  getRegistryMessagesFromPrefix(registryName));
 }
 
 } // namespace redfish::registries
diff --git a/redfish-core/src/resource_messages.cpp b/redfish-core/src/resource_messages.cpp
index 0bda0b0..55fa8ee 100644
--- a/redfish-core/src/resource_messages.cpp
+++ b/redfish-core/src/resource_messages.cpp
@@ -31,16 +31,16 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::resource_event::Index name,
+static nlohmann::json getLog(redfish::registries::ResourceEvent::Index name,
                              std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
-    if (index >= redfish::registries::resource_event::registry.size())
+    if (index >= redfish::registries::ResourceEvent::registry.size())
     {
         return {};
     }
-    return getLogFromRegistry(redfish::registries::resource_event::header,
-                              redfish::registries::resource_event::registry,
+    return getLogFromRegistry(redfish::registries::ResourceEvent::header,
+                              redfish::registries::ResourceEvent::registry,
                               index, args);
 }
 
@@ -53,7 +53,7 @@
  */
 nlohmann::json resourceCreated()
 {
-    return getLog(redfish::registries::resource_event::Index::resourceCreated,
+    return getLog(redfish::registries::ResourceEvent::Index::resourceCreated,
                   {});
 }
 
@@ -66,7 +66,7 @@
  */
 nlohmann::json resourceRemoved()
 {
-    return getLog(redfish::registries::resource_event::Index::resourceRemoved,
+    return getLog(redfish::registries::ResourceEvent::Index::resourceRemoved,
                   {});
 }
 
@@ -81,7 +81,7 @@
                                       std::string_view arg2)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceErrorsDetected,
+        redfish::registries::ResourceEvent::Index::resourceErrorsDetected,
         std::to_array({arg1, arg2}));
 }
 
@@ -96,7 +96,7 @@
                                        std::string_view arg2)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceErrorsCorrected,
+        redfish::registries::ResourceEvent::Index::resourceErrorsCorrected,
         std::to_array({arg1, arg2}));
 }
 
@@ -110,7 +110,7 @@
 nlohmann::json resourceErrorThresholdExceeded(std::string_view arg1,
                                               std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
+    return getLog(redfish::registries::ResourceEvent::Index::
                       resourceErrorThresholdExceeded,
                   std::to_array({arg1, arg2}));
 }
@@ -125,7 +125,7 @@
 nlohmann::json resourceErrorThresholdCleared(std::string_view arg1,
                                              std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
+    return getLog(redfish::registries::ResourceEvent::Index::
                       resourceErrorThresholdCleared,
                   std::to_array({arg1, arg2}));
 }
@@ -140,7 +140,7 @@
 nlohmann::json resourceWarningThresholdExceeded(std::string_view arg1,
                                                 std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
+    return getLog(redfish::registries::ResourceEvent::Index::
                       resourceWarningThresholdExceeded,
                   std::to_array({arg1, arg2}));
 }
@@ -155,7 +155,7 @@
 nlohmann::json resourceWarningThresholdCleared(std::string_view arg1,
                                                std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
+    return getLog(redfish::registries::ResourceEvent::Index::
                       resourceWarningThresholdCleared,
                   std::to_array({arg1, arg2}));
 }
@@ -171,7 +171,7 @@
                                        std::string_view arg2)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceStatusChangedOK,
+        redfish::registries::ResourceEvent::Index::resourceStatusChangedOK,
         std::to_array({arg1, arg2}));
 }
 
@@ -185,9 +185,9 @@
 nlohmann::json resourceStatusChangedWarning(std::string_view arg1,
                                             std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
-                      resourceStatusChangedWarning,
-                  std::to_array({arg1, arg2}));
+    return getLog(
+        redfish::registries::ResourceEvent::Index::resourceStatusChangedWarning,
+        std::to_array({arg1, arg2}));
 }
 
 /**
@@ -200,7 +200,7 @@
 nlohmann::json resourceStatusChangedCritical(std::string_view arg1,
                                              std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::
+    return getLog(redfish::registries::ResourceEvent::Index::
                       resourceStatusChangedCritical,
                   std::to_array({arg1, arg2}));
 }
@@ -216,7 +216,7 @@
                                     std::string_view arg2)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceStateChanged,
+        redfish::registries::ResourceEvent::Index::resourceStateChanged,
         std::to_array({arg1, arg2}));
 }
 
@@ -229,7 +229,7 @@
  */
 nlohmann::json resourcePoweredOn(std::string_view arg1)
 {
-    return getLog(redfish::registries::resource_event::Index::resourcePoweredOn,
+    return getLog(redfish::registries::ResourceEvent::Index::resourcePoweredOn,
                   std::to_array({arg1}));
 }
 
@@ -242,9 +242,8 @@
  */
 nlohmann::json resourcePoweringOn(std::string_view arg1)
 {
-    return getLog(
-        redfish::registries::resource_event::Index::resourcePoweringOn,
-        std::to_array({arg1}));
+    return getLog(redfish::registries::ResourceEvent::Index::resourcePoweringOn,
+                  std::to_array({arg1}));
 }
 
 /**
@@ -256,9 +255,8 @@
  */
 nlohmann::json resourcePoweredOff(std::string_view arg1)
 {
-    return getLog(
-        redfish::registries::resource_event::Index::resourcePoweredOff,
-        std::to_array({arg1}));
+    return getLog(redfish::registries::ResourceEvent::Index::resourcePoweredOff,
+                  std::to_array({arg1}));
 }
 
 /**
@@ -271,7 +269,7 @@
 nlohmann::json resourcePoweringOff(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourcePoweringOff,
+        redfish::registries::ResourceEvent::Index::resourcePoweringOff,
         std::to_array({arg1}));
 }
 
@@ -284,7 +282,7 @@
  */
 nlohmann::json resourcePaused(std::string_view arg1)
 {
-    return getLog(redfish::registries::resource_event::Index::resourcePaused,
+    return getLog(redfish::registries::ResourceEvent::Index::resourcePaused,
                   std::to_array({arg1}));
 }
 
@@ -298,7 +296,7 @@
 nlohmann::json uRIForResourceChanged()
 {
     return getLog(
-        redfish::registries::resource_event::Index::uRIForResourceChanged, {});
+        redfish::registries::ResourceEvent::Index::uRIForResourceChanged, {});
 }
 
 /**
@@ -310,7 +308,7 @@
  */
 nlohmann::json resourceChanged()
 {
-    return getLog(redfish::registries::resource_event::Index::resourceChanged,
+    return getLog(redfish::registries::ResourceEvent::Index::resourceChanged,
                   {});
 }
 
@@ -324,7 +322,7 @@
 nlohmann::json resourceVersionIncompatible(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceVersionIncompatible,
+        redfish::registries::ResourceEvent::Index::resourceVersionIncompatible,
         std::to_array({arg1}));
 }
 
@@ -338,7 +336,7 @@
 nlohmann::json resourceSelfTestFailed(std::string_view arg1)
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceSelfTestFailed,
+        redfish::registries::ResourceEvent::Index::resourceSelfTestFailed,
         std::to_array({arg1}));
 }
 
@@ -352,7 +350,7 @@
 nlohmann::json resourceSelfTestCompleted()
 {
     return getLog(
-        redfish::registries::resource_event::Index::resourceSelfTestCompleted,
+        redfish::registries::ResourceEvent::Index::resourceSelfTestCompleted,
         {});
 }
 
@@ -365,7 +363,7 @@
  */
 nlohmann::json testMessage()
 {
-    return getLog(redfish::registries::resource_event::Index::testMessage, {});
+    return getLog(redfish::registries::ResourceEvent::Index::testMessage, {});
 }
 
 /**
@@ -379,7 +377,7 @@
                                            std::string_view arg2)
 {
     return getLog(
-        redfish::registries::resource_event::Index::aggregationSourceDiscovered,
+        redfish::registries::ResourceEvent::Index::aggregationSourceDiscovered,
         std::to_array({arg1, arg2}));
 }
 
@@ -392,7 +390,7 @@
  */
 nlohmann::json licenseExpired(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::licenseExpired,
+    return getLog(redfish::registries::ResourceEvent::Index::licenseExpired,
                   std::to_array({arg1, arg2}));
 }
 
@@ -405,7 +403,7 @@
  */
 nlohmann::json licenseChanged(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::licenseChanged,
+    return getLog(redfish::registries::ResourceEvent::Index::licenseChanged,
                   std::to_array({arg1, arg2}));
 }
 
@@ -418,7 +416,7 @@
  */
 nlohmann::json licenseAdded(std::string_view arg1, std::string_view arg2)
 {
-    return getLog(redfish::registries::resource_event::Index::licenseAdded,
+    return getLog(redfish::registries::ResourceEvent::Index::licenseAdded,
                   std::to_array({arg1, arg2}));
 }
 
diff --git a/redfish-core/src/task_messages.cpp b/redfish-core/src/task_messages.cpp
index ebc7cf6..1521a4a 100644
--- a/redfish-core/src/task_messages.cpp
+++ b/redfish-core/src/task_messages.cpp
@@ -33,16 +33,16 @@
 namespace messages
 {
 
-static nlohmann::json getLog(redfish::registries::task_event::Index name,
+static nlohmann::json getLog(redfish::registries::TaskEvent::Index name,
                              std::span<const std::string_view> args)
 {
     size_t index = static_cast<size_t>(name);
-    if (index >= redfish::registries::task_event::registry.size())
+    if (index >= redfish::registries::TaskEvent::registry.size())
     {
         return {};
     }
-    return getLogFromRegistry(redfish::registries::task_event::header,
-                              redfish::registries::task_event::registry, index,
+    return getLogFromRegistry(redfish::registries::TaskEvent::header,
+                              redfish::registries::TaskEvent::registry, index,
                               args);
 }
 
@@ -55,7 +55,7 @@
  */
 nlohmann::json taskStarted(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskStarted,
+    return getLog(redfish::registries::TaskEvent::Index::taskStarted,
                   std::to_array({arg1}));
 }
 
@@ -68,7 +68,7 @@
  */
 nlohmann::json taskCompletedOK(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskCompletedOK,
+    return getLog(redfish::registries::TaskEvent::Index::taskCompletedOK,
                   std::to_array({arg1}));
 }
 
@@ -81,7 +81,7 @@
  */
 nlohmann::json taskCompletedWarning(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskCompletedWarning,
+    return getLog(redfish::registries::TaskEvent::Index::taskCompletedWarning,
                   std::to_array({arg1}));
 }
 
@@ -94,7 +94,7 @@
  */
 nlohmann::json taskAborted(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskAborted,
+    return getLog(redfish::registries::TaskEvent::Index::taskAborted,
                   std::to_array({arg1}));
 }
 
@@ -107,7 +107,7 @@
  */
 nlohmann::json taskCancelled(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskCancelled,
+    return getLog(redfish::registries::TaskEvent::Index::taskCancelled,
                   std::to_array({arg1}));
 }
 
@@ -120,7 +120,7 @@
  */
 nlohmann::json taskRemoved(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskRemoved,
+    return getLog(redfish::registries::TaskEvent::Index::taskRemoved,
                   std::to_array({arg1}));
 }
 
@@ -133,7 +133,7 @@
  */
 nlohmann::json taskPaused(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskPaused,
+    return getLog(redfish::registries::TaskEvent::Index::taskPaused,
                   std::to_array({arg1}));
 }
 
@@ -146,7 +146,7 @@
  */
 nlohmann::json taskResumed(std::string_view arg1)
 {
-    return getLog(redfish::registries::task_event::Index::taskResumed,
+    return getLog(redfish::registries::TaskEvent::Index::taskResumed,
                   std::to_array({arg1}));
 }
 
@@ -160,7 +160,7 @@
 nlohmann::json taskProgressChanged(std::string_view arg1, uint64_t arg2)
 {
     std::string arg2Str = std::to_string(arg2);
-    return getLog(redfish::registries::task_event::Index::taskProgressChanged,
+    return getLog(redfish::registries::TaskEvent::Index::taskProgressChanged,
                   std::to_array<std::string_view>({arg1, arg2Str}));
 }
 
diff --git a/scripts/parse_registries.py b/scripts/parse_registries.py
index a557f65..d60e523 100755
--- a/scripts/parse_registries.py
+++ b/scripts/parse_registries.py
@@ -36,7 +36,9 @@
 
 // clang-format off
 
-namespace redfish::registries::{}
+namespace redfish::registries
+{{
+struct {}
 {{
 """
 
@@ -96,11 +98,12 @@
         with open(file, "w") as registry:
             version_split = json_dict["RegistryVersion"].split(".")
 
-            registry.write(REGISTRY_HEADER.format(namespace))
+            struct_name = to_pascal_case(namespace)
+            registry.write(REGISTRY_HEADER.format(struct_name))
             # Parse the Registry header info
             description = json_dict.get("Description", "")
             registry.write(
-                "const Header header = {{\n"
+                "static constexpr Header header = {{\n"
                 '    "{json_dict[@Redfish.Copyright]}",\n'
                 '    "{json_dict[@odata.type]}",\n'
                 "    {version_split[0]},\n"
@@ -112,10 +115,11 @@
                 '    "{json_dict[RegistryPrefix]}",\n'
                 '    "{json_dict[OwningEntity]}",\n'
                 "}};\n"
-                "constexpr const char* url =\n"
+                "\n"
+                "static constexpr const char* url =\n"
                 '    "{url}";\n'
                 "\n"
-                "constexpr std::array registry =\n"
+                "static constexpr std::array registry =\n"
                 "{{\n".format(
                     json_dict=json_dict,
                     url=url,
@@ -157,11 +161,21 @@
             for index, (messageId, message) in enumerate(messages_sorted):
                 messageId = messageId[0].lower() + messageId[1:]
                 registry.write("    {} = {},\n".format(messageId, index))
+            registry.write("};\n")
+            registry.write("}}; // struct {}\n".format(namespace))
+            registry.write("\n")
             registry.write(
-                "}};\n}} // namespace redfish::registries::{}\n".format(
-                    namespace
+                "[[gnu::constructor]] inline void register{}()\n".format(
+                    to_pascal_case(namespace)
                 )
             )
+            registry.write(
+                "{{ registerRegistry<{}>(); }}\n".format(
+                    to_pascal_case(namespace)
+                )
+            )
+            registry.write("\n")
+            registry.write("} // namespace redfish::registries\n")
 
 
 def get_privilege_string_from_list(
@@ -267,6 +281,7 @@
     registry_name: str,
     namespace_name: str,
 ) -> str:
+    struct_name = to_pascal_case(namespace_name)
     arg_nonstring_types = {
         "const boost::urls::url_view_base&": {
             "AccessDenied": [1],
@@ -351,7 +366,7 @@
                     outargs.append(f"arg{index}")
             argstring = ", ".join(outargs)
             arg_param = f"std::to_array{to_array_type}({{{argstring}}})"
-        out += f"    return getLog(redfish::registries::{namespace_name}::Index::{function_name}, {arg_param});"
+        out += f"    return getLog(redfish::registries::{struct_name}::Index::{function_name}, {arg_param});"
         out += "\n}\n\n"
     if registry_name == "Base":
         args.insert(0, "crow::Response& res")
@@ -422,6 +437,7 @@
 ) -> None:
     file, json_dict, namespace, url = registry_info
     base_filename = filename + "_messages"
+    struct_name = to_pascal_case(namespace_name)
 
     error_messages_hpp = os.path.join(
         SCRIPT_DIR, "..", "redfish-core", "include", f"{base_filename}.hpp"
@@ -541,20 +557,20 @@
         )
         out.write(
             """
-static nlohmann::json getLog(redfish::registries::{namespace_name}::Index name,
+static nlohmann::json getLog(redfish::registries::{struct_name}::Index name,
                              std::span<const std::string_view> args)
 {{
     size_t index = static_cast<size_t>(name);
-    if (index >= redfish::registries::{namespace_name}::registry.size())
+    if (index >= redfish::registries::{struct_name}::registry.size())
     {{
         return {{}};
     }}
-    return getLogFromRegistry(redfish::registries::{namespace_name}::header,
-                              redfish::registries::{namespace_name}::registry, index, args);
+    return getLogFromRegistry(redfish::registries::{struct_name}::header,
+                              redfish::registries::{struct_name}::registry, index, args);
 }}
 
 """.format(
-                namespace_name=namespace_name
+                struct_name=struct_name
             )
         )
         for entry_id, entry in messages.items():
diff --git a/test/redfish-core/include/registries_test.cpp b/test/redfish-core/include/registries_test.cpp
index 10a9866..ab43155 100644
--- a/test/redfish-core/include/registries_test.cpp
+++ b/test/redfish-core/include/registries_test.cpp
@@ -25,12 +25,12 @@
 {
     const redfish::registries::Message* msg =
         redfish::registries::getMessageFromRegistry(
-            "Non-Existent", redfish::registries::openbmc::registry);
+            "Non-Existent", redfish::registries::Openbmc::registry);
     ASSERT_EQ(msg, nullptr);
 
     const redfish::registries::Message* msg1 =
         redfish::registries::getMessageFromRegistry(
-            "ServiceStarted", redfish::registries::openbmc::registry);
+            "ServiceStarted", redfish::registries::Openbmc::registry);
     ASSERT_NE(msg1, nullptr);
 
     EXPECT_EQ(std::string(msg1->description),
