diff --git a/activation.cpp b/activation.cpp
index fd238d0..3d70811 100755
--- a/activation.cpp
+++ b/activation.cpp
@@ -27,6 +27,37 @@
     return;
 }
 
+void Activation::createSymlinks()
+{
+    if (!fs::is_directory(PNOR_ACTIVE_PATH))
+    {
+        fs::create_directories(PNOR_ACTIVE_PATH);
+    }
+
+    // If the RW or RO active links exist, remove them and create new
+    // ones pointing to the active version.
+    if (fs::is_symlink(PNOR_RO_ACTIVE_PATH))
+    {
+        fs::remove(PNOR_RO_ACTIVE_PATH);
+    }
+    fs::create_directory_symlink(PNOR_RO_PREFIX + versionId,
+            PNOR_RO_ACTIVE_PATH);
+    if (fs::is_symlink(PNOR_RW_ACTIVE_PATH))
+    {
+        fs::remove(PNOR_RW_ACTIVE_PATH);
+    }
+    fs::create_directory_symlink(PNOR_RW_PREFIX + versionId,
+            PNOR_RW_ACTIVE_PATH);
+
+    // There is only one preserved directory as it is not tied to a
+    // version, so just create the link if it doesn't exist already
+    if (!fs::is_symlink(PNOR_PRSV_ACTIVE_PATH))
+    {
+        fs::create_directory_symlink(PNOR_PRSV,
+                PNOR_PRSV_ACTIVE_PATH);
+    }
+}
+
 auto Activation::activation(Activations value) ->
         Activations
 {
@@ -104,34 +135,7 @@
                 (fs::is_directory(PNOR_RO_PREFIX + versionId)))
             {
                 activationProgress->progress(90);
-
-                if (!fs::is_directory(PNOR_ACTIVE_PATH))
-                {
-                    fs::create_directories(PNOR_ACTIVE_PATH);
-                }
-
-                // If the RW or RO active links exist, remove them and create new
-                // ones pointing to the active version.
-                if (fs::is_symlink(PNOR_RO_ACTIVE_PATH))
-                {
-                    fs::remove(PNOR_RO_ACTIVE_PATH);
-                }
-                fs::create_directory_symlink(PNOR_RO_PREFIX + versionId,
-                        PNOR_RO_ACTIVE_PATH);
-                if (fs::is_symlink(PNOR_RW_ACTIVE_PATH))
-                {
-                    fs::remove(PNOR_RW_ACTIVE_PATH);
-                }
-                fs::create_directory_symlink(PNOR_RW_PREFIX + versionId,
-                        PNOR_RW_ACTIVE_PATH);
-
-                // There is only one preserved directory as it is not tied to a
-                // version, so just create the link if it doesn't exist already.
-                if (!fs::is_symlink(PNOR_PRSV_ACTIVE_PATH))
-                {
-                    fs::create_directory_symlink(PNOR_PRSV,
-                            PNOR_PRSV_ACTIVE_PATH);
-                }
+                createSymlinks();
 
                 // Set Redundancy Priority before setting to Active
                 if (!redundancyPriority)
@@ -207,6 +211,14 @@
 uint8_t RedundancyPriority::priority(uint8_t value)
 {
     parent.parent.freePriority(value);
+
+    if(parent.parent.isLowestPriority(value))
+    {
+        // Need to update the symlinks to point to Software Version
+        // with lowest priority.
+        parent.createSymlinks();
+    }
+
     return softwareServer::RedundancyPriority::priority(value);
 }
 
diff --git a/activation.hpp b/activation.hpp
index 458034c..bc99fbe 100755
--- a/activation.hpp
+++ b/activation.hpp
@@ -226,6 +226,9 @@
         RequestedActivations requestedActivation(RequestedActivations value)
                 override;
 
+        /** @brief Create symlinks for the current Software Version */
+        void createSymlinks();
+
         /** @brief Check if systemd state change is relevant to this object
          *
          * Instance specific interface to handle the detected systemd state
diff --git a/item_updater.cpp b/item_updater.cpp
index 7a56775..7466d12 100755
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -227,6 +227,21 @@
     }
 }
 
+bool ItemUpdater::isLowestPriority(uint8_t value)
+{
+    for (const auto& intf : activations)
+    {
+        if(intf.second->redundancyPriority)
+        {
+            if (intf.second->redundancyPriority.get()->priority() < value)
+            {
+                return false;
+            }
+        }
+    }
+    return true;
+}
+
 } // namespace updater
 } // namespace software
 } // namespace openpower
diff --git a/item_updater.hpp b/item_updater.hpp
index 2a71905..213b456 100755
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -51,6 +51,15 @@
          */
         void freePriority(uint8_t value);
 
+        /** @brief Determine is the given priority is the lowest
+         *
+         *  @param[in] value - The priority that needs to be checked.
+         *
+         *  @return boolean corresponding to whether the given
+         *           priority is lowest.
+         */
+        bool isLowestPriority(uint8_t value);
+
         /**
          * @brief Create and populate the active PNOR Version.
          */
