diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index fc4438e..10f427a 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -158,7 +158,9 @@
 bool FirmwareBlobHandler::open(uint16_t session, uint16_t flags,
                                const std::string& path)
 {
-    /* Check that they've opened for writing - read back not supported. */
+    /* Check that they've opened for writing - read back not currently
+     * supported.
+     */
     if ((flags & OpenFlags::write) == 0)
     {
         return false;
@@ -171,6 +173,7 @@
     }
 
     /* Is there an open session already? We only allow one at a time.
+     *
      * TODO: Temporarily using a simple boolean flag until there's a full
      * session object to check.
      *
@@ -246,6 +249,19 @@
         active = &activeImageBlobID;
     }
 
+    /* Elsewhere I do this check by checking "if ::ipmi" because that's the
+     * only non-external data pathway -- but this is just a more generic
+     * approach to that.
+     */
+    if (d->handler)
+    {
+        /* If the data handler open call fails, open fails. */
+        if (!d->handler->open())
+        {
+            return false;
+        }
+    }
+
     /* 2d) are they opening the /flash/tarball ? (to start the UBI process)
      * 2e) are they opening the /flash/image ? (to start the process)
      * 2...) are they opening the /flash/... ? (to start the process)
diff --git a/test/firmware_open_unittest.cpp b/test/firmware_open_unittest.cpp
index 967f792..d2c601a 100644
--- a/test/firmware_open_unittest.cpp
+++ b/test/firmware_open_unittest.cpp
@@ -70,6 +70,68 @@
                             FirmwareBlobHandler::activeHashBlobID));
 }
 
+TEST(FirmwareHandlerOpenTest, OpenWithDataHandlerAllSucceeds)
+{
+    /* Attempting to open a file that has an active handler, and use that active
+     * handler method.
+     */
+    DataHandlerMock dataMock;
+    ImageHandlerMock imageMock;
+
+    std::vector<HandlerPack> blobs = {
+        {FirmwareBlobHandler::hashBlobID, &imageMock},
+        {"asdf", &imageMock},
+    };
+    std::vector<DataHandlerPack> data = {
+        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
+    };
+
+    auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
+
+    EXPECT_CALL(dataMock, open()).WillOnce(Return(true));
+    EXPECT_CALL(imageMock, open(Eq(FirmwareBlobHandler::hashBlobID)))
+        .WillOnce(Return(true));
+
+    EXPECT_TRUE(handler->open(
+        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        FirmwareBlobHandler::hashBlobID));
+
+    /* The active hash blob_id was added. */
+    auto currentBlobs = handler->getBlobIds();
+    EXPECT_EQ(3, currentBlobs.size());
+    EXPECT_EQ(1, std::count(currentBlobs.begin(), currentBlobs.end(),
+                            FirmwareBlobHandler::activeHashBlobID));
+}
+
+TEST(FirmwareHandlerOpenTest, OpenWithDataHandlerReturnsFailure)
+{
+    /* The data handler call returns failure on open, therefore open fails. */
+    DataHandlerMock dataMock;
+    ImageHandlerMock imageMock;
+
+    std::vector<HandlerPack> blobs = {
+        {FirmwareBlobHandler::hashBlobID, &imageMock},
+        {"asdf", &imageMock},
+    };
+    std::vector<DataHandlerPack> data = {
+        {FirmwareBlobHandler::UpdateFlags::ipmi, nullptr},
+        {FirmwareBlobHandler::UpdateFlags::lpc, &dataMock},
+    };
+
+    auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
+
+    EXPECT_CALL(dataMock, open()).WillOnce(Return(false));
+
+    EXPECT_FALSE(handler->open(
+        0, OpenFlags::write | FirmwareBlobHandler::UpdateFlags::lpc,
+        FirmwareBlobHandler::hashBlobID));
+
+    /* The active hash blob_id was added. */
+    auto currentBlobs = handler->getBlobIds();
+    EXPECT_EQ(2, currentBlobs.size());
+}
+
 TEST(FirmwareHandlerOpenTest, OpenEverythingSucceedsOpenActiveFails)
 {
     /* Attempting to open the active image blob, when it's present will fail.
diff --git a/test/firmware_write_unittest.cpp b/test/firmware_write_unittest.cpp
index 58cb5b2..0ba20f5 100644
--- a/test/firmware_write_unittest.cpp
+++ b/test/firmware_write_unittest.cpp
@@ -59,6 +59,7 @@
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
 
+    EXPECT_CALL(dataMock, open()).WillOnce(Return(true));
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
@@ -97,6 +98,7 @@
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
 
+    EXPECT_CALL(dataMock, open()).WillOnce(Return(true));
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
diff --git a/test/firmware_writemeta_unittest.cpp b/test/firmware_writemeta_unittest.cpp
index b2338c1..13399fb 100644
--- a/test/firmware_writemeta_unittest.cpp
+++ b/test/firmware_writemeta_unittest.cpp
@@ -53,6 +53,7 @@
 
     auto handler = FirmwareBlobHandler::CreateFirmwareBlobHandler(blobs, data);
 
+    EXPECT_CALL(dataMock, open()).WillOnce(Return(true));
     EXPECT_CALL(imageMock2, open("asdf")).WillOnce(Return(true));
 
     EXPECT_TRUE(handler->open(
