diff --git a/activation.cpp b/activation.cpp
index 73eb651..ae8ebe9 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -155,10 +155,44 @@
 {
     parent.parent.freePriority(value, parent.versionId);
     storeToFile(parent.versionId, value);
-    parent.parent.resetUbootEnvVars();
+
+    // Update U-Boot env variable to point to this version if it has the
+    // lowest priority. Otherwise, reset the UbootEnvVars to find the lowest
+    // priority version and set that in U-Boot.
+    if (parent.parent.isLowestPriority(value))
+    {
+        parent.updateUbootEnvVars();
+    }
+    else
+    {
+        parent.parent.resetUbootEnvVars();
+    }
+
     return softwareServer::RedundancyPriority::priority(value);
 }
 
+// TODO: openbmc/openbmc#2369 Add recovery policy to updateubootvars
+//       unit template.
+void Activation::updateUbootEnvVars()
+{
+    auto method = bus.new_method_call(
+            SYSTEMD_BUSNAME,
+            SYSTEMD_PATH,
+            SYSTEMD_INTERFACE,
+            "StartUnit");
+    auto updateEnvVarsFile = "obmc-flash-bmc-updateubootvars@" + versionId +
+            ".service";
+    method.append(updateEnvVarsFile, "replace");
+    auto result = bus.call(method);
+
+    //Check that the bus call didn't result in an error
+    if (result.is_method_error())
+    {
+        log<level::ERR>("Failed to update u-boot env variables",
+                        entry("VERSIONID=%s", versionId));
+    }
+}
+
 void Activation::unitStateChange(sdbusplus::message::message& msg)
 {
     if (softwareServer::Activation::activation() !=
diff --git a/activation.hpp b/activation.hpp
index cf4b5c2..6c303db 100644
--- a/activation.hpp
+++ b/activation.hpp
@@ -266,6 +266,13 @@
         void unsubscribeFromSystemdSignals();
 
         /**
+         * @brief Updates the U-Boot variables to point to this activation's
+         *        versionId, so that the systems boots from this version on
+         *        the next reboot.
+         */
+        void updateUbootEnvVars();
+
+        /**
          * @brief delete the d-bus object.
          */
         void delete_() override;
diff --git a/item_updater.cpp b/item_updater.cpp
index e2de36f..e7e3b36 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -602,23 +602,9 @@
         }
     }
 
-    // TODO: openbmc/openbmc#2369 Add recovery policy to updateubootvars
-    //       unit template.
-    auto method = bus.new_method_call(
-            SYSTEMD_BUSNAME,
-            SYSTEMD_PATH,
-            SYSTEMD_INTERFACE,
-            "StartUnit");
-    auto updateEnvVarsFile = "obmc-flash-bmc-updateubootvars@" +
-                             lowestPriorityVersion + ".service";
-    method.append(updateEnvVarsFile, "replace");
-    auto result = bus.call(method);
-
-    //Check that the bus call didn't result in an error
-    if (result.is_method_error())
-    {
-        log<level::ERR>("Failed to update u-boot env variables");
-    }
+    // Update the U-boot environment variable to point to the lowest priority
+    auto it = activations.find(lowestPriorityVersion);
+    it->second->updateUbootEnvVars();
 }
 
 } // namespace updater
