diff --git a/data_handler.hpp b/data_handler.hpp
index 1bee432..75f7660 100644
--- a/data_handler.hpp
+++ b/data_handler.hpp
@@ -43,7 +43,7 @@
      * @param[in] configuration - byte vector of data.
      * @return bool - returns true on success.
      */
-    virtual bool write(const std::vector<std::uint8_t>& configuration) = 0;
+    virtual bool writeMeta(const std::vector<std::uint8_t>& configuration) = 0;
 
     /**
      * read configuration.
@@ -51,7 +51,7 @@
      * @return bytes - whatever bytes are required configuration information for
      * the mechanism.
      */
-    virtual std::vector<std::uint8_t> read() = 0;
+    virtual std::vector<std::uint8_t> readMeta() = 0;
 };
 
 struct DataHandlerPack
diff --git a/firmware_handler.cpp b/firmware_handler.cpp
index f2740c7..3c47e51 100644
--- a/firmware_handler.cpp
+++ b/firmware_handler.cpp
@@ -227,7 +227,7 @@
     meta->metadata.clear();
     if (item->second->dataHandler)
     {
-        auto bytes = item->second->dataHandler->read();
+        auto bytes = item->second->dataHandler->readMeta();
         meta->metadata.insert(meta->metadata.begin(), bytes.begin(),
                               bytes.end());
     }
@@ -484,7 +484,7 @@
         return false;
     }
 
-    return item->second->dataHandler->write(data);
+    return item->second->dataHandler->writeMeta(data);
 }
 
 /*
diff --git a/lpc_handler.cpp b/lpc_handler.cpp
index 4a584ad..f68a9fa 100644
--- a/lpc_handler.cpp
+++ b/lpc_handler.cpp
@@ -26,7 +26,7 @@
 bool LpcDataHandler::open()
 {
     /* For the ASPEED LPC CTRL driver, the ioctl is required to set up the
-     * window, with information from write() below.
+     * window, with information from writeMeta() below.
      */
     return true;
 }
@@ -59,7 +59,7 @@
     return {};
 }
 
-bool LpcDataHandler::write(const std::vector<std::uint8_t>& configuration)
+bool LpcDataHandler::writeMeta(const std::vector<std::uint8_t>& configuration)
 {
     struct LpcRegion lpcRegion;
 
@@ -86,7 +86,7 @@
     return setInitializedAndReturn(true);
 }
 
-std::vector<std::uint8_t> LpcDataHandler::read()
+std::vector<std::uint8_t> LpcDataHandler::readMeta()
 {
     return {};
 }
diff --git a/lpc_handler.hpp b/lpc_handler.hpp
index 8431730..139cfac 100644
--- a/lpc_handler.hpp
+++ b/lpc_handler.hpp
@@ -43,8 +43,8 @@
     bool open() override;
     bool close() override;
     std::vector<std::uint8_t> copyFrom(std::uint32_t length) override;
-    bool write(const std::vector<std::uint8_t>& configuration) override;
-    std::vector<std::uint8_t> read() override;
+    bool writeMeta(const std::vector<std::uint8_t>& configuration) override;
+    std::vector<std::uint8_t> readMeta() override;
 
   private:
     bool setInitializedAndReturn(bool value)
diff --git a/pci_handler.cpp b/pci_handler.cpp
index 29daf8f..3f9b99f 100644
--- a/pci_handler.cpp
+++ b/pci_handler.cpp
@@ -44,13 +44,13 @@
     return {};
 }
 
-bool PciDataHandler::write(const std::vector<std::uint8_t>& configuration)
+bool PciDataHandler::writeMeta(const std::vector<std::uint8_t>& configuration)
 {
     /* PCI handler doesn't require configuration write, only read. */
     return false;
 }
 
-std::vector<std::uint8_t> PciDataHandler::read()
+std::vector<std::uint8_t> PciDataHandler::readMeta()
 {
     /* PCI handler does require returning a configuration from read. */
     struct PciConfigResponse reply;
diff --git a/pci_handler.hpp b/pci_handler.hpp
index b72cab9..4df7bb7 100644
--- a/pci_handler.hpp
+++ b/pci_handler.hpp
@@ -26,8 +26,8 @@
     bool open() override;
     bool close() override;
     std::vector<std::uint8_t> copyFrom(std::uint32_t length) override;
-    bool write(const std::vector<std::uint8_t>& configuration) override;
-    std::vector<std::uint8_t> read() override;
+    bool writeMeta(const std::vector<std::uint8_t>& configuration) override;
+    std::vector<std::uint8_t> readMeta() override;
 
   private:
     std::uint32_t regionAddress;
diff --git a/test/data_mock.hpp b/test/data_mock.hpp
index 44c3aae..ae8c9c7 100644
--- a/test/data_mock.hpp
+++ b/test/data_mock.hpp
@@ -15,8 +15,8 @@
     MOCK_METHOD0(open, bool());
     MOCK_METHOD0(close, bool());
     MOCK_METHOD1(copyFrom, std::vector<std::uint8_t>(std::uint32_t));
-    MOCK_METHOD1(write, bool(const std::vector<std::uint8_t>&));
-    MOCK_METHOD0(read, std::vector<std::uint8_t>());
+    MOCK_METHOD1(writeMeta, bool(const std::vector<std::uint8_t>&));
+    MOCK_METHOD0(readMeta, std::vector<std::uint8_t>());
 };
 
 } // namespace blobs
diff --git a/test/firmware_sessionstat_unittest.cpp b/test/firmware_sessionstat_unittest.cpp
index 42f67e6..4f6584f 100644
--- a/test/firmware_sessionstat_unittest.cpp
+++ b/test/firmware_sessionstat_unittest.cpp
@@ -83,7 +83,7 @@
     int size = 512;
     EXPECT_CALL(imageMock2, getSize()).WillOnce(Return(size));
     std::vector<std::uint8_t> mBytes = {0x01, 0x02};
-    EXPECT_CALL(dataMock, read()).WillOnce(Return(mBytes));
+    EXPECT_CALL(dataMock, readMeta()).WillOnce(Return(mBytes));
 
     struct BlobMeta meta;
     EXPECT_TRUE(handler->stat(0, &meta));
diff --git a/test/firmware_writemeta_unittest.cpp b/test/firmware_writemeta_unittest.cpp
index 869ed48..4e8cd45 100644
--- a/test/firmware_writemeta_unittest.cpp
+++ b/test/firmware_writemeta_unittest.cpp
@@ -71,7 +71,7 @@
 
     std::vector<std::uint8_t> bytes = {0x01, 0x02, 0x03, 0x04};
 
-    EXPECT_CALL(dataMock, write(Eq(bytes))).WillOnce(Return(true));
+    EXPECT_CALL(dataMock, writeMeta(Eq(bytes))).WillOnce(Return(true));
     EXPECT_TRUE(handler->writeMeta(0, 0, bytes));
 }
 
