diff --git a/activation.cpp b/activation.cpp
index f891877..291ce7c 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -111,97 +111,6 @@
         }
 #endif
 
-#ifdef UBIFS_LAYOUT
-        if (rwVolumeCreated == false && roVolumeCreated == false)
-        {
-            // Enable systemd signals
-            Activation::subscribeToSystemdSignals();
-
-            parent.freeSpace(*this);
-
-            if (!activationProgress)
-            {
-                activationProgress =
-                    std::make_unique<ActivationProgress>(bus, path);
-            }
-
-            if (!activationBlocksTransition)
-            {
-                activationBlocksTransition =
-                    std::make_unique<ActivationBlocksTransition>(bus, path);
-            }
-
-#ifdef WANT_SIGNATURE_VERIFY
-            fs::path uploadDir(IMG_UPLOAD_DIR);
-            if (!verifySignature(uploadDir / versionId, SIGNED_IMAGE_CONF_PATH))
-            {
-                onVerifyFailed();
-                // Stop the activation process, if fieldMode is enabled.
-                if (parent.control::FieldMode::fieldModeEnabled())
-                {
-                    // Cleanup
-                    activationBlocksTransition.reset(nullptr);
-                    activationProgress.reset(nullptr);
-                    return softwareServer::Activation::activation(
-                        softwareServer::Activation::Activations::Failed);
-                }
-            }
-#endif
-
-            flashWrite();
-
-            activationProgress->progress(10);
-        }
-        else if (rwVolumeCreated == true && roVolumeCreated == true)
-        {
-            if (ubootEnvVarsUpdated == false)
-            {
-                activationProgress->progress(90);
-
-                storePurpose(
-                    versionId,
-                    parent.versions.find(versionId)->second->purpose());
-                if (!redundancyPriority)
-                {
-                    redundancyPriority = std::make_unique<RedundancyPriority>(
-                        bus, path, *this, 0);
-                }
-            }
-            else
-            {
-                activationProgress->progress(100);
-
-                activationBlocksTransition.reset(nullptr);
-                activationProgress.reset(nullptr);
-
-                rwVolumeCreated = false;
-                roVolumeCreated = false;
-                ubootEnvVarsUpdated = false;
-                Activation::unsubscribeFromSystemdSignals();
-
-                // Remove version object from image manager
-                Activation::deleteImageManagerObject();
-
-                // Create active association
-                parent.createActiveAssociation(path);
-
-                // Create updateable association as this
-                // can be re-programmed.
-                parent.createUpdateableAssociation(path);
-
-                if (Activation::checkApplyTimeImmediate() == true)
-                {
-                    log<level::INFO>("Image Active. ApplyTime is immediate, "
-                                     "rebooting BMC.");
-                    Activation::rebootBmc();
-                }
-
-                return softwareServer::Activation::activation(
-                    softwareServer::Activation::Activations::Active);
-            }
-        }
-#else // !UBIFS_LAYOUT
-
 #ifdef WANT_SIGNATURE_VERIFY
         fs::path uploadDir(IMG_UPLOAD_DIR);
         if (!verifySignature(uploadDir / versionId, SIGNED_IMAGE_CONF_PATH))
@@ -215,35 +124,35 @@
             }
         }
 #endif
+
+        if (!activationProgress)
+        {
+            activationProgress =
+                std::make_unique<ActivationProgress>(bus, path);
+        }
+
+        if (!activationBlocksTransition)
+        {
+            activationBlocksTransition =
+                std::make_unique<ActivationBlocksTransition>(bus, path);
+        }
+
+        activationProgress->progress(10);
+
         parent.freeSpace(*this);
 
+        // Enable systemd signals
+        Activation::subscribeToSystemdSignals();
+
         flashWrite();
 
-        storePurpose(versionId,
-                     parent.versions.find(versionId)->second->purpose());
-        if (!redundancyPriority)
-        {
-            redundancyPriority =
-                std::make_unique<RedundancyPriority>(bus, path, *this, 0);
-        }
+#ifdef UBIFS_LAYOUT
 
-        // Remove version object from image manager
-        Activation::deleteImageManagerObject();
+        return softwareServer::Activation::activation(value);
 
-        // Create active association
-        parent.createActiveAssociation(path);
+#else // !UBIFS_LAYOUT
 
-        if (Activation::checkApplyTimeImmediate() == true)
-        {
-            log<level::INFO>("Image Active. ApplyTime is immediate, "
-                             "rebooting BMC.");
-            Activation::rebootBmc();
-        }
-        else
-        {
-            log<level::INFO>("BMC image ready, need reboot to get activated.");
-        }
-
+        onFlashWriteSuccess();
         return softwareServer::Activation::activation(
             softwareServer::Activation::Activations::Active);
 #endif
@@ -256,6 +165,50 @@
     return softwareServer::Activation::activation(value);
 }
 
+void Activation::onFlashWriteSuccess()
+{
+    activationProgress->progress(100);
+
+    activationBlocksTransition.reset(nullptr);
+    activationProgress.reset(nullptr);
+
+    rwVolumeCreated = false;
+    roVolumeCreated = false;
+    ubootEnvVarsUpdated = false;
+    Activation::unsubscribeFromSystemdSignals();
+
+    storePurpose(versionId, parent.versions.find(versionId)->second->purpose());
+
+    if (!redundancyPriority)
+    {
+        redundancyPriority =
+            std::make_unique<RedundancyPriority>(bus, path, *this, 0);
+    }
+
+    // Remove version object from image manager
+    Activation::deleteImageManagerObject();
+
+    // Create active association
+    parent.createActiveAssociation(path);
+
+    // Create updateable association as this
+    // can be re-programmed.
+    parent.createUpdateableAssociation(path);
+
+    if (Activation::checkApplyTimeImmediate() == true)
+    {
+        log<level::INFO>("Image Active. ApplyTime is immediate, "
+                         "rebooting BMC.");
+        Activation::rebootBmc();
+    }
+    else
+    {
+        log<level::INFO>("BMC image ready, need reboot to get activated.");
+    }
+
+    activation(softwareServer::Activation::Activations::Active);
+}
+
 void Activation::deleteImageManagerObject()
 {
     // Call the Delete object for <versionID> inside image_manager
diff --git a/activation.hpp b/activation.hpp
index 61c954e..90b32b7 100644
--- a/activation.hpp
+++ b/activation.hpp
@@ -230,6 +230,15 @@
     /** @brief Overloaded write flash function */
     void flashWrite() override;
 
+    /**
+     * @brief Handle the success of the flashWrite() function
+     *
+     * @details Perform anything that is necessary to mark the activation
+     * successful after the image has been written to flash. Sets the Activation
+     * value to Active.
+     */
+    void onFlashWriteSuccess();
+
 #ifdef HOST_BIOS_UPGRADE
     /* @brief write to Host flash function */
     void flashWriteHost();
diff --git a/ubi/flash.cpp b/ubi/flash.cpp
index ffa9348..c58eefc 100644
--- a/ubi/flash.cpp
+++ b/ubi/flash.cpp
@@ -67,11 +67,25 @@
             Activation::activation(
                 softwareServer::Activation::Activations::Failed);
         }
-        else if ((rwVolumeCreated && roVolumeCreated) || // Volumes were created
-                 (ubootEnvVarsUpdated)) // Environment variables were updated
+        else if (rwVolumeCreated && roVolumeCreated) // Volumes were created
         {
-            Activation::activation(
-                softwareServer::Activation::Activations::Activating);
+            if (!ubootEnvVarsUpdated)
+            {
+                activationProgress->progress(90);
+
+                // Set the priority which triggers the service that updates the
+                // environment variables.
+                if (!Activation::redundancyPriority)
+                {
+                    Activation::redundancyPriority =
+                        std::make_unique<RedundancyPriority>(bus, path, *this,
+                                                             0);
+                }
+            }
+            else // Environment variables were updated
+            {
+                Activation::onFlashWriteSuccess();
+            }
         }
     }
 
