diff --git a/meson.build b/meson.build
index 1e42e92..8fd6a50 100644
--- a/meson.build
+++ b/meson.build
@@ -396,6 +396,7 @@
     'redfish-core/src/resource_messages.cpp',
     'redfish-core/src/subscription.cpp',
     'redfish-core/src/task_messages.cpp',
+    'redfish-core/src/update_messages.cpp',
     'redfish-core/src/utils/dbus_utils.cpp',
     'redfish-core/src/utils/json_utils.cpp',
     'redfish-core/src/utils/time_utils.cpp',
diff --git a/redfish-core/include/registries/update_message_registry.hpp b/redfish-core/include/registries/update_message_registry.hpp
index 578b77a..5f4043e 100644
--- a/redfish-core/include/registries/update_message_registry.hpp
+++ b/redfish-core/include/registries/update_message_registry.hpp
@@ -22,11 +22,11 @@
 struct Update
 {
 static constexpr Header header = {
-    "Copyright 2014-2023 DMTF. All rights reserved.",
+    "Copyright 2014-2025 DMTF. All rights reserved.",
     "#MessageRegistry.v1_6_2.MessageRegistry",
     1,
-    0,
     2,
+    0,
     "Update Message Registry",
     "en",
     "This registry defines the update status and error messages.",
@@ -35,7 +35,7 @@
 };
 
 static constexpr const char* url =
-    "https://redfish.dmtf.org/registries/Update.1.0.2.json";
+    "https://redfish.dmtf.org/registries/Update.1.2.0.json";
 
 static constexpr std::array registry =
 {
@@ -128,6 +128,18 @@
             "None.",
         }},
     MessageEntry{
+        "NoTargetsDetermined",
+        {
+            "Indicates that no target resource or device for an image was determined for update.",
+            "No target device will be updated with image '%1'.",
+            "OK",
+            1,
+            {
+                "string",
+            },
+            "None.",
+        }},
+    MessageEntry{
         "OperationTransitionedToJob",
         {
             "Indicates that the update operation transitioned to a job for managing the progress of the operation.",
@@ -189,6 +201,45 @@
             "None.",
         }},
     MessageEntry{
+        "UpdateNotApplicable",
+        {
+            "Indicates that the update was not applicable to the resource or device.",
+            "Image '%1' was not applicable to device '%2'.",
+            "Warning",
+            2,
+            {
+                "string",
+                "string",
+            },
+            "None.",
+        }},
+    MessageEntry{
+        "UpdateSkipped",
+        {
+            "Indicates that an image was applicable to a resource or device, but the update was skipped due to policies in the service.",
+            "Device '%1' skipped the update with image '%2'.",
+            "OK",
+            2,
+            {
+                "string",
+                "string",
+            },
+            "None.",
+        }},
+    MessageEntry{
+        "UpdateSkippedSameVersion",
+        {
+            "Indicates that a resource or device update was skipped because the same version is already installed.",
+            "Device '%1' skipped the update with image '%2' because the same version is already installed.",
+            "OK",
+            2,
+            {
+                "string",
+                "string",
+            },
+            "None.",
+        }},
+    MessageEntry{
         "UpdateSuccessful",
         {
             "Indicates that a resource or device was updated.",
@@ -204,7 +255,7 @@
     MessageEntry{
         "VerificationFailed",
         {
-            "Indicates that the component failed to verify an image.",
+            "Indicates that the service or component failed to verify an image.",
             "Verification of image '%1' at '%2' failed.",
             "Critical",
             2,
@@ -239,14 +290,18 @@
     awaitToActivate = 4,
     awaitToUpdate = 5,
     installingOnComponent = 6,
-    operationTransitionedToJob = 7,
-    targetDetermined = 8,
-    transferFailed = 9,
-    transferringToComponent = 10,
-    updateInProgress = 11,
-    updateSuccessful = 12,
-    verificationFailed = 13,
-    verifyingAtComponent = 14,
+    noTargetsDetermined = 7,
+    operationTransitionedToJob = 8,
+    targetDetermined = 9,
+    transferFailed = 10,
+    transferringToComponent = 11,
+    updateInProgress = 12,
+    updateNotApplicable = 13,
+    updateSkipped = 14,
+    updateSkippedSameVersion = 15,
+    updateSuccessful = 16,
+    verificationFailed = 17,
+    verifyingAtComponent = 18,
 };
 }; // struct update
 
diff --git a/redfish-core/include/update_messages.hpp b/redfish-core/include/update_messages.hpp
new file mode 100644
index 0000000..c79a208
--- /dev/null
+++ b/redfish-core/include/update_messages.hpp
@@ -0,0 +1,84 @@
+#pragma once
+/****************************************************************
+ *                 READ THIS WARNING FIRST
+ * This is an auto-generated header which contains definitions
+ * for Redfish DMTF defined messages.
+ * DO NOT modify this registry outside of running the
+ * parse_registries.py script.  The definitions contained within
+ * this file are owned by DMTF.  Any modifications to these files
+ * should be first pushed to the relevant registry in the DMTF
+ * github organization.
+ ***************************************************************/
+// These generated headers are a superset of what is needed.
+// clang sees them as an error, so ignore
+// NOLINTBEGIN(misc-include-cleaner)
+#include "http_response.hpp"
+
+#include <boost/url/url_view_base.hpp>
+#include <nlohmann/json.hpp>
+
+#include <cstdint>
+#include <source_location>
+#include <string_view>
+// NOLINTEND(misc-include-cleaner)
+
+namespace redfish
+{
+
+namespace messages
+{
+nlohmann::json::object_t targetDetermined(std::string_view arg1,
+                                          std::string_view arg2);
+
+nlohmann::json::object_t allTargetsDetermined();
+
+nlohmann::json::object_t noTargetsDetermined(std::string_view arg1);
+
+nlohmann::json::object_t updateInProgress();
+
+nlohmann::json::object_t transferringToComponent(std::string_view arg1,
+                                                 std::string_view arg2);
+
+nlohmann::json::object_t verifyingAtComponent(std::string_view arg1,
+                                              std::string_view arg2);
+
+nlohmann::json::object_t installingOnComponent(std::string_view arg1,
+                                               std::string_view arg2);
+
+nlohmann::json::object_t applyingOnComponent(std::string_view arg1,
+                                             std::string_view arg2);
+
+nlohmann::json::object_t transferFailed(std::string_view arg1,
+                                        std::string_view arg2);
+
+nlohmann::json::object_t verificationFailed(std::string_view arg1,
+                                            std::string_view arg2);
+
+nlohmann::json::object_t applyFailed(std::string_view arg1,
+                                     std::string_view arg2);
+
+nlohmann::json::object_t activateFailed(std::string_view arg1,
+                                        std::string_view arg2);
+
+nlohmann::json::object_t awaitToUpdate(std::string_view arg1,
+                                       std::string_view arg2);
+
+nlohmann::json::object_t awaitToActivate(std::string_view arg1,
+                                         std::string_view arg2);
+
+nlohmann::json::object_t updateSuccessful(std::string_view arg1,
+                                          std::string_view arg2);
+
+nlohmann::json::object_t operationTransitionedToJob(std::string_view arg1);
+
+nlohmann::json::object_t updateSkipped(std::string_view arg1,
+                                       std::string_view arg2);
+
+nlohmann::json::object_t updateSkippedSameVersion(std::string_view arg1,
+                                                  std::string_view arg2);
+
+nlohmann::json::object_t updateNotApplicable(std::string_view arg1,
+                                             std::string_view arg2);
+
+} // namespace messages
+} // namespace redfish
diff --git a/redfish-core/src/update_messages.cpp b/redfish-core/src/update_messages.cpp
new file mode 100644
index 0000000..a11cd6a
--- /dev/null
+++ b/redfish-core/src/update_messages.cpp
@@ -0,0 +1,311 @@
+/****************************************************************
+ *                 READ THIS WARNING FIRST
+ * This is an auto-generated header which contains definitions
+ * for Redfish DMTF defined messages.
+ * DO NOT modify this registry outside of running the
+ * parse_registries.py script.  The definitions contained within
+ * this file are owned by DMTF.  Any modifications to these files
+ * should be first pushed to the relevant registry in the DMTF
+ * github organization.
+ ***************************************************************/
+#include "update_messages.hpp"
+
+#include "registries.hpp"
+#include "registries/update_message_registry.hpp"
+
+#include <nlohmann/json.hpp>
+
+#include <array>
+#include <cstddef>
+#include <cstdint>
+#include <span>
+#include <string>
+#include <string_view>
+
+// Clang can't seem to decide whether this header needs to be included or not,
+// and is inconsistent.  Include it for now
+// NOLINTNEXTLINE(misc-include-cleaner)
+#include <utility>
+
+namespace redfish
+{
+
+namespace messages
+{
+
+static nlohmann::json::object_t getLog(redfish::registries::Update::Index name,
+                                       std::span<const std::string_view> args)
+{
+    size_t index = static_cast<size_t>(name);
+    if (index >= redfish::registries::Update::registry.size())
+    {
+        return {};
+    }
+    return getLogFromRegistry(redfish::registries::Update::header,
+                              redfish::registries::Update::registry, index,
+                              args);
+}
+
+/**
+ * @internal
+ * @brief Formats TargetDetermined message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t targetDetermined(std::string_view arg1,
+                                          std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::targetDetermined,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats AllTargetsDetermined message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t allTargetsDetermined()
+{
+    return getLog(redfish::registries::Update::Index::allTargetsDetermined, {});
+}
+
+/**
+ * @internal
+ * @brief Formats NoTargetsDetermined message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t noTargetsDetermined(std::string_view arg1)
+{
+    return getLog(redfish::registries::Update::Index::noTargetsDetermined,
+                  std::to_array({arg1}));
+}
+
+/**
+ * @internal
+ * @brief Formats UpdateInProgress message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t updateInProgress()
+{
+    return getLog(redfish::registries::Update::Index::updateInProgress, {});
+}
+
+/**
+ * @internal
+ * @brief Formats TransferringToComponent message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t transferringToComponent(std::string_view arg1,
+                                                 std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::transferringToComponent,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats VerifyingAtComponent message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t verifyingAtComponent(std::string_view arg1,
+                                              std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::verifyingAtComponent,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats InstallingOnComponent message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t installingOnComponent(std::string_view arg1,
+                                               std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::installingOnComponent,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats ApplyingOnComponent message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t applyingOnComponent(std::string_view arg1,
+                                             std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::applyingOnComponent,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats TransferFailed message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t transferFailed(std::string_view arg1,
+                                        std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::transferFailed,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats VerificationFailed message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t verificationFailed(std::string_view arg1,
+                                            std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::verificationFailed,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats ApplyFailed message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t applyFailed(std::string_view arg1,
+                                     std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::applyFailed,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats ActivateFailed message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t activateFailed(std::string_view arg1,
+                                        std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::activateFailed,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats AwaitToUpdate message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t awaitToUpdate(std::string_view arg1,
+                                       std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::awaitToUpdate,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats AwaitToActivate message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t awaitToActivate(std::string_view arg1,
+                                         std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::awaitToActivate,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats UpdateSuccessful message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t updateSuccessful(std::string_view arg1,
+                                          std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::updateSuccessful,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats OperationTransitionedToJob message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t operationTransitionedToJob(std::string_view arg1)
+{
+    return getLog(
+        redfish::registries::Update::Index::operationTransitionedToJob,
+        std::to_array({arg1}));
+}
+
+/**
+ * @internal
+ * @brief Formats UpdateSkipped message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t updateSkipped(std::string_view arg1,
+                                       std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::updateSkipped,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats UpdateSkippedSameVersion message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t updateSkippedSameVersion(std::string_view arg1,
+                                                  std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::updateSkippedSameVersion,
+                  std::to_array({arg1, arg2}));
+}
+
+/**
+ * @internal
+ * @brief Formats UpdateNotApplicable message into JSON
+ *
+ * See header file for more information
+ * @endinternal
+ */
+nlohmann::json::object_t updateNotApplicable(std::string_view arg1,
+                                             std::string_view arg2)
+{
+    return getLog(redfish::registries::Update::Index::updateNotApplicable,
+                  std::to_array({arg1, arg2}));
+}
+
+} // namespace messages
+} // namespace redfish
diff --git a/scripts/parse_registries.py b/scripts/parse_registries.py
index 747aac1..8ee9fc9 100755
--- a/scripts/parse_registries.py
+++ b/scripts/parse_registries.py
@@ -711,7 +711,7 @@
             ("storage_device", "1.2.1"),
             ("task_event", "1.0.3"),
             ("telemetry", "1.0.0"),
-            ("update", "1.0.2"),
+            ("update", "1.2.0"),
         ]
     )
 
@@ -770,6 +770,13 @@
             "task_event",
             "task",
         )
+    if "update" in registries_map:
+        create_error_registry(
+            registries_map["update"],
+            "Update",
+            "update",
+            "update",
+        )
 
     if "privilege" in registries:
         make_privilege_registry()
