diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
new file mode 100644
index 0000000..5313bec
--- /dev/null
+++ b/include/mdrv2.hpp
@@ -0,0 +1,145 @@
+/*
+// Copyright (c) 2019 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+
+#pragma once
+
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/log.hpp>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/timer.hpp>
+
+static constexpr uint8_t mdr2Version = 2;
+static constexpr uint32_t mdr2SMSize = 0x00100000;
+static constexpr uint16_t mdrSMBIOSSize = 32 * 1024;
+static constexpr uint32_t mdr2SMBaseAddress = 0x9FF00000;
+static constexpr const char* mdrType2File = "/var/lib/smbios/smbios2";
+
+enum class MDR2SMBIOSStatusEnum
+{
+    mdr2Init = 0,
+    mdr2Loaded = 1,
+    mdr2Updated = 2,
+    mdr2Updating = 3
+};
+
+enum class MDR2DirLockEnum
+{
+    mdr2DirUnlock = 0,
+    mdr2DirLock = 1
+};
+
+typedef struct
+{
+    uint8_t dataInfo[16];
+} DataIdStruct;
+
+typedef struct
+{
+    DataIdStruct id;
+    uint32_t size;
+    uint32_t dataSetSize;
+    uint32_t dataVersion;
+    uint32_t timestamp;
+} Mdr2DirEntry;
+
+typedef struct
+{
+    Mdr2DirEntry common;
+    MDR2SMBIOSStatusEnum stage;
+    MDR2DirLockEnum lock;
+    uint16_t lockHandle;
+    uint32_t xferBuff;
+    uint32_t xferSize;
+    uint32_t maxDataSize;
+    uint8_t* dataStorage;
+} Mdr2DirLocalStruct;
+
+typedef struct
+{
+    uint8_t agentVersion;
+    uint8_t dirVersion;
+    uint8_t dirEntries;
+    uint8_t status; // valid / locked / etc
+    uint8_t remoteDirVersion;
+    uint16_t sessionHandle;
+    Mdr2DirLocalStruct dir[maxDirEntries];
+} Mdr2DirStruct;
+
+struct MDRSMBIOSHeader
+{
+    uint8_t dirVer;
+    uint8_t mdrType;
+    uint32_t timestamp;
+    uint32_t dataSize;
+} __attribute__((packed));
+
+namespace phosphor
+{
+namespace smbios
+{
+
+class MDR_V2
+{
+  public:
+    MDR_V2() = delete;
+    MDR_V2(const MDR_V2&) = delete;
+    MDR_V2& operator=(const MDR_V2&) = delete;
+    MDR_V2(MDR_V2&&) = delete;
+    MDR_V2& operator=(MDR_V2&&) = delete;
+    ~MDR_V2() = default;
+
+    MDR_V2(sdbusplus::bus::bus& bus, const char* path, sd_event* event) :
+        bus(bus), timer(event, [&](void) { agentSynchronizeData(); })
+    {
+
+        smbiosDir.agentVersion = smbiosAgentVersion;
+        smbiosDir.dirVersion = 1;
+        smbiosDir.dirEntries = 1;
+        directoryEntries(smbiosDir.dirEntries);
+        smbiosDir.status = 1;
+        smbiosDir.remoteDirVersion = 0;
+
+        std::copy(smbiosTableId.begin(), smbiosTableId.end(),
+                  smbiosDir.dir[smbiosDirIndex].common.id.dataInfo);
+
+        smbiosDir.dir[smbiosDirIndex].dataStorage = smbiosTableStorage;
+
+        agentSynchronizeData();
+    }
+
+  private:
+    Timer timer;
+
+    sdbusplus::bus::bus& bus;
+
+    Mdr2DirStruct smbiosDir;
+
+    const std::array<uint8_t, 16> smbiosTableId{
+        40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 0x42};
+    uint8_t smbiosTableStorage[smbiosTableStorageSize];
+
+    bool smbiosIsUpdating(uint8_t index);
+    bool smbiosIsAvailForUpdate(uint8_t index);
+    inline uint8_t smbiosValidFlag(uint8_t index);
+    void systemInfoUpdate(void);
+};
+
+} // namespace smbios
+} // namespace phosphor
