diff --git a/activation.cpp b/activation.cpp
index 5b54571..f7cfd1a 100755
--- a/activation.cpp
+++ b/activation.cpp
@@ -57,22 +57,10 @@
                 std::make_unique<ActivationBlocksTransition>(bus, path);
     }
 
-    constexpr auto squashfsMountService =
-            "obmc-flash-bios-squashfsmount@";
-    auto squashfsMountServiceFile = std::string(squashfsMountService) +
-            versionId + ".service";
-    auto method = bus.new_method_call(
-            SYSTEMD_BUSNAME,
-            SYSTEMD_PATH,
-            SYSTEMD_INTERFACE,
-            "StartUnit");
-    method.append(squashfsMountServiceFile, "replace");
-    bus.call_noreply(method);
-
     constexpr auto ubimountService = "obmc-flash-bios-ubimount@";
     auto ubimountServiceFile = std::string(ubimountService) +
            versionId + ".service";
-    method = bus.new_method_call(
+    auto method = bus.new_method_call(
             SYSTEMD_BUSNAME,
             SYSTEMD_PATH,
             SYSTEMD_INTERFACE,
@@ -99,8 +87,7 @@
     activationBlocksTransition.reset(nullptr);
     activationProgress.reset(nullptr);
 
-    squashfsLoaded = false;
-    rwVolumesCreated = false;
+    ubiVolumesCreated = false;
     Activation::unsubscribeFromSystemdSignals();
     // Create active association
     parent.createActiveAssociation(path);
@@ -120,12 +107,12 @@
         parent.freeSpace();
         softwareServer::Activation::activation(value);
 
-        if (squashfsLoaded == false && rwVolumesCreated == false)
+        if (ubiVolumesCreated == false)
         {
             Activation::startActivation();
             return softwareServer::Activation::activation(value);
         }
-        else if (squashfsLoaded == true && rwVolumesCreated == true)
+        else if (ubiVolumesCreated == true)
         {
             // Only when the squashfs image is finished loading AND the RW
             // volumes have been created do we proceed with activation. To
@@ -161,8 +148,7 @@
 auto Activation::requestedActivation(RequestedActivations value) ->
         RequestedActivations
 {
-    squashfsLoaded = false;
-    rwVolumesCreated = false;
+    ubiVolumesCreated = false;
 
     if ((value == softwareServer::Activation::RequestedActivations::Active) &&
         (softwareServer::Activation::requestedActivation() !=
@@ -198,32 +184,22 @@
     //Read the msg and populate each variable
     msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
 
-    auto squashfsMountServiceFile =
-            "obmc-flash-bios-squashfsmount@" + versionId + ".service";
-
     auto ubimountServiceFile =
             "obmc-flash-bios-ubimount@" + versionId + ".service";
 
-    if(newStateUnit == squashfsMountServiceFile && newStateResult == "done")
-    {
-        squashfsLoaded = true;
-        activationProgress->progress(activationProgress->progress() + 20);
-    }
-
     if(newStateUnit == ubimountServiceFile && newStateResult == "done")
     {
-        rwVolumesCreated = true;
+        ubiVolumesCreated = true;
         activationProgress->progress(activationProgress->progress() + 50);
     }
 
-    if(squashfsLoaded && rwVolumesCreated)
+    if(ubiVolumesCreated)
     {
         Activation::activation(
                 softwareServer::Activation::Activations::Activating);
     }
 
-    if((newStateUnit == squashfsMountServiceFile ||
-        newStateUnit == ubimountServiceFile) &&
+    if((newStateUnit == ubimountServiceFile) &&
         (newStateResult == "failed" || newStateResult == "dependency"))
     {
         Activation::activation(softwareServer::Activation::Activations::Failed);
diff --git a/activation.hpp b/activation.hpp
index fa27086..3fcb622 100755
--- a/activation.hpp
+++ b/activation.hpp
@@ -294,13 +294,9 @@
         /** @brief Used to subscribe to dbus systemd signals **/
         sdbusplus::bus::match_t systemdSignals;
 
-        /** @brief Tracks whether the squashfs image has been loaded as part of
-         * the activation process. **/
-        bool squashfsLoaded = false;
-
-        /** @brief Tracks whether the read-write volumes have been created as
-         * part of the activation process. **/
-        bool rwVolumesCreated = false;
+        /** @brief Tracks whether the read-only & read-write volumes have been
+         *created as part of the activation process. **/
+        bool ubiVolumesCreated = false;
 
         /** @brief activation status property get function
          *
diff --git a/item_updater.cpp b/item_updater.cpp
index 6df57ac..101bc00 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -344,7 +344,7 @@
     // Remove priority persistence file
     removeFile(entryId);
 
-    // Removing partitions
+    // Removing read-only and read-write partitions
     removeReadWritePartition(entryId);
     removeReadOnlyPartition(entryId);
 
diff --git a/item_updater.hpp b/item_updater.hpp
index affbe53..812c9fe 100755
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -141,7 +141,7 @@
         /** @brief Clears read write PNOR partition for
          *  given Activation dbus object
          *
-         * @param[in]  versionId - The id of the rw partition to remove.
+         *  @param[in]  versionId - The id of the rw partition to remove.
          */
         void removeReadWritePartition(std::string versionId);
 
