diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index 72907ba..224d48e 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -137,15 +137,14 @@
 
                         if (iface == "xyz.openbmc_project.Software.Activation")
                         {
-                            std::string* state = nullptr;
+                            const std::string* state = nullptr;
                             for (const auto& property : values)
                             {
                                 if (property.first == "Activation")
                                 {
-                                    const std::string* activationState =
-                                        std::get_if<std::string>(
-                                            &property.second);
-                                    if (activationState == nullptr)
+                                    state = std::get_if<std::string>(
+                                        &property.second);
+                                    if (state == nullptr)
                                     {
                                         taskData->messages.emplace_back(
                                             messages::internalError());
@@ -202,10 +201,9 @@
                             {
                                 if (property.first == "Progress")
                                 {
-                                    const std::string* progressStr =
-                                        std::get_if<std::string>(
-                                            &property.second);
-                                    if (progressStr == nullptr)
+                                    progress =
+                                        std::get_if<uint8_t>(&property.second);
+                                    if (progress == nullptr)
                                     {
                                         taskData->messages.emplace_back(
                                             messages::internalError());
@@ -218,11 +216,10 @@
                             {
                                 return !task::completed;
                             }
-                            taskData->percentComplete =
-                                static_cast<int>(*progress);
+                            taskData->percentComplete = *progress;
                             taskData->messages.emplace_back(
-                                messages::taskProgressChanged(
-                                    index, static_cast<size_t>(*progress)));
+                                messages::taskProgressChanged(index,
+                                                              *progress));
 
                             // if we're getting status updates it's
                             // still alive, update timer
