diff --git a/tools/bt.cpp b/tools/bt.cpp
index 26c333b..eeac686 100644
--- a/tools/bt.cpp
+++ b/tools/bt.cpp
@@ -49,10 +49,12 @@
     }
     catch (const ipmiblob::BlobException& b)
     {
+        progress->abort();
         sys->close(inputFd);
         return false;
     }
 
+    progress->finish();
     sys->close(inputFd);
     return true;
 }
diff --git a/tools/lpc.cpp b/tools/lpc.cpp
index cd48844..d552b6a 100644
--- a/tools/lpc.cpp
+++ b/tools/lpc.cpp
@@ -117,6 +117,7 @@
     auto readBuffer = std::make_unique<std::uint8_t[]>(host_lpc_buf.length);
     if (nullptr == readBuffer)
     {
+        progress->abort();
         sys->close(inputFd);
         std::fprintf(stderr, "Unable to allocate memory for read buffer.\n");
         return false;
@@ -156,10 +157,12 @@
     }
     catch (const ipmiblob::BlobException& b)
     {
+        progress->abort();
         sys->close(inputFd);
         return false;
     }
 
+    progress->finish();
     sys->close(inputFd);
     return true;
 }
diff --git a/tools/net.cpp b/tools/net.cpp
index 1c7a407..f6a44d8 100644
--- a/tools/net.cpp
+++ b/tools/net.cpp
@@ -91,6 +91,7 @@
         {
             std::fprintf(stderr, "Couldn't parse address %s with port %s: %s\n",
                          host.c_str(), port.c_str(), gai_strerror(ret));
+            progress->abort();
             return false;
         }
 
@@ -111,6 +112,7 @@
         if (addr == nullptr)
         {
             std::fprintf(stderr, "Failed to connect\n");
+            progress->abort();
             return false;
         }
     }
@@ -127,6 +129,7 @@
             {
                 std::fprintf(stderr, "Failed to send data to BMC: %s\n",
                              strerror(errno));
+                progress->abort();
                 return false;
             }
             else if (bytesSent > 0)
@@ -147,9 +150,11 @@
     }
     catch (const ipmiblob::BlobException& b)
     {
+        progress->abort();
         return false;
     }
 
+    progress->finish();
     return true;
 }
 
diff --git a/tools/p2a.cpp b/tools/p2a.cpp
index 090b9bd..b92887f 100644
--- a/tools/p2a.cpp
+++ b/tools/p2a.cpp
@@ -128,6 +128,7 @@
         }
     } while (bytesRead > 0);
 
+    progress->finish();
     return true;
 }
 
diff --git a/tools/progress.cpp b/tools/progress.cpp
index aafb1de..68b31cc 100644
--- a/tools/progress.cpp
+++ b/tools/progress.cpp
@@ -39,4 +39,10 @@
     currentBytes = 0;
 }
 
+void ProgressStdoutIndicator::finish()
+{}
+
+void ProgressStdoutIndicator::abort()
+{}
+
 } // namespace host_tool
diff --git a/tools/progress.hpp b/tools/progress.hpp
index f884d62..2027faf 100644
--- a/tools/progress.hpp
+++ b/tools/progress.hpp
@@ -15,6 +15,8 @@
      */
     virtual void updateProgress(std::int64_t bytes) = 0;
     virtual void start(std::int64_t bytes) = 0;
+    virtual void finish() = 0;
+    virtual void abort() = 0;
 };
 
 /**
@@ -29,6 +31,8 @@
 
     void updateProgress(std::int64_t bytes) override;
     void start(std::int64_t bytes) override;
+    void finish() override;
+    void abort() override;
 
   private:
     std::int64_t totalBytes = 0;
diff --git a/tools/test/progress_mock.hpp b/tools/test/progress_mock.hpp
index 80c0af1..a43d9b3 100644
--- a/tools/test/progress_mock.hpp
+++ b/tools/test/progress_mock.hpp
@@ -12,8 +12,10 @@
 class ProgressMock : public ProgressInterface
 {
   public:
-    MOCK_METHOD1(updateProgress, void(std::int64_t));
-    MOCK_METHOD1(start, void(std::int64_t));
+    MOCK_METHOD(void, updateProgress, (std::int64_t), (override));
+    MOCK_METHOD(void, start, (std::int64_t), (override));
+    MOCK_METHOD(void, finish, (), (override));
+    MOCK_METHOD(void, abort, (), (override));
 };
 
 } // namespace host_tool
