diff --git a/tools/main.cpp b/tools/main.cpp
index be30230..b85f62b 100644
--- a/tools/main.cpp
+++ b/tools/main.cpp
@@ -18,6 +18,7 @@
 #include "bt.hpp"
 #include "ipmi_handler.hpp"
 #include "lpc.hpp"
+#include "tool_errors.hpp"
 #include "updater.hpp"
 
 /* Use CLI11 argument parser once in openbmc/meta-oe or whatever. */
@@ -151,7 +152,15 @@
         }
 
         /* The parameters are all filled out. */
-        return updaterMain(&blob, handler.get(), imagePath, signaturePath);
+        try
+        {
+            updaterMain(&blob, handler.get(), imagePath, signaturePath);
+        }
+        catch (const ToolException& e)
+        {
+            std::fprintf(stderr, "Exception received: %s\n", e.what());
+            return -1;
+        }
     }
 
     return 0;
diff --git a/tools/tool_errors.hpp b/tools/tool_errors.hpp
new file mode 100644
index 0000000..af99c2c
--- /dev/null
+++ b/tools/tool_errors.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <exception>
+#include <string>
+
+class ToolException : public std::exception
+{
+  public:
+    explicit ToolException(const std::string& message) : message(message){};
+
+    virtual const char* what() const noexcept override
+    {
+        return message.c_str();
+    }
+
+  private:
+    std::string message;
+};
diff --git a/tools/updater.cpp b/tools/updater.cpp
index aa084e1..b79979c 100644
--- a/tools/updater.cpp
+++ b/tools/updater.cpp
@@ -17,12 +17,13 @@
 #include "updater.hpp"
 
 #include "blob_errors.hpp"
+#include "tool_errors.hpp"
 
 #include <algorithm>
 #include <memory>
 
-int updaterMain(BlobInterface* blob, DataInterface* handler,
-                const std::string& imagePath, const std::string& signaturePath)
+void updaterMain(BlobInterface* blob, DataInterface* handler,
+                 const std::string& imagePath, const std::string& signaturePath)
 {
     /* TODO(venture): Add optional parameter to specify the flash type, default
      * to legacy for now.
@@ -38,8 +39,7 @@
     auto blobInst = std::find(blobs.begin(), blobs.end(), goalFirmware);
     if (blobInst == blobs.end())
     {
-        std::fprintf(stderr, "firmware goal not found!\n");
-        return -1; /* throw custom exception. */
+        throw ToolException(goalFirmware + " not found");
     }
 
     /* Call stat on /flash/image (or /flash/tarball) and check if data interface
@@ -48,8 +48,7 @@
     auto stat = blob->getStat(goalFirmware);
     if ((stat.blob_state & handler->supportedType()) == 0)
     {
-        std::fprintf(stderr, "data interface selected not supported.\n");
-        return -1; /* throw custom exception. */
+        throw ToolException("data interface selected not supported.");
     }
 
     /* Yay, our data handler is supported. */
@@ -60,8 +59,8 @@
     }
     catch (const BlobException& b)
     {
-        std::fprintf(stderr, "blob exception received: %s\n", b.what());
-        return -1;
+        throw ToolException("blob exception received: " +
+                            std::string(b.what()));
     }
 
     std::fprintf(stderr, "using session: %d\n", session);
@@ -69,14 +68,12 @@
     /* Send over the firmware image. */
     if (!handler->sendContents(imagePath, session))
     {
-        std::fprintf(stderr, "Failed to send contents to %s\n",
-                     imagePath.c_str());
-        return -1;
+        throw ToolException("Failed to send contents of " + imagePath);
     }
 
     /* Send over the hash contents. */
     /* Trigger the verification. */
     /* Check the verification. */
 
-    return 0;
+    return;
 }
diff --git a/tools/updater.hpp b/tools/updater.hpp
index 331b3a2..886ff67 100644
--- a/tools/updater.hpp
+++ b/tools/updater.hpp
@@ -12,7 +12,8 @@
  * @param[in] handler - pointer to the data interface implementation object.
  * @param[in] imagePath - the path to the image file.
  * @param[in] signaturePath - the path to the signature file.
- * @return non-zero on failure.
+ * @throws ToolException on failures.
  */
-int updaterMain(BlobInterface* blob, DataInterface* handler,
-                const std::string& imagePath, const std::string& signaturePath);
+void updaterMain(BlobInterface* blob, DataInterface* handler,
+                 const std::string& imagePath,
+                 const std::string& signaturePath);
