diff --git a/activation.cpp b/activation.cpp
index dbfe030..ee0bcf8 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -115,31 +115,37 @@
         }
         else if (rwVolumeCreated == true && roVolumeCreated == true)
         {
-            activationProgress->progress(90);
-
-            if (!redundancyPriority)
+            if (ubootEnvVarsUpdated == false)
             {
-                redundancyPriority =
-                    std::make_unique<RedundancyPriority>(bus, path, *this, 0);
+                activationProgress->progress(90);
+
+                if (!redundancyPriority)
+                {
+                    redundancyPriority = std::make_unique<RedundancyPriority>(
+                        bus, path, *this, 0);
+                }
             }
+            else
+            {
+                activationProgress->progress(100);
 
-            activationProgress->progress(100);
+                activationBlocksTransition.reset(nullptr);
+                activationProgress.reset(nullptr);
 
-            activationBlocksTransition.reset(nullptr);
-            activationProgress.reset(nullptr);
+                rwVolumeCreated = false;
+                roVolumeCreated = false;
+                ubootEnvVarsUpdated = false;
+                Activation::unsubscribeFromSystemdSignals();
 
-            rwVolumeCreated = false;
-            roVolumeCreated = false;
-            Activation::unsubscribeFromSystemdSignals();
+                // Remove version object from image manager
+                Activation::deleteImageManagerObject();
 
-            // Remove version object from image manager
-            Activation::deleteImageManagerObject();
+                // Create active association
+                parent.createActiveAssociation(path);
 
-            // Create active association
-            parent.createActiveAssociation(path);
-
-            return softwareServer::Activation::activation(
-                softwareServer::Activation::Activations::Active);
+                return softwareServer::Activation::activation(
+                    softwareServer::Activation::Activations::Active);
+            }
         }
     }
     else
@@ -171,6 +177,7 @@
 {
     rwVolumeCreated = false;
     roVolumeCreated = false;
+    ubootEnvVarsUpdated = false;
 
     if ((value == softwareServer::Activation::RequestedActivations::Active) &&
         (softwareServer::Activation::requestedActivation() !=
@@ -222,6 +229,8 @@
 
     auto rwServiceFile = "obmc-flash-bmc-ubirw.service";
     auto roServiceFile = "obmc-flash-bmc-ubiro@" + versionId + ".service";
+    auto ubootVarsServiceFile =
+        "obmc-flash-bmc-updateubootvars@" + versionId + ".service";
 
     if (newStateUnit == rwServiceFile && newStateResult == "done")
     {
@@ -235,14 +244,21 @@
         activationProgress->progress(activationProgress->progress() + 50);
     }
 
-    if (newStateUnit == rwServiceFile || newStateUnit == roServiceFile)
+    if (newStateUnit == ubootVarsServiceFile && newStateResult == "done")
+    {
+        ubootEnvVarsUpdated = true;
+    }
+
+    if (newStateUnit == rwServiceFile || newStateUnit == roServiceFile ||
+        newStateUnit == ubootVarsServiceFile)
     {
         if (newStateResult == "failed" || newStateResult == "dependency")
         {
             Activation::activation(
                 softwareServer::Activation::Activations::Failed);
         }
-        else if (rwVolumeCreated && roVolumeCreated) // Volumes were created
+        else if ((rwVolumeCreated && roVolumeCreated) || // Volumes were created
+                 (ubootEnvVarsUpdated)) // Environment variables were updated
         {
             Activation::activation(
                 softwareServer::Activation::Activations::Activating);
diff --git a/activation.hpp b/activation.hpp
index 50f5338..51756f2 100644
--- a/activation.hpp
+++ b/activation.hpp
@@ -311,6 +311,10 @@
     /** @brief Tracks whether the read-only volume has been created as
      * part of the activation process. **/
     bool roVolumeCreated = false;
+
+    /** @brief Tracks if the service that updates the U-Boot environment
+     *         variables has completed. **/
+    bool ubootEnvVarsUpdated = false;
 };
 
 } // namespace updater
