diff --git a/tools/handler.cpp b/tools/handler.cpp
index a87793e..2b847a9 100644
--- a/tools/handler.cpp
+++ b/tools/handler.cpp
@@ -115,7 +115,8 @@
 
         std::fprintf(stderr, "Calling stat on %s session to check status\n",
                      target.c_str());
-        return pollStatus(*session, blob);
+        pollStatus(*session, blob);
+        return true;
     }
     catch (const ipmiblob::BlobException& b)
     {
@@ -139,10 +140,10 @@
         /* TODO: call readBytes multiple times in case IPMI message length
          * exceeds IPMI_MAX_MSG_LENGTH.
          */
-        auto pollResp = pollReadReady(*session, blob);
-        if (pollResp.first && pollResp.second > 0)
+        auto size = pollReadReady(*session, blob);
+        if (size > 0)
         {
-            return blob->readBytes(*session, 0, pollResp.second);
+            return blob->readBytes(*session, 0, size);
         }
         return {};
     }
diff --git a/tools/helper.cpp b/tools/helper.cpp
index d612922..7ae8c76 100644
--- a/tools/helper.cpp
+++ b/tools/helper.cpp
@@ -32,7 +32,7 @@
 /* Poll an open verification session.  Handling closing the session is not yet
  * owned by this method.
  */
-bool pollStatus(std::uint16_t session, ipmiblob::BlobInterface* blob)
+void pollStatus(std::uint16_t session, ipmiblob::BlobInterface* blob)
 {
     using namespace std::chrono_literals;
 
@@ -109,7 +109,10 @@
      * which exceptions from the lower layers allow one to try and delete the
      * blobs to rollback the state and progress.
      */
-    return (result == ipmi_flash::ActionStatus::success);
+    if (result != ipmi_flash::ActionStatus::success)
+    {
+        throw ToolException("BMC reported failure");
+    }
 }
 
 /* Poll an open blob session for reading.
@@ -126,8 +129,7 @@
  * If the blob is not open_read and not committing, then it is an error to the
  * reader.
  */
-std::pair<bool, uint32_t> pollReadReady(std::uint16_t session,
-                                        ipmiblob::BlobInterface* blob)
+uint32_t pollReadReady(std::uint16_t session, ipmiblob::BlobInterface* blob)
 {
     using namespace std::chrono_literals;
     static constexpr auto pollingSleep = 5s;
@@ -149,7 +151,7 @@
             if (blobStatResp.blob_state & ipmiblob::StateFlags::open_read)
             {
                 std::fprintf(stderr, "success\n");
-                return std::make_pair(true, blobStatResp.size);
+                return blobStatResp.size;
             }
             else if (blobStatResp.blob_state & ipmiblob::StateFlags::committing)
             {
@@ -158,7 +160,7 @@
             else
             {
                 std::fprintf(stderr, "failed\n");
-                return std::make_pair(false, 0);
+                throw ToolException("BMC reported failure");
             }
 
             std::this_thread::sleep_for(pollingSleep);
@@ -170,7 +172,7 @@
                             std::string(b.what()));
     }
 
-    return std::make_pair(false, 0);
+    throw ToolException("Timed out waiting for BMC read ready");
 }
 
 void* memcpyAligned(void* destination, const void* source, std::size_t size)
diff --git a/tools/helper.hpp b/tools/helper.hpp
index 9b987ac..ebe7a1b 100644
--- a/tools/helper.hpp
+++ b/tools/helper.hpp
@@ -14,7 +14,7 @@
  * @param[in] blob - pointer to blob interface implementation object.
  * @return true if the verification was successful.
  */
-bool pollStatus(std::uint16_t session, ipmiblob::BlobInterface* blob);
+void pollStatus(std::uint16_t session, ipmiblob::BlobInterface* blob);
 
 /**
  * Poll an open firmware version blob session and check if it ready to read.
@@ -23,8 +23,7 @@
  * @param[in] blob - pointer to blob interface implementation object
  * @return the polling status and blob buffer size
  */
-std::pair<bool, uint32_t> pollReadReady(std::uint16_t session,
-                                        ipmiblob::BlobInterface* blob);
+uint32_t pollReadReady(std::uint16_t session, ipmiblob::BlobInterface* blob);
 
 /**
  * Aligned memcpy
diff --git a/tools/test/tools_helper_unittest.cpp b/tools/test/tools_helper_unittest.cpp
index 2bee66d..cfe5208 100644
--- a/tools/test/tools_helper_unittest.cpp
+++ b/tools/test/tools_helper_unittest.cpp
@@ -1,5 +1,6 @@
 #include "helper.hpp"
 #include "status.hpp"
+#include "tool_errors.hpp"
 
 #include <blobs-ipmid/blobs.hpp>
 #include <ipmiblob/test/blob_interface_mock.hpp>
@@ -30,7 +31,7 @@
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(verificationResponse));
 
-    EXPECT_TRUE(pollStatus(session, &blobMock));
+    EXPECT_NO_THROW(pollStatus(session, &blobMock));
 }
 
 TEST_F(HelperTest, PollStatusReturnsAfterFailure)
@@ -43,7 +44,7 @@
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(verificationResponse));
 
-    EXPECT_FALSE(pollStatus(session, &blobMock));
+    EXPECT_THROW(pollStatus(session, &blobMock), ToolException);
 }
 
 TEST_F(HelperTest, PollReadReadyReturnsAfterSuccess)
@@ -56,7 +57,7 @@
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(blobResponse));
 
-    EXPECT_TRUE(pollReadReady(session, &blobMock).first);
+    EXPECT_NO_THROW(pollReadReady(session, &blobMock));
 }
 
 TEST_F(HelperTest, PollReadReadyReturnsAfterFailure)
@@ -68,7 +69,7 @@
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(blobResponse));
 
-    EXPECT_FALSE(pollReadReady(session, &blobMock).first);
+    EXPECT_THROW(pollReadReady(session, &blobMock), ToolException);
 }
 
 TEST_F(HelperTest, PollReadReadyReturnsAfterRetrySuccess)
@@ -85,7 +86,7 @@
         .WillOnce(Return(blobResponseRunning))
         .WillOnce(Return(blobResponseReadReady));
 
-    EXPECT_TRUE(pollReadReady(session, &blobMock).first);
+    EXPECT_NO_THROW(pollReadReady(session, &blobMock));
 }
 
 TEST_F(HelperTest, PollReadReadyReturnsAfterRetryFailure)
@@ -102,7 +103,7 @@
         .WillOnce(Return(blobResponseRunning))
         .WillOnce(Return(blobResponseError));
 
-    EXPECT_FALSE(pollReadReady(session, &blobMock).first);
+    EXPECT_THROW(pollReadReady(session, &blobMock), ToolException);
 }
 
 TEST_F(HelperTest, MemcpyAlignedOneByte)
diff --git a/tools/test/tools_updater_unittest.cpp b/tools/test/tools_updater_unittest.cpp
index 60cc077..40b6798 100644
--- a/tools/test/tools_updater_unittest.cpp
+++ b/tools/test/tools_updater_unittest.cpp
@@ -210,9 +210,9 @@
                  ToolException);
 }
 
-TEST_F(UpdateHandlerTest, ReadVersionReturnsEmptyIfPollingFails)
+TEST_F(UpdateHandlerTest, ReadVersionReturnsErrorIfPollingFails)
 {
-    /* It can return an empty result, when polling fails. */
+    /* It can throw an error, when polling fails. */
     EXPECT_CALL(blobMock, openBlob(ipmi_flash::biosVersionBlobId, _))
         .WillOnce(Return(session));
     ipmiblob::StatResponse readVersionResponse = {};
@@ -220,7 +220,8 @@
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(readVersionResponse));
     EXPECT_CALL(blobMock, closeBlob(session)).WillOnce(Return());
-    EXPECT_THAT(updater.readVersion(ipmi_flash::biosVersionBlobId), IsEmpty());
+    EXPECT_THROW(updater.readVersion(ipmi_flash::biosVersionBlobId),
+                 ToolException);
 }
 
 TEST_F(UpdateHandlerTest, ReadVersionCovertsOpenBlobExceptionToToolException)
