diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..afed099
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,10 @@
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+libfirmwareblobdir = ${libdir}/ipmid-providers
+libfirmwareblob_LTLIBRARIES = libfirmwareblob.la
+libfirmwareblob_la_SOURCES = main.cpp \
+		      firmware_handler.cpp
+libfirmwareblob_la_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS) \
+                        -version-info 0:0:0 -shared
+libfirmwareblob_la_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS) \
+                         -flto
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..b022138
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,58 @@
+# Initialization
+AC_PREREQ([2.69])
+AC_INIT([phosphor-ipmi-flash], [0.1], [https://github.com/openbmc/phosphor-ipmi-flash/issues])
+AC_LANG([C++])
+AC_CONFIG_HEADERS([config.h])
+AM_INIT_AUTOMAKE([subdir-objects -Wall -Werror foreign dist-xz])
+AM_SILENT_RULES([yes])
+
+# Checks for programs.
+AC_PROG_CXX
+AM_PROG_AR
+AC_PROG_INSTALL
+AC_PROG_MAKE_SET
+
+# Checks for typedefs, structures, and compiler characteristics.
+AX_CXX_COMPILE_STDCXX_17([noext])
+AX_APPEND_COMPILE_FLAGS([-Wall -Werror], [CXXFLAGS])
+
+# Checks for library functions.
+LT_INIT # Required for systemd linking
+
+# Checks for libraries.
+PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, [AC_MSG_ERROR([Could not find phosphor-logging...openbmc/phosphor-logging package required])])
+AC_CHECK_HEADER([blobs-ipmid], [AC_MSG_ERROR(["phosphor-ipmi-blobs required and not found."])])
+AX_PTHREAD([], [AC_MSG_ERROR(["pthread required and not found"])])
+
+# Check/set gtest specific functions.
+PKG_CHECK_MODULES([GTEST], [gtest], [], [AC_MSG_NOTICE([gtest not found, tests will not build])])
+PKG_CHECK_MODULES([GMOCK], [gmock], [], [AC_MSG_NOTICE([gmock not found, tests will not build])])
+PKG_CHECK_MODULES([GTEST_MAIN], [gtest_main], [], [AC_MSG_NOTICE([gtest_main not found, tests will not build])])
+
+# Add --enable-oe-sdk flag to configure script
+AC_ARG_ENABLE([oe-sdk],
+    AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
+)
+
+# Check for OECORE_TARGET_SYSROOT in the environment.
+AC_ARG_VAR(OECORE_TARGET_SYSROOT,
+    [Path to the OE SDK SYSROOT])
+
+# Configure OESDK_TESTCASE_FLAGS environment variable, which will be later
+# used in test/Makefile.am
+AS_IF([test "x$enable_oe_sdk" == "xyes"],
+    AS_IF([test "x$OECORE_TARGET_SYSROOT" == "x"],
+          AC_MSG_ERROR([OECORE_TARGET_SYSROOT must be set with --enable-oe-sdk])
+    )
+    AC_MSG_NOTICE([Enabling OE-SDK at $OECORE_TARGET_SYSROOT])
+    [
+        testcase_flags="-Wl,-rpath,\${OECORE_TARGET_SYSROOT}/lib"
+        testcase_flags="${testcase_flags} -Wl,-rpath,\${OECORE_TARGET_SYSROOT}/usr/lib"
+        testcase_flags="${testcase_flags} -Wl,-dynamic-linker,`find \${OECORE_TARGET_SYSROOT}/lib/ld-*.so | sort -r -n | head -n1`"
+    ]
+    AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
+)
+
+# Create configured output
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/firmware_handler.cpp b/firmware_handler.cpp
new file mode 100644
index 0000000..97ebf76
--- /dev/null
+++ b/firmware_handler.cpp
@@ -0,0 +1,60 @@
+#include "firmware_handler.hpp"
+
+namespace blobs
+{
+
+bool FirmwareBlobHandler::canHandleBlob(const std::string& path)
+{
+    return false;
+}
+std::vector<std::string> FirmwareBlobHandler::getBlobIds()
+{
+    return {};
+}
+bool FirmwareBlobHandler::deleteBlob(const std::string& path)
+{
+    return false;
+}
+bool FirmwareBlobHandler::stat(const std::string& path, struct BlobMeta* meta)
+{
+    return false;
+}
+bool FirmwareBlobHandler::open(uint16_t session, uint16_t flags,
+                               const std::string& path)
+{
+    return false;
+}
+std::vector<uint8_t> FirmwareBlobHandler::read(uint16_t session,
+                                               uint32_t offset,
+                                               uint32_t requestedSize)
+{
+    return {};
+}
+bool FirmwareBlobHandler::write(uint16_t session, uint32_t offset,
+                                const std::vector<uint8_t>& data)
+{
+    return false;
+}
+bool FirmwareBlobHandler::writeMeta(uint16_t session, uint32_t offset,
+                                    const std::vector<uint8_t>& data)
+{
+    return false;
+}
+bool FirmwareBlobHandler::commit(uint16_t session,
+                                 const std::vector<uint8_t>& data)
+{
+    return false;
+}
+bool FirmwareBlobHandler::close(uint16_t session)
+{
+    return false;
+}
+bool FirmwareBlobHandler::stat(uint16_t session, struct BlobMeta* meta)
+{
+    return false;
+}
+bool FirmwareBlobHandler::expire(uint16_t session)
+{
+    return false;
+}
+} // namespace blobs
diff --git a/firmware_handler.hpp b/firmware_handler.hpp
new file mode 100644
index 0000000..1ba57c1
--- /dev/null
+++ b/firmware_handler.hpp
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <blobs-ipmid/blobs.hpp>
+
+namespace blobs
+{
+
+/**
+ * Register only one firmware blob handler that will manage all sessions.
+ */
+class FirmwareBlobHandler : public GenericBlobInterface
+{
+  public:
+    FirmwareBlobHandler() = default;
+    ~FirmwareBlobHandler() = default;
+    FirmwareBlobHandler(const FirmwareBlobHandler&) = default;
+    FirmwareBlobHandler& operator=(const FirmwareBlobHandler&) = default;
+    FirmwareBlobHandler(FirmwareBlobHandler&&) = default;
+    FirmwareBlobHandler& operator=(FirmwareBlobHandler&&) = default;
+
+    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 open(uint16_t session, uint16_t flags,
+              const std::string& path) override;
+    std::vector<uint8_t> read(uint16_t session, uint32_t offset,
+                              uint32_t requestedSize) override;
+    bool write(uint16_t session, uint32_t offset,
+               const std::vector<uint8_t>& data) override;
+    bool writeMeta(uint16_t session, uint32_t offset,
+                   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 expire(uint16_t session) override;
+};
+
+} // namespace blobs
diff --git a/main.cpp b/main.cpp
new file mode 100644
index 0000000..127d37b
--- /dev/null
+++ b/main.cpp
@@ -0,0 +1,22 @@
+#include "firmware_handler.hpp"
+
+#include <blobs-ipmid/manager.hpp>
+#include <memory>
+#include <phosphor-logging/log.hpp>
+
+namespace blobs
+{
+using namespace phosphor::logging;
+
+void setupFirmwareHandler() __attribute__((constructor));
+
+void setupFirmwareHandler()
+{
+    auto* manager = getBlobManager();
+    if (!manager->registerHandler(std::make_unique<FirmwareBlobHandler>()))
+    {
+        log<level::ERR>("Failed to register Firmware Handler");
+    }
+}
+
+} // namespace blobs
