diff --git a/Makefile.am b/Makefile.am
index 6d0e426..2ad19a0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -9,9 +9,11 @@
 libbinarystoredir = ${libdir}/ipmid-providers
 libbinarystore_LTLIBRARIES = libbinarystore.la
 libbinarystore_la_SOURCES = main.cpp \
-			    handler.cpp \
 			    binaryblob.pb.cc \
-			    binarystore.cpp
+			    binarystore.cpp \
+			    sys.cpp \
+			    sys_file.cpp \
+			    handler.cpp
 
 libbinarystore_la_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS) \
 			    -version-info 0:0:0 -shared \
diff --git a/binarystore.cpp b/binarystore.cpp
index 1e8475c..98a6264 100644
--- a/binarystore.cpp
+++ b/binarystore.cpp
@@ -22,11 +22,20 @@
 
 std::unique_ptr<BinaryStoreInterface>
     BinaryStore::createFromConfig(const std::string& baseBlobId,
-                                  const std::string& sysfilePath,
-                                  uint32_t offset, uint32_t maxSize)
+                                  std::unique_ptr<SysFile> file,
+                                  uint32_t maxSize)
 {
-    // TODO: implement sysFile parsing
-    return std::make_unique<BinaryStore>(baseBlobId, 0, offset, maxSize);
+    if (baseBlobId.empty() || !file)
+    {
+        return nullptr;
+    }
+
+    auto store =
+        std::make_unique<BinaryStore>(baseBlobId, std::move(file), maxSize);
+
+    store->blob_.set_blob_base_id(store->baseBlobId_);
+
+    return std::move(store);
 }
 
 std::string BinaryStore::getBaseBlobId() const
diff --git a/binarystore.hpp b/binarystore.hpp
index 4091fd4..2e5f562 100644
--- a/binarystore.hpp
+++ b/binarystore.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "sys_file.hpp"
+
 #include <unistd.h>
 
 #include <cstdint>
@@ -95,15 +97,16 @@
 class BinaryStore : public BinaryStoreInterface
 {
   public:
-    BinaryStore(const std::string& baseBlobId, int fd, uint32_t offset,
+    BinaryStore() = delete;
+    BinaryStore(const std::string& baseBlobId, std::unique_ptr<SysFile> file,
                 uint32_t maxSize) :
         baseBlobId_(baseBlobId),
-        fd_(fd), offset_(offset), maxSize_(maxSize), currentBlob_(nullptr)
+        file_(std::move(file)), maxSize_(maxSize)
     {
     }
 
-    BinaryStore() = delete;
     ~BinaryStore() = default;
+
     BinaryStore(const BinaryStore&) = delete;
     BinaryStore& operator=(const BinaryStore&) = delete;
     BinaryStore(BinaryStore&&) = default;
@@ -122,8 +125,7 @@
     /**
      * Helper factory method to create a BinaryStore instance
      * @param baseBlobId: base id for the created instance
-     * @param sysfilePath: path to the storage location
-     * @param offset: offset into the file for serializing the final blob
+     * @param sysFile: system file object for storing binary
      * @param maxSize: max size in bytes that this BinaryStore can expand to.
      *     Writing data more than allowed size will return failure.
      * @returns unique_ptr to constructed BinaryStore. Caller should take
@@ -131,17 +133,15 @@
      */
     static std::unique_ptr<BinaryStoreInterface>
         createFromConfig(const std::string& baseBlobId,
-                         const std::string& sysfilePath, uint32_t offset,
-                         uint32_t maxSize);
+                         std::unique_ptr<SysFile> file, uint32_t maxSize);
 
   private:
     std::string baseBlobId_;
-    int fd_;
-    uint32_t offset_;
-    uint32_t maxSize_;
     binaryblobproto::BinaryBlobBase blob_;
-    binaryblobproto::BinaryBlob* currentBlob_;
+    binaryblobproto::BinaryBlob* currentBlob_ = nullptr;
     bool writable_ = false;
+    std::unique_ptr<SysFile> file_ = nullptr;
+    uint32_t maxSize_;
 };
 
 } // namespace binstore
diff --git a/binarystore_mock.hpp b/binarystore_mock.hpp
index bdbb052..bf8c811 100644
--- a/binarystore_mock.hpp
+++ b/binarystore_mock.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "binarystore.hpp"
+#include "sys_file.hpp"
 
 #include <gmock/gmock.h>
 
@@ -12,9 +13,9 @@
 class MockBinaryStore : public BinaryStoreInterface
 {
   public:
-    MockBinaryStore(const std::string& baseBlobId, int fd, uint32_t offset,
-                    uint32_t maxSize) :
-        real_store_(baseBlobId, fd, offset, maxSize)
+    MockBinaryStore(const std::string& baseBlobId,
+                    std::unique_ptr<SysFile> file, uint32_t maxSize) :
+        real_store_(baseBlobId, std::move(file), maxSize)
     {
         // Implemented calls in BinaryStore will be directed to the real object.
         ON_CALL(*this, getBaseBlobId)
diff --git a/test/Makefile.am b/test/Makefile.am
index b2fa580..f5fe63b 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -24,6 +24,7 @@
 handler_unittest_LDADD = $(PHOSPHOR_LOGGING_LIBS) \
 	$(top_builddir)/handler.o \
 	$(top_builddir)/binarystore.o \
+	$(top_builddir)/sys_file.o \
 	$(top_builddir)/libbinarystore_la-binaryblob.pb.o \
 	-lprotobuf
 handler_unittest_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
@@ -32,6 +33,7 @@
 handler_open_unittest_LDADD = $(PHOSPHOR_LOGGING_LIBS) \
 	$(top_builddir)/handler.o \
 	$(top_builddir)/binarystore.o \
+	$(top_builddir)/sys_file.o \
 	$(top_builddir)/libbinarystore_la-binaryblob.pb.o \
 	-lprotobuf
 handler_open_unittest_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
@@ -40,6 +42,7 @@
 handler_readwrite_unittest_LDADD = $(PHOSPHOR_LOGGING_LIBS) \
 	$(top_builddir)/handler.o \
 	$(top_builddir)/binarystore.o \
+	$(top_builddir)/sys_file.o \
 	$(top_builddir)/libbinarystore_la-binaryblob.pb.o \
 	-lprotobuf
 handler_readwrite_unittest_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
diff --git a/test/handler_unittest.hpp b/test/handler_unittest.hpp
index ded13eb..019c7ad 100644
--- a/test/handler_unittest.hpp
+++ b/test/handler_unittest.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "binarystore_mock.hpp"
+#include "fake_sys_file.hpp"
 #include "handler.hpp"
 
 #include <memory>
@@ -13,6 +14,7 @@
 using ::testing::Contains;
 
 using namespace std::string_literals;
+using namespace binstore;
 
 namespace blobs
 {
@@ -21,18 +23,19 @@
 {
   protected:
     BinaryStoreBlobHandlerTest() = default;
-    BinaryStoreBlobHandler handler;
 
-    std::unique_ptr<binstore::MockBinaryStore>
-        defaultMockStore(const std::string& baseId)
+    std::unique_ptr<MockBinaryStore> defaultMockStore(const std::string& baseId)
     {
-        return std::make_unique<binstore::MockBinaryStore>(baseId, 0, 0, 0);
+        return std::make_unique<MockBinaryStore>(
+            baseId, std::make_unique<FakeSysFile>(), 0);
     }
 
     void addDefaultStore(const std::string& baseId)
     {
         handler.addNewBinaryStore(defaultMockStore(baseId));
     }
+
+    BinaryStoreBlobHandler handler;
 };
 
 } // namespace blobs
