diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index 13e5d72..9cb78fb 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -175,14 +175,55 @@
     return true;
 }
 
+VerifyCheckResponses FirmwareBlobHandler::getVerifyStatus()
+{
+    VerifyCheckResponses value = VerifyCheckResponses::other;
+
+    switch (state)
+    {
+        case UpdateState::verificationPending:
+            value = VerifyCheckResponses::other;
+            break;
+        case UpdateState::verificationStarted:
+            value = verification->status();
+            lastVerificationResponse = value;
+            break;
+        case UpdateState::verificationCompleted:
+            value = lastVerificationResponse;
+            break;
+        default:
+            break;
+    }
+
+    return value;
+}
+
+UpdateStatus FirmwareBlobHandler::getUpdateStatus()
+{
+    UpdateStatus value = UpdateStatus::unknown;
+
+    switch (state)
+    {
+        case UpdateState::updatePending:
+            value = UpdateStatus::unknown;
+            break;
+        case UpdateState::updateStarted:
+            value = update->status();
+            lastUpdateStatus = value;
+            break;
+        case UpdateState::updateCompleted:
+            value = lastUpdateStatus;
+            break;
+        default:
+            break;
+    }
+
+    return value;
+}
+
 /*
  * Return stat information on an open session.  It therefore must be an active
  * handle to either the active image or active hash.
- *
- * The stat() and sessionstat() commands will return the same information in
- * many cases, therefore the logic will be combined.
- *
- * TODO: combine the logic for stat and sessionstat().
  */
 bool FirmwareBlobHandler::stat(uint16_t session, struct blobs::BlobMeta* meta)
 {
@@ -202,23 +243,7 @@
 
     if (item->second->activePath == verifyBlobId)
     {
-        VerifyCheckResponses value = VerifyCheckResponses::other;
-
-        switch (state)
-        {
-            case UpdateState::verificationPending:
-                value = VerifyCheckResponses::other;
-                break;
-            case UpdateState::verificationStarted:
-                value = verification->status();
-                lastVerificationResponse = value;
-                break;
-            case UpdateState::verificationCompleted:
-                value = lastVerificationResponse;
-                break;
-            default:
-                break;
-        }
+        VerifyCheckResponses value = getVerifyStatus();
 
         meta->metadata.push_back(static_cast<std::uint8_t>(value));
 
@@ -243,19 +268,7 @@
     }
     else if (item->second->activePath == updateBlobId)
     {
-        UpdateStatus value = UpdateStatus::unknown;
-
-        switch (state)
-        {
-            case UpdateState::updatePending:
-                value = UpdateStatus::unknown;
-                break;
-            case UpdateState::updateStarted:
-                value = update->status();
-                break;
-            default:
-                break;
-        }
+        UpdateStatus value = getUpdateStatus();
 
         meta->metadata.push_back(static_cast<std::uint8_t>(value));
 
diff --git a/firmware_handler.hpp b/firmware_handler.hpp
index 67fb82b..e08cb66 100644
--- a/firmware_handler.hpp
+++ b/firmware_handler.hpp
@@ -195,6 +195,9 @@
                       blobIDs.end());
     }
 
+    VerifyCheckResponses getVerifyStatus();
+    UpdateStatus getUpdateStatus();
+
     /** List of handlers by type. */
     std::vector<HandlerPack> handlers;
 
@@ -233,6 +236,8 @@
     bool fileOpen = false;
 
     VerifyCheckResponses lastVerificationResponse = VerifyCheckResponses::other;
+
+    UpdateStatus lastUpdateStatus = UpdateStatus::unknown;
 };
 
 } // namespace ipmi_flash
diff --git a/test/firmware_state_updatecompleted_unittest.cpp b/test/firmware_state_updatecompleted_unittest.cpp
index 37f228c..95e0a32 100644
--- a/test/firmware_state_updatecompleted_unittest.cpp
+++ b/test/firmware_state_updatecompleted_unittest.cpp
@@ -56,12 +56,48 @@
 }
 
 /*
+ * stat(session)
+ */
+TEST_F(FirmwareHandlerUpdateCompletedTest,
+       CallingStatSessionAfterCompletedSuccessReturnsStateWithoutRechecking)
+{
+    getToUpdateCompleted(UpdateStatus::success);
+    EXPECT_CALL(*updateMockPtr, status()).Times(0);
+
+    blobs::BlobMeta meta, expectedMeta = {};
+    expectedMeta.size = 0;
+    expectedMeta.blobState = flags | blobs::StateFlags::committed;
+    expectedMeta.metadata.push_back(
+        static_cast<std::uint8_t>(UpdateStatus::success));
+
+    EXPECT_TRUE(handler->stat(session, &meta));
+    EXPECT_EQ(expectedMeta, meta);
+    expectedState(FirmwareBlobHandler::UpdateState::updateCompleted);
+}
+
+TEST_F(FirmwareHandlerUpdateCompletedTest,
+       CallingStatSessionAfterCompletedFailureReturnsStateWithoutRechecking)
+{
+    getToUpdateCompleted(UpdateStatus::failed);
+    EXPECT_CALL(*updateMockPtr, status()).Times(0);
+
+    blobs::BlobMeta meta, expectedMeta = {};
+    expectedMeta.size = 0;
+    expectedMeta.blobState = flags | blobs::StateFlags::commit_error;
+    expectedMeta.metadata.push_back(
+        static_cast<std::uint8_t>(UpdateStatus::failed));
+
+    EXPECT_TRUE(handler->stat(session, &meta));
+    EXPECT_EQ(expectedMeta, meta);
+    expectedState(FirmwareBlobHandler::UpdateState::updateCompleted);
+}
+
+/*
  * There are the following calls (parameters may vary):
  * canHandleBlob(blob)
  * getBlobIds
  * deleteBlob(blob)
  * stat(blob)
- * stat(session)
  * close(session)
  * writemeta(session)
  * write(session)
