diff --git a/data_handler.hpp b/data_handler.hpp
index 75f7660..bf17934 100644
--- a/data_handler.hpp
+++ b/data_handler.hpp
@@ -3,7 +3,7 @@
 #include <cstdint>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /**
@@ -60,4 +60,4 @@
     DataInterface* handler;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/file_handler.cpp b/file_handler.cpp
index 9fd5ea8..e81730d 100644
--- a/file_handler.cpp
+++ b/file_handler.cpp
@@ -22,7 +22,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 namespace fs = std::filesystem;
 
@@ -103,4 +103,4 @@
     return 0;
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/file_handler.hpp b/file_handler.hpp
index 64be8bf..9cb2819 100644
--- a/file_handler.hpp
+++ b/file_handler.hpp
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class FileHandler : public ImageHandlerInterface
@@ -41,4 +41,4 @@
     std::string filename;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index 5f9a089..fc6f01a 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -31,10 +31,10 @@
 
 using namespace phosphor::logging;
 
-namespace blobs
+namespace ipmi_flash
 {
 
-std::unique_ptr<GenericBlobInterface>
+std::unique_ptr<blobs::GenericBlobInterface>
     FirmwareBlobHandler::CreateFirmwareBlobHandler(
         const std::vector<HandlerPack>& firmwares,
         const std::vector<DataHandlerPack>& transports,
@@ -151,7 +151,8 @@
  * of the data cached, and any additional pertinent information.  The
  * blob_state on the active files will return the state of the update.
  */
-bool FirmwareBlobHandler::stat(const std::string& path, struct BlobMeta* meta)
+bool FirmwareBlobHandler::stat(const std::string& path,
+                               struct blobs::BlobMeta* meta)
 {
     /* We know we support this path because canHandle is called ahead */
     if (path == verifyBlobId)
@@ -192,7 +193,7 @@
  *
  * TODO: combine the logic for stat and sessionstat().
  */
-bool FirmwareBlobHandler::stat(uint16_t session, struct BlobMeta* meta)
+bool FirmwareBlobHandler::stat(uint16_t session, struct blobs::BlobMeta* meta)
 {
     auto item = lookup.find(session);
     if (item == lookup.end())
@@ -225,15 +226,15 @@
             value == VerifyCheckResponses::failed)
         {
             state = UpdateState::verificationCompleted;
-            item->second->flags &= ~StateFlags::committing;
+            item->second->flags &= ~blobs::StateFlags::committing;
 
             if (value == VerifyCheckResponses::success)
             {
-                item->second->flags |= StateFlags::committed;
+                item->second->flags |= blobs::StateFlags::committed;
             }
             else
             {
-                item->second->flags |= StateFlags::commit_error;
+                item->second->flags |= blobs::StateFlags::commit_error;
             }
         }
     }
@@ -280,7 +281,7 @@
     /* Check that they've opened for writing - read back not currently
      * supported.
      */
-    if ((flags & OpenFlags::write) == 0)
+    if ((flags & blobs::OpenFlags::write) == 0)
     {
         return false;
     }
@@ -563,7 +564,7 @@
     }
 
     /* Set state to committing. */
-    item->second->flags |= StateFlags::committing;
+    item->second->flags |= blobs::StateFlags::committing;
 
     return triggerVerification();
 }
@@ -666,4 +667,4 @@
     return result;
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/firmware_handler.hpp b/firmware_handler.hpp
index 88cb957..e997c71 100644
--- a/firmware_handler.hpp
+++ b/firmware_handler.hpp
@@ -14,7 +14,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /**
@@ -69,7 +69,7 @@
 /**
  * Register only one firmware blob handler that will manage all sessions.
  */
-class FirmwareBlobHandler : public GenericBlobInterface
+class FirmwareBlobHandler : public blobs::GenericBlobInterface
 {
   public:
     enum UpdateFlags : std::uint16_t
@@ -141,7 +141,7 @@
     bool canHandleBlob(const std::string& path) override;
     std::vector<std::string> getBlobIds() override;
     bool deleteBlob(const std::string& path) override;
-    bool stat(const std::string& path, struct BlobMeta* meta) override;
+    bool stat(const std::string& path, struct blobs::BlobMeta* meta) override;
     bool open(uint16_t session, uint16_t flags,
               const std::string& path) override;
     std::vector<uint8_t> read(uint16_t session, uint32_t offset,
@@ -152,7 +152,7 @@
                    const std::vector<uint8_t>& data) override;
     bool commit(uint16_t session, const std::vector<uint8_t>& data) override;
     bool close(uint16_t session) override;
-    bool stat(uint16_t session, struct BlobMeta* meta) override;
+    bool stat(uint16_t session, struct blobs::BlobMeta* meta) override;
     bool expire(uint16_t session) override;
 
     bool triggerVerification();
@@ -197,4 +197,4 @@
     bool fileOpen = false;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/image_handler.hpp b/image_handler.hpp
index 0be4590..b7d682b 100644
--- a/image_handler.hpp
+++ b/image_handler.hpp
@@ -6,7 +6,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /**
@@ -54,4 +54,4 @@
     ImageHandlerInterface* handler;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_aspeed.cpp b/lpc_aspeed.cpp
index 73ce315..184f18a 100644
--- a/lpc_aspeed.cpp
+++ b/lpc_aspeed.cpp
@@ -28,7 +28,7 @@
 #include <string>
 #include <utility>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 const std::string LpcMapperAspeed::lpcControlPath = "/dev/aspeed-lpc-ctrl";
@@ -157,4 +157,4 @@
     return std::vector<std::uint8_t>(mappedRegion, mappedRegion + length);
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_aspeed.hpp b/lpc_aspeed.hpp
index 8ffaa8f..9300efd 100644
--- a/lpc_aspeed.hpp
+++ b/lpc_aspeed.hpp
@@ -9,7 +9,7 @@
 #include <utility>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class LpcMapperAspeed : public HardwareMapperInterface
@@ -54,4 +54,4 @@
     const internal::Sys* sys;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_handler.cpp b/lpc_handler.cpp
index 17aa993..7f70750 100644
--- a/lpc_handler.cpp
+++ b/lpc_handler.cpp
@@ -20,7 +20,7 @@
 #include <cstring>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 bool LpcDataHandler::open()
@@ -94,4 +94,4 @@
     return {};
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_handler.hpp b/lpc_handler.hpp
index 95917c6..cbdf8ef 100644
--- a/lpc_handler.hpp
+++ b/lpc_handler.hpp
@@ -7,7 +7,7 @@
 #include <memory>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 struct LpcRegion
@@ -53,4 +53,4 @@
     bool initialized;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_nuvoton.cpp b/lpc_nuvoton.cpp
index b4e5477..416cef6 100644
--- a/lpc_nuvoton.cpp
+++ b/lpc_nuvoton.cpp
@@ -28,7 +28,7 @@
 #include <utility>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 using std::uint16_t;
 using std::uint32_t;
@@ -141,4 +141,4 @@
     return {};
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/lpc_nuvoton.hpp b/lpc_nuvoton.hpp
index b72a673..eabcd09 100644
--- a/lpc_nuvoton.hpp
+++ b/lpc_nuvoton.hpp
@@ -8,7 +8,7 @@
 #include <utility>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class LpcMapperNuvoton : public HardwareMapperInterface
@@ -41,4 +41,4 @@
     const internal::Sys* sys;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/main.cpp b/main.cpp
index fc690b8..00ced2a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -32,7 +32,7 @@
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
 
-namespace blobs
+namespace ipmi_flash
 {
 namespace
 {
@@ -89,7 +89,7 @@
 
 } // namespace
 
-} // namespace blobs
+} // namespace ipmi_flash
 
 extern "C" {
 std::unique_ptr<blobs::GenericBlobInterface> createHandler();
@@ -99,9 +99,9 @@
 {
     using namespace phosphor::logging;
 
-    auto handler = blobs::FirmwareBlobHandler::CreateFirmwareBlobHandler(
-        blobs::supportedFirmware, blobs::supportedTransports,
-        blobs::SystemdVerification::CreateVerification(
+    auto handler = ipmi_flash::FirmwareBlobHandler::CreateFirmwareBlobHandler(
+        ipmi_flash::supportedFirmware, ipmi_flash::supportedTransports,
+        ipmi_flash::SystemdVerification::CreateVerification(
             sdbusplus::bus::new_default(), VERIFY_STATUS_FILENAME,
             VERIFY_DBUS_SERVICE));
 
diff --git a/pci_handler.cpp b/pci_handler.cpp
index 56016c7..ecdafd1 100644
--- a/pci_handler.cpp
+++ b/pci_handler.cpp
@@ -24,7 +24,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 const std::string PciDataHandler::p2aControlPath = "/dev/aspeed-p2a-ctrl";
@@ -123,4 +123,4 @@
     return bytes;
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/pci_handler.hpp b/pci_handler.hpp
index f3ae798..1cafc32 100644
--- a/pci_handler.hpp
+++ b/pci_handler.hpp
@@ -7,7 +7,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /** P2A configuration response. */
@@ -45,4 +45,4 @@
     static const std::string p2aControlPath;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/status.hpp b/status.hpp
index 7ef0ce2..c5ea42a 100644
--- a/status.hpp
+++ b/status.hpp
@@ -2,7 +2,7 @@
 
 #include <cstdint>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 enum class VerifyCheckResponses : std::uint8_t
diff --git a/test/data_interface_mock.hpp b/test/data_interface_mock.hpp
index 3e8f24a..3189e5b 100644
--- a/test/data_interface_mock.hpp
+++ b/test/data_interface_mock.hpp
@@ -15,7 +15,7 @@
 
     MOCK_METHOD2(sendContents, bool(const std::string&, std::uint16_t));
     MOCK_CONST_METHOD0(supportedType,
-                       blobs::FirmwareBlobHandler::UpdateFlags());
+                       ipmi_flash::FirmwareBlobHandler::UpdateFlags());
 };
 
 } // namespace host_tool
diff --git a/test/data_mock.hpp b/test/data_mock.hpp
index ae8c9c7..c8109ad 100644
--- a/test/data_mock.hpp
+++ b/test/data_mock.hpp
@@ -4,7 +4,7 @@
 
 #include <gmock/gmock.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class DataHandlerMock : public DataInterface
@@ -19,4 +19,4 @@
     MOCK_METHOD0(readMeta, std::vector<std::uint8_t>());
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/file_handler_unittest.cpp b/test/file_handler_unittest.cpp
index 26a490d..ab12125 100644
--- a/test/file_handler_unittest.cpp
+++ b/test/file_handler_unittest.cpp
@@ -7,7 +7,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 static constexpr auto TESTPATH = "test.output";
@@ -55,4 +55,4 @@
     /* annoyingly the memcmp was failing... but it's the same data. */
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_canhandle_unittest.cpp b/test/firmware_canhandle_unittest.cpp
index 380df45..02549fe 100644
--- a/test/firmware_canhandle_unittest.cpp
+++ b/test/firmware_canhandle_unittest.cpp
@@ -8,7 +8,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 TEST(FirmwareHandlerCanHandleTest, VerifyItemsInListAreOk)
 {
@@ -40,4 +40,4 @@
         EXPECT_EQ(item.expected, handler->canHandleBlob(item.name));
     }
 }
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_close_unittest.cpp b/test/firmware_close_unittest.cpp
index 2b40d6d..6242d54 100644
--- a/test/firmware_close_unittest.cpp
+++ b/test/firmware_close_unittest.cpp
@@ -11,7 +11,7 @@
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -30,7 +30,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -57,7 +57,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -71,4 +71,4 @@
     EXPECT_TRUE(handler->close(0));
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_commit_unittest.cpp b/test/firmware_commit_unittest.cpp
index b3d023f..5f2f82e 100644
--- a/test/firmware_commit_unittest.cpp
+++ b/test/firmware_commit_unittest.cpp
@@ -9,7 +9,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::_;
 using ::testing::IsNull;
@@ -54,7 +54,8 @@
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     EXPECT_FALSE(handler->commit(0, {}));
 }
@@ -75,7 +76,7 @@
     EXPECT_CALL(imageMock1, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 
     EXPECT_FALSE(handler->commit(0, {}));
@@ -92,7 +93,7 @@
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
         blobs, data, std::move(verifyMock));
 
-    EXPECT_TRUE(handler->open(0, OpenFlags::write, verifyBlobId));
+    EXPECT_TRUE(handler->open(0, blobs::OpenFlags::write, verifyBlobId));
 
     EXPECT_CALL(*verifyMockPtr, triggerVerification())
         .WillRepeatedly(Return(true));
@@ -111,7 +112,7 @@
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
         blobs, data, std::move(verifyMock));
 
-    EXPECT_TRUE(handler->open(0, OpenFlags::write, verifyBlobId));
+    EXPECT_TRUE(handler->open(0, blobs::OpenFlags::write, verifyBlobId));
 
     EXPECT_CALL(*verifyMockPtr, triggerVerification())
         .WillRepeatedly(Return(true));
@@ -120,4 +121,4 @@
     EXPECT_TRUE(handler->commit(0, {}));
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_createhandler_unittest.cpp b/test/firmware_createhandler_unittest.cpp
index 4821ffa..10e8410 100644
--- a/test/firmware_createhandler_unittest.cpp
+++ b/test/firmware_createhandler_unittest.cpp
@@ -6,7 +6,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Return;
 using ::testing::StrEq;
@@ -37,4 +37,4 @@
     EXPECT_FALSE(handler == nullptr);
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_delete_unittest.cpp b/test/firmware_delete_unittest.cpp
index de67a15..755dc30 100644
--- a/test/firmware_delete_unittest.cpp
+++ b/test/firmware_delete_unittest.cpp
@@ -9,7 +9,7 @@
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -36,7 +36,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -63,4 +63,4 @@
                             activeHashBlobId));
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_handler_unittest.cpp b/test/firmware_handler_unittest.cpp
index 09cbf9e..d3a8c13 100644
--- a/test/firmware_handler_unittest.cpp
+++ b/test/firmware_handler_unittest.cpp
@@ -8,7 +8,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 TEST(FirmwareHandlerTest, CreateEmptyListVerifyFails)
@@ -60,4 +60,4 @@
                      std::count(result.begin(), result.end(), hashBlobId) +
                      std::count(result.begin(), result.end(), verifyBlobId));
 }
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_open_unittest.cpp b/test/firmware_open_unittest.cpp
index c8c93c0..4da41a1 100644
--- a/test/firmware_open_unittest.cpp
+++ b/test/firmware_open_unittest.cpp
@@ -11,7 +11,7 @@
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -32,7 +32,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     /* The active image blob_id was added. */
     auto currentBlobs = handler->getBlobIds();
@@ -47,7 +48,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -66,7 +67,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -82,7 +83,7 @@
     EXPECT_CALL(dataMock, open()).WillOnce(Return(false));
 
     EXPECT_FALSE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
         hashBlobId));
 
     /* The active hash blob_id was added. */
@@ -99,7 +100,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     /* The active image blob_id was added. */
     auto currentBlobs = handler->getBlobIds();
@@ -109,7 +111,7 @@
 
     /* Open the hash file (since we opened an image file). */
     EXPECT_FALSE(handler->open(
-        1, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        1, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 
     EXPECT_TRUE(handler->close(0));
@@ -117,7 +119,7 @@
     EXPECT_CALL(imageMock, open(StrEq(hashBlobId))).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        1, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        1, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         hashBlobId));
 }
 
@@ -131,7 +133,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     /* The active image blob_id was added. */
     auto currentBlobs = handler->getBlobIds();
@@ -145,7 +148,7 @@
     EXPECT_TRUE(handler->close(0));
 
     EXPECT_FALSE(handler->open(
-        1, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        1, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
         activeImageBlobId));
 }
 
@@ -157,7 +160,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(false));
 
     EXPECT_FALSE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     /* Verify blob_id list doesn't grow. */
     auto currentBlobs = handler->getBlobIds();
@@ -182,7 +186,8 @@
 {
     /* The client sends a request with an invalid image blob_id. */
     EXPECT_FALSE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "bcdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "bcdf"));
 }
 
 /* TODO: The client sends a request during verification. */
@@ -192,4 +197,4 @@
 /* TODO: The client sends a request to open active image. */
 /* TODO: The client sends a request to open active hash. */
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_sessionstat_unittest.cpp b/test/firmware_sessionstat_unittest.cpp
index d3d35f9..98fb6da 100644
--- a/test/firmware_sessionstat_unittest.cpp
+++ b/test/firmware_sessionstat_unittest.cpp
@@ -9,7 +9,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -30,15 +30,16 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     int size = 512;
     EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size));
 
-    struct BlobMeta meta;
+    struct blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat(0, &meta));
     EXPECT_EQ(meta.blobState,
-              OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi);
+              blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi);
     EXPECT_EQ(meta.size, size);
     EXPECT_EQ(meta.metadata.size(), 0);
 }
@@ -53,21 +54,22 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        "asdf"));
 
     int size = 512;
     EXPECT_CALL(imageMock, getSize()).WillOnce(Return(size));
     std::vector<std::uint8_t> mBytes = {0x01, 0x02};
     EXPECT_CALL(dataMock, readMeta()).WillOnce(Return(mBytes));
 
-    struct BlobMeta meta;
+    struct blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat(0, &meta));
     EXPECT_EQ(meta.blobState,
-              OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc);
+              blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc);
     EXPECT_EQ(meta.size, size);
     EXPECT_EQ(meta.metadata.size(), mBytes.size());
     EXPECT_EQ(meta.metadata[0], mBytes[0]);
     EXPECT_EQ(meta.metadata[1], mBytes[1]);
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_stat_unittest.cpp b/test/firmware_stat_unittest.cpp
index becb3f1..beab6f9 100644
--- a/test/firmware_stat_unittest.cpp
+++ b/test/firmware_stat_unittest.cpp
@@ -7,7 +7,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 TEST(FirmwareHandlerStatTest, StatOnInactiveBlobIDReturnsTransport)
 {
@@ -31,9 +31,9 @@
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(
         blobs, data, CreateVerifyMock());
 
-    struct BlobMeta meta;
+    struct blobs::BlobMeta meta;
     EXPECT_TRUE(handler->stat("asdf", &meta));
     EXPECT_EQ(FirmwareBlobHandler::UpdateFlags::ipmi, meta.blobState);
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_unittest.hpp b/test/firmware_unittest.hpp
index 0eea768..da84c1b 100644
--- a/test/firmware_unittest.hpp
+++ b/test/firmware_unittest.hpp
@@ -11,7 +11,7 @@
 #include <gmock/gmock.h>
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class IpmiOnlyFirmwareTest : public ::testing::Test
@@ -21,7 +21,7 @@
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data = {
         {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr}};
-    std::unique_ptr<GenericBlobInterface> handler;
+    std::unique_ptr<blobs::GenericBlobInterface> handler;
 
     void SetUp() override
     {
@@ -41,7 +41,7 @@
     ImageHandlerMock imageMock;
     std::vector<HandlerPack> blobs;
     std::vector<DataHandlerPack> data;
-    std::unique_ptr<GenericBlobInterface> handler;
+    std::unique_ptr<blobs::GenericBlobInterface> handler;
 
     void SetUp() override
     {
@@ -58,4 +58,4 @@
     }
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_write_unittest.cpp b/test/firmware_write_unittest.cpp
index 77f6326..f4f78fc 100644
--- a/test/firmware_write_unittest.cpp
+++ b/test/firmware_write_unittest.cpp
@@ -11,7 +11,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -30,7 +30,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     std::vector<std::uint8_t> bytes = {0xaa, 0x55};
 
@@ -45,7 +46,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        "asdf"));
 
     struct ExtChunkHdr request;
     request.length = 4; /* number of bytes to read. */
@@ -68,7 +70,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        "asdf"));
 
     struct ExtChunkHdr request;
     request.length = 4; /* number of bytes to read. */
@@ -82,4 +85,4 @@
     EXPECT_FALSE(handler->write(0, 0, ipmiRequest));
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/firmware_writemeta_unittest.cpp b/test/firmware_writemeta_unittest.cpp
index 0ca5c62..e7d8463 100644
--- a/test/firmware_writemeta_unittest.cpp
+++ b/test/firmware_writemeta_unittest.cpp
@@ -10,7 +10,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 using ::testing::Eq;
 using ::testing::Return;
@@ -24,7 +24,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::ipmi,
+        "asdf"));
 
     std::vector<std::uint8_t> bytes = {0xaa, 0x55};
 
@@ -37,7 +38,8 @@
     EXPECT_CALL(imageMock, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
-        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc, "asdf"));
+        0, blobs::OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        "asdf"));
 
     std::vector<std::uint8_t> bytes = {0x01, 0x02, 0x03, 0x04};
 
@@ -45,4 +47,4 @@
     EXPECT_TRUE(handler->writeMeta(0, 0, bytes));
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/image_mock.hpp b/test/image_mock.hpp
index c831c45..fb10c39 100644
--- a/test/image_mock.hpp
+++ b/test/image_mock.hpp
@@ -4,7 +4,7 @@
 
 #include <gmock/gmock.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class ImageHandlerMock : public ImageHandlerInterface
@@ -18,4 +18,4 @@
     MOCK_METHOD0(getSize, int());
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/tools_updater_unittest.cpp b/test/tools_updater_unittest.cpp
index 080671f..95a5abc 100644
--- a/test/tools_updater_unittest.cpp
+++ b/test/tools_updater_unittest.cpp
@@ -25,22 +25,22 @@
     ipmiblob::BlobInterfaceMock blobMock;
 
     ipmiblob::StatResponse statObj;
-    statObj.blob_state = blobs::FirmwareBlobHandler::UpdateFlags::ipmi |
-                         blobs::FirmwareBlobHandler::UpdateFlags::lpc;
+    statObj.blob_state = ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi |
+                         ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc;
     statObj.size = 0;
 
     EXPECT_CALL(blobMock, getBlobList())
         .WillOnce(
-            Return(std::vector<std::string>({blobs::staticLayoutBlobId})));
-    EXPECT_CALL(blobMock,
-                getStat(TypedEq<const std::string&>(blobs::staticLayoutBlobId)))
+            Return(std::vector<std::string>({ipmi_flash::staticLayoutBlobId})));
+    EXPECT_CALL(blobMock, getStat(TypedEq<const std::string&>(
+                              ipmi_flash::staticLayoutBlobId)))
         .WillOnce(Return(statObj));
 
     EXPECT_CALL(handlerMock, supportedType())
-        .WillOnce(Return(blobs::FirmwareBlobHandler::UpdateFlags::lpc));
+        .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc));
 
     UpdateHandler updater(&blobMock, &handlerMock);
-    EXPECT_TRUE(updater.checkAvailable(blobs::staticLayoutBlobId));
+    EXPECT_TRUE(updater.checkAvailable(ipmi_flash::staticLayoutBlobId));
 }
 
 TEST(UpdaterTest, SendFileSuccess)
@@ -53,15 +53,16 @@
 
     std::uint16_t supported =
         static_cast<std::uint16_t>(
-            blobs::FirmwareBlobHandler::UpdateFlags::lpc) |
+            ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc) |
         static_cast<std::uint16_t>(blobs::OpenFlags::write);
     std::uint16_t session = 0xbeef;
 
     EXPECT_CALL(handlerMock, supportedType())
-        .WillOnce(Return(blobs::FirmwareBlobHandler::UpdateFlags::lpc));
+        .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc));
 
-    EXPECT_CALL(blobMock,
-                openBlob(StrEq(blobs::staticLayoutBlobId.c_str()), supported))
+    EXPECT_CALL(
+        blobMock,
+        openBlob(StrEq(ipmi_flash::staticLayoutBlobId.c_str()), supported))
         .WillOnce(Return(session));
 
     EXPECT_CALL(handlerMock,
@@ -71,7 +72,7 @@
     EXPECT_CALL(blobMock, closeBlob(session)).Times(1);
 
     UpdateHandler updater(&blobMock, &handlerMock);
-    updater.sendFile(blobs::staticLayoutBlobId, firmwareImage);
+    updater.sendFile(ipmi_flash::staticLayoutBlobId, firmwareImage);
 }
 
 #if 0 /* TODO: fix this up. */
@@ -86,26 +87,26 @@
     std::string firmwareImage = "image.bin";
     std::string signatureFile = "image.sig";
 
-    std::vector<std::string> blobList = {blobs::staticLayoutBlobId};
+    std::vector<std::string> blobList = {ipmi_flash::staticLayoutBlobId};
     ipmiblob::StatResponse statObj;
-    statObj.blob_state = blobs::FirmwareBlobHandler::UpdateFlags::ipmi |
-                         blobs::FirmwareBlobHandler::UpdateFlags::lpc;
+    statObj.blob_state = ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi |
+                         ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc;
     statObj.size = 0;
     std::uint16_t supported =
         static_cast<std::uint16_t>(
-            blobs::FirmwareBlobHandler::UpdateFlags::lpc) |
+            ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc) |
         static_cast<std::uint16_t>(blobs::OpenFlags::write);
     std::uint16_t session = 0xbeef;
 
     EXPECT_CALL(blobMock, getBlobList()).WillOnce(Return(blobList));
 
-    EXPECT_CALL(blobMock, getStat(TypedEq<const std::string&>(blobs::staticLayoutBlobId)))
+    EXPECT_CALL(blobMock, getStat(TypedEq<const std::string&>(ipmi_flash::staticLayoutBlobId)))
         .WillOnce(Return(statObj));
 
     EXPECT_CALL(handlerMock, supportedType())
-        .WillOnce(Return(blobs::FirmwareBlobHandler::UpdateFlags::lpc));
+        .WillOnce(Return(ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc));
 
-    EXPECT_CALL(blobMock, openBlob(StrEq(blobs::staticLayoutBlobId.c_str()), Eq(supported)))
+    EXPECT_CALL(blobMock, openBlob(StrEq(ipmi_flash::staticLayoutBlobId.c_str()), Eq(supported)))
         .WillOnce(Return(session));
 
     EXPECT_CALL(handlerMock,
@@ -129,7 +130,7 @@
     verificationResponse.blob_state = supported | blobs::StateFlags::committing;
     verificationResponse.size = 0;
     verificationResponse.metadata.push_back(static_cast<std::uint8_t>(
-        blobs::FirmwareBlobHandler::VerifyCheckResponses::success));
+        ipmi_flash::FirmwareBlobHandler::VerifyCheckResponses::success));
 
     EXPECT_CALL(blobMock, getStat(TypedEq<std::uint16_t>(session)))
         .WillOnce(Return(verificationResponse));
diff --git a/test/verification_mock.hpp b/test/verification_mock.hpp
index e1021c8..e027f00 100644
--- a/test/verification_mock.hpp
+++ b/test/verification_mock.hpp
@@ -8,7 +8,7 @@
 
 #include <gtest/gtest.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class VerificationMock : public VerificationInterface
@@ -24,4 +24,4 @@
     return std::make_unique<VerificationMock>();
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/test/window_mapper_mock.hpp b/test/window_mapper_mock.hpp
index c8a75c6..8fc41fa 100644
--- a/test/window_mapper_mock.hpp
+++ b/test/window_mapper_mock.hpp
@@ -8,7 +8,7 @@
 
 #include <gmock/gmock.h>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class HardwareInterfaceMock : public HardwareMapperInterface
@@ -23,4 +23,4 @@
     MOCK_METHOD1(copyFrom, std::vector<std::uint8_t>(std::uint32_t));
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/tools/bt.hpp b/tools/bt.hpp
index 811c81d..9caac5d 100644
--- a/tools/bt.hpp
+++ b/tools/bt.hpp
@@ -17,9 +17,9 @@
         sys(sys){};
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    blobs::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
     {
-        return blobs::FirmwareBlobHandler::UpdateFlags::ipmi;
+        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::ipmi;
     }
 
   private:
diff --git a/tools/interface.hpp b/tools/interface.hpp
index 4a72313..ae341ec 100644
--- a/tools/interface.hpp
+++ b/tools/interface.hpp
@@ -30,7 +30,8 @@
      *
      * @return the enum value corresponding to the supported type.
      */
-    virtual blobs::FirmwareBlobHandler::UpdateFlags supportedType() const = 0;
+    virtual ipmi_flash::FirmwareBlobHandler::UpdateFlags
+        supportedType() const = 0;
 };
 
 } // namespace host_tool
diff --git a/tools/lpc.hpp b/tools/lpc.hpp
index fc8ca4b..bdcf7be 100644
--- a/tools/lpc.hpp
+++ b/tools/lpc.hpp
@@ -27,9 +27,9 @@
         io(io), sys(sys){};
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    blobs::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
     {
-        return blobs::FirmwareBlobHandler::UpdateFlags::lpc;
+        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::lpc;
     }
 
   private:
diff --git a/tools/p2a.cpp b/tools/p2a.cpp
index 2a48285..2593503 100644
--- a/tools/p2a.cpp
+++ b/tools/p2a.cpp
@@ -81,14 +81,14 @@
 
     /* Read the configuration via blobs metadata (stat). */
     ipmiblob::StatResponse stat = blob->getStat(session);
-    if (stat.metadata.size() != sizeof(blobs::PciConfigResponse))
+    if (stat.metadata.size() != sizeof(ipmi_flash::PciConfigResponse))
     {
         std::fprintf(stderr, "Didn't receive expected size of metadata for "
                              "PCI Configuration response\n");
         return false;
     }
 
-    blobs::PciConfigResponse pciResp;
+    ipmi_flash::PciConfigResponse pciResp;
     std::memcpy(&pciResp, stat.metadata.data(), sizeof(pciResp));
     std::fprintf(stderr, "Received address: 0x%x\n", pciResp.address);
 
@@ -140,7 +140,7 @@
                 /* Ok, so the data is staged, now send the blob write with the
                  * details.
                  */
-                struct blobs::ExtChunkHdr chunk;
+                struct ipmi_flash::ExtChunkHdr chunk;
                 chunk.length = bytesRead;
                 std::vector<std::uint8_t> chunkBytes(sizeof(chunk));
                 std::memcpy(chunkBytes.data(), &chunk, sizeof(chunk));
diff --git a/tools/p2a.hpp b/tools/p2a.hpp
index eda8f61..920422f 100644
--- a/tools/p2a.hpp
+++ b/tools/p2a.hpp
@@ -30,9 +30,9 @@
     }
 
     bool sendContents(const std::string& input, std::uint16_t session) override;
-    blobs::FirmwareBlobHandler::UpdateFlags supportedType() const override
+    ipmi_flash::FirmwareBlobHandler::UpdateFlags supportedType() const override
     {
-        return blobs::FirmwareBlobHandler::UpdateFlags::p2a;
+        return ipmi_flash::FirmwareBlobHandler::UpdateFlags::p2a;
     }
 
   private:
diff --git a/tools/updater.cpp b/tools/updater.cpp
index d596483..afef26e 100644
--- a/tools/updater.cpp
+++ b/tools/updater.cpp
@@ -117,7 +117,8 @@
     static constexpr int commandAttempts = 20;
     int attempts = 0;
     bool exitLoop = false;
-    blobs::VerifyCheckResponses result = blobs::VerifyCheckResponses::other;
+    ipmi_flash::VerifyCheckResponses result =
+        ipmi_flash::VerifyCheckResponses::other;
 
     try
     {
@@ -136,21 +137,22 @@
                 std::fprintf(stderr, "Received invalid metadata response!!!\n");
             }
 
-            result = static_cast<blobs::VerifyCheckResponses>(resp.metadata[0]);
+            result =
+                static_cast<ipmi_flash::VerifyCheckResponses>(resp.metadata[0]);
 
             switch (result)
             {
-                case blobs::VerifyCheckResponses::failed:
+                case ipmi_flash::VerifyCheckResponses::failed:
                     std::fprintf(stderr, "failed\n");
                     exitLoop = true;
                     break;
-                case blobs::VerifyCheckResponses::other:
+                case ipmi_flash::VerifyCheckResponses::other:
                     std::fprintf(stderr, "other\n");
                     break;
-                case blobs::VerifyCheckResponses::running:
+                case ipmi_flash::VerifyCheckResponses::running:
                     std::fprintf(stderr, "running\n");
                     break;
-                case blobs::VerifyCheckResponses::success:
+                case ipmi_flash::VerifyCheckResponses::success:
                     std::fprintf(stderr, "success\n");
                     exitLoop = true;
                     break;
@@ -180,7 +182,7 @@
      * which exceptions from the lower layers allow one to try and delete the
      * blobs to rollback the state and progress.
      */
-    return (result == blobs::VerifyCheckResponses::success);
+    return (result == ipmi_flash::VerifyCheckResponses::success);
 }
 
 bool UpdateHandler::verifyFile(const std::string& target)
@@ -237,7 +239,8 @@
     /* TODO(venture): Add optional parameter to specify the flash type, default
      * to legacy for now.
      */
-    bool goalSupported = updater->checkAvailable(blobs::staticLayoutBlobId);
+    bool goalSupported =
+        updater->checkAvailable(ipmi_flash::staticLayoutBlobId);
     if (!goalSupported)
     {
         throw ToolException("Goal firmware or interface not supported");
@@ -247,15 +250,15 @@
 
     /* Send over the firmware image. */
     std::fprintf(stderr, "Sending over the firmware image.\n");
-    updater->sendFile(blobs::staticLayoutBlobId, imagePath);
+    updater->sendFile(ipmi_flash::staticLayoutBlobId, imagePath);
 
     /* Send over the hash contents. */
     std::fprintf(stderr, "Sending over the hash file.\n");
-    updater->sendFile(blobs::hashBlobId, signaturePath);
+    updater->sendFile(ipmi_flash::hashBlobId, signaturePath);
 
     /* Trigger the verification by opening the verify file. */
     std::fprintf(stderr, "Opening the verification file\n");
-    if (updater->verifyFile(blobs::verifyBlobId))
+    if (updater->verifyFile(ipmi_flash::verifyBlobId))
     {
         std::fprintf(stderr, "succeeded\n");
     }
diff --git a/util.cpp b/util.cpp
index 99c47d5..05780b8 100644
--- a/util.cpp
+++ b/util.cpp
@@ -16,7 +16,7 @@
 
 #include "util.hpp"
 
-namespace blobs
+namespace ipmi_flash
 {
 
 const std::string verifyBlobId = "/flash/verify";
@@ -26,4 +26,4 @@
 const std::string staticLayoutBlobId = "/flash/image";
 const std::string ubiTarballBlobId = "/flash/tarball";
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/util.hpp b/util.hpp
index 8634bcd..f304b1c 100644
--- a/util.hpp
+++ b/util.hpp
@@ -2,7 +2,7 @@
 
 #include <string>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 extern const std::string verifyBlobId;
@@ -12,4 +12,4 @@
 extern const std::string staticLayoutBlobId;
 extern const std::string ubiTarballBlobId;
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/verify.hpp b/verify.hpp
index 3a77338..59407c6 100644
--- a/verify.hpp
+++ b/verify.hpp
@@ -5,7 +5,7 @@
 #include <memory>
 #include <string>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 class VerificationInterface
@@ -27,4 +27,4 @@
     virtual VerifyCheckResponses checkVerificationState() = 0;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/verify_systemd.cpp b/verify_systemd.cpp
index fd29918..2cd418b 100644
--- a/verify_systemd.cpp
+++ b/verify_systemd.cpp
@@ -25,7 +25,7 @@
 #include <string>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 std::unique_ptr<VerificationInterface>
@@ -98,4 +98,4 @@
     return result;
 }
 
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/verify_systemd.hpp b/verify_systemd.hpp
index 60acbc6..d64d8c8 100644
--- a/verify_systemd.hpp
+++ b/verify_systemd.hpp
@@ -7,7 +7,7 @@
 #include <sdbusplus/bus.hpp>
 #include <string>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /**
@@ -54,4 +54,4 @@
     const std::string checkPath;
     const std::string triggerService;
 };
-} // namespace blobs
+} // namespace ipmi_flash
diff --git a/window_hw_interface.hpp b/window_hw_interface.hpp
index 60c600f..0c24dc8 100644
--- a/window_hw_interface.hpp
+++ b/window_hw_interface.hpp
@@ -4,7 +4,7 @@
 #include <utility>
 #include <vector>
 
-namespace blobs
+namespace ipmi_flash
 {
 
 /**
@@ -46,4 +46,4 @@
     virtual std::vector<std::uint8_t> copyFrom(std::uint32_t length) = 0;
 };
 
-} // namespace blobs
+} // namespace ipmi_flash
