diff --git a/tools/updater.hpp b/tools/updater.hpp
new file mode 100644
index 0000000..561e6c7
--- /dev/null
+++ b/tools/updater.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "interface.hpp"
+#include "updatehelper.hpp"
+
+#include <fstream>
+#include <memory>
+#include <string>
+
+class UploadManager
+{
+  public:
+    UploadManager(std::ifstream&& image, std::ifstream&& hash,
+                  int32_t imageSize, int32_t hashSize,
+                  UpdateHelperInterface* helper, DataInterface* dintf) :
+        imageStream(std::move(image)),
+        hashStream(std::move(hash)), imageSize(imageSize), hashSize(hashSize),
+        helper(helper), dintf(dintf)
+    {
+    }
+
+    /**
+     * Instantiate an UploadManager if the parameters check out.
+     *
+     * @param[in] image - path to the firmware image.
+     * @param[in] hash - path to the image's hash.
+     * @param[in] helper - pointer to an UpdateHelperInterface.
+     * @param[in] dintf - pointer to the data interface to use.
+     * @return UploadManager if valid or nullptr if invalid.
+     */
+    static std::unique_ptr<UploadManager>
+        BuildUploadMgr(const std::string& image, const std::string& hash,
+                       UpdateHelperInterface* helper, DataInterface* dintf);
+
+    /**
+     * Try to update the BMC flash image over IPMI through BT.
+     */
+    void UpdateBMC();
+
+  private:
+    std::ifstream imageStream;
+    std::ifstream hashStream;
+    int32_t imageSize;
+    int32_t hashSize;
+    UpdateHelperInterface* helper;
+    DataInterface* dintf;
+};
+
+// Main entry point for the update command.
+// Update uploads and verifies the image.
+// throws exception on errors.
+void UpdaterMain(const std::string& interface, const std::string& image,
+                 const std::string& signature);
