diff --git a/include/cpu.hpp b/include/cpu.hpp
index 22b6c08..5c8ca86 100644
--- a/include/cpu.hpp
+++ b/include/cpu.hpp
@@ -15,12 +15,11 @@
 */
 
 #pragma once
-#include "smbios.hpp"
+#include "smbios_mdrv2.hpp"
 
 #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
+#include <xyz/openbmc_project/Inventory/Decorator/Revision/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/Cpu/server.hpp>
-#include <xyz/openbmc_project/Inventory/Item/server.hpp>
-#include <xyz/openbmc_project/State/Decorator/OperationalStatus/server.hpp>
 
 namespace phosphor
 {
@@ -28,11 +27,11 @@
 namespace smbios
 {
 
-// Definition follow smbios spec DSP0134 3.0.0
-static const std::map<uint8_t, const char*> processorTypeTable = {
-    {0x1, "Other"},          {0x2, "Unknown"},       {0x3, "Central Processor"},
-    {0x4, "Math Processor"}, {0x5, "DSP Processor"}, {0x6, "Video Processor"},
-};
+using rev =
+    sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Revision;
+using asset =
+    sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset;
+using processor = sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu;
 
 // Definition follow smbios spec DSP0134 3.0.0
 static const std::map<uint8_t, const char*> familyTable = {
@@ -71,34 +70,25 @@
 };
 
 // Definition follow smbios spec DSP0134 3.0.0
-static const std::array<std::string, 16> characteristicsTable{
-    "Reserved",
-    "Unknown",
-    "64-bit Capable",
-    "Multi-Core",
-    "Hardware Thread",
-    "Execute Protection",
-    "Enhanced Virtualization",
-    "Power/Performance Control",
-    "Reserved",
-    "Reserved",
-    "Reserved",
-    "Reserved",
-    "Reserved",
-    "Reserved",
-    "Reserved",
-    "Reserved"};
+static const std::array<std::optional<processor::Capability>, 16>
+    characteristicsTable{std::nullopt,
+                         std::nullopt,
+                         processor::Capability::Capable64bit,
+                         processor::Capability::MultiCore,
+                         processor::Capability::HardwareThread,
+                         processor::Capability::ExecuteProtection,
+                         processor::Capability::EnhancedVirtualization,
+                         processor::Capability::PowerPerformanceControl,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt,
+                         std::nullopt};
 
-class Cpu
-    : sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu>,
-      sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Inventory::server::Item>,
-      sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>,
-      sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::State::Decorator::server::
-              OperationalStatus>
+class Cpu : sdbusplus::server::object_t<processor, asset, rev>
 {
   public:
     Cpu() = delete;
@@ -110,37 +100,14 @@
 
     Cpu(sdbusplus::bus::bus& bus, const std::string& objPath,
         const uint8_t& cpuId, uint8_t* smbiosTableStorage) :
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu>(
-            bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
-                Asset>(bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::server::Item>(
-            bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::State::Decorator::server::
-                OperationalStatus>(bus, objPath.c_str()),
+        sdbusplus::server::object_t<processor, asset, rev>(bus,
+                                                           objPath.c_str()),
         cpuNum(cpuId), storage(smbiosTableStorage)
     {
-        processorInfoUpdate();
+        infoUpdate();
     }
 
-    void processorInfoUpdate(void);
-
-    std::string processorSocket(std::string value) override;
-    std::string processorType(std::string value) override;
-    std::string processorFamily(std::string value) override;
-    std::string manufacturer(std::string value) override;
-    uint32_t processorId(uint32_t value) override;
-    std::string processorVersion(std::string value) override;
-    uint16_t processorMaxSpeed(uint16_t value) override;
-    std::string processorCharacteristics(std::string value) override;
-    uint16_t processorCoreCount(uint16_t value) override;
-    uint16_t processorThreadCount(uint16_t value) override;
-    bool present(bool value) override;
-    bool functional(bool value) override;
+    void infoUpdate(void);
 
   private:
     uint8_t cpuNum;
@@ -180,16 +147,14 @@
         uint16_t threadCount2;
     } __attribute__((packed));
 
-    void cpuSocket(const uint8_t positionNum, const uint8_t structLen,
-                   uint8_t* dataIn);
-    void cpuType(const uint8_t value);
-    void cpuFamily(const uint8_t value);
-    void cpuManufacturer(const uint8_t positionNum, const uint8_t structLen,
-                         uint8_t* dataIn);
-    void cpuVersion(const uint8_t positionNum, const uint8_t structLen,
-                    uint8_t* dataIn);
-    void cpuCharacteristics(const uint16_t value);
-    void cpuStatus(const uint8_t value);
+    void socket(const uint8_t positionNum, const uint8_t structLen,
+                uint8_t* dataIn);
+    void family(const uint8_t value);
+    void manufacturer(const uint8_t positionNum, const uint8_t structLen,
+                      uint8_t* dataIn);
+    void version(const uint8_t positionNum, const uint8_t structLen,
+                 uint8_t* dataIn);
+    void characteristics(const uint16_t value);
 };
 
 } // namespace smbios
diff --git a/include/cpuinfo.hpp b/include/cpuinfo.hpp
new file mode 100644
index 0000000..796ed4c
--- /dev/null
+++ b/include/cpuinfo.hpp
@@ -0,0 +1,57 @@
+/*
+// Copyright (c) 2020 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 <sdbusplus/asio/object_server.hpp>
+#include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
+
+namespace phosphor
+{
+namespace cpu_info
+{
+static constexpr char const* cpuInfoObject = "xyz.openbmc_project.CPUInfo";
+static constexpr char const* cpuInfoPath = "/xyz/openbmc_project/CPUInfo";
+static constexpr char const* cpuInfoInterface = "xyz.openbmc_project.CPUInfo";
+
+static constexpr const int peciCheckInterval = 10;
+
+/** \ todo add cpu interface to CPUInfo and consolidate with smbios service
+ * using processor =
+    sdbusplus::xyz::openbmc_project::Inventory::Item::server::Cpu;
+*/
+using asset =
+    sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset;
+
+struct CPUInfo : sdbusplus::server::object_t<asset>
+{
+  public:
+    CPUInfo() = delete;
+    CPUInfo(const CPUInfo&) = delete;
+    CPUInfo& operator=(const CPUInfo&) = delete;
+    CPUInfo(CPUInfo&&) = delete;
+    CPUInfo& operator=(CPUInfo&&) = delete;
+    ~CPUInfo() = default;
+
+    CPUInfo(sdbusplus::bus::bus& bus, const std::string& path) :
+        sdbusplus::server::object_t<asset>(bus, path.c_str())
+    {}
+
+  private:
+};
+
+} // namespace cpu_info
+} // namespace phosphor
diff --git a/include/dimm.hpp b/include/dimm.hpp
index ec0a4e9..7d69a29 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -15,7 +15,7 @@
 */
 
 #pragma once
-#include "smbios.hpp"
+#include "smbios_mdrv2.hpp"
 
 #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/Dimm/server.hpp>
@@ -29,11 +29,11 @@
 using DeviceType =
     sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm::DeviceType;
 
-class Dimm
-    : sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>,
-      sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>
+class Dimm :
+    sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>,
+    sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>
 {
   public:
     Dimm() = delete;
@@ -88,34 +88,48 @@
                        uint8_t* dataIn);
     void dimmPartNum(const uint8_t positionNum, const uint8_t structLen,
                      uint8_t* dataIn);
-
-    struct MemoryInfo
-    {
-        uint8_t type;
-        uint8_t length;
-        uint16_t handle;
-        uint16_t phyArrayHandle;
-        uint16_t errInfoHandle;
-        uint16_t totalWidth;
-        uint16_t dataWidth;
-        uint16_t size;
-        uint8_t formFactor;
-        uint8_t deviceSet;
-        uint8_t deviceLocator;
-        uint8_t bankLocator;
-        uint8_t memoryType;
-        uint16_t typeDetail;
-        uint16_t speed;
-        uint8_t manufacturer;
-        uint8_t serialNum;
-        uint8_t assetTag;
-        uint8_t partNum;
-        uint8_t attributes;
-        uint32_t extendedSize;
-        uint16_t confClockSpeed;
-    } __attribute__((packed));
 };
 
+struct MemoryInfo
+{
+    uint8_t type;
+    uint8_t length;
+    uint16_t handle;
+    uint16_t phyArrayHandle;
+    uint16_t errInfoHandle;
+    uint16_t totalWidth;
+    uint16_t dataWidth;
+    uint16_t size;
+    uint8_t formFactor;
+    uint8_t deviceSet;
+    uint8_t deviceLocator;
+    uint8_t bankLocator;
+    uint8_t memoryType;
+    uint16_t typeDetail;
+    uint16_t speed;
+    uint8_t manufacturer;
+    uint8_t serialNum;
+    uint8_t assetTag;
+    uint8_t partNum;
+    uint8_t attributes;
+    uint32_t extendedSize;
+    uint16_t confClockSpeed;
+    uint16_t minimumVoltage;
+    uint16_t maximumVoltage;
+    uint16_t configuredVoltage;
+    uint8_t memoryTechnology;
+    uint16_t memoryOperatingModeCap;
+    uint8_t firwareVersion;
+    uint16_t modelManufId;
+    uint16_t modelProdId;
+    uint16_t memSubConManufId;
+    uint16_t memSubConProdId;
+    uint64_t nvSize;
+    uint64_t volatileSize;
+    uint64_t cacheSize;
+    uint64_t logicalSize;
+} __attribute__((packed));
+
 const std::map<uint8_t, DeviceType> dimmTypeTable = {
     {0x1, DeviceType::Other},         {0x2, DeviceType::Unknown},
     {0x3, DeviceType::DRAM},          {0x4, DeviceType::EDRAM},
diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
index 48df53e..8f03579 100644
--- a/include/mdrv2.hpp
+++ b/include/mdrv2.hpp
@@ -1,5 +1,5 @@
 /*
-// Copyright (c) 2019 Intel Corporation
+// Copyright (c) 2018 Intel Corporation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -17,93 +17,41 @@
 #pragma once
 #include "cpu.hpp"
 #include "dimm.hpp"
-#include "smbios.hpp"
+#include "smbios_mdrv2.hpp"
 #include "system.hpp"
 
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <boost/asio/io_context.hpp>
+#include <boost/asio/steady_timer.hpp>
+#include <boost/container/flat_map.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/log.hpp>
+#include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/server.hpp>
 #include <sdbusplus/timer.hpp>
-#include <smbios.hpp>
 #include <xyz/openbmc_project/Smbios/MDR_V2/server.hpp>
 
-static constexpr int limitEntryLen = 0xff;
-static constexpr uint8_t mdr2Version = 2;
-static constexpr uint32_t mdr2SMSize = 0x00100000;
-static constexpr uint32_t mdr2SMBaseAddress = 0x9FF00000;
-static constexpr const char* mdrType2File = "/var/lib/smbios/smbios2";
-static constexpr const char* mdrV2Path = "/xyz/openbmc_project/Smbios/MDR_V2";
+sdbusplus::asio::object_server& getObjectServer(void);
 
-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));
-
+using RecordVariant =
+    std::variant<std::string, uint64_t, uint32_t, uint16_t, uint8_t>;
 namespace phosphor
 {
 namespace smbios
 {
 
-class MDR_V2 : sdbusplus::server::object::object<
-                   sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>
+static constexpr const char* mdrV2Path = "/xyz/openbmc_project/Smbios/MDR_V2";
+static constexpr const char* smbiosPath = "/xyz/openbmc_project/Smbios";
+static constexpr const char* smbiosInterfaceName =
+    "xyz.openbmc_project.Smbios.GetRecordType";
+constexpr const int limitEntryLen = 0xff;
+
+class MDR_V2 :
+    sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>
 {
   public:
     MDR_V2() = delete;
@@ -113,10 +61,12 @@
     MDR_V2& operator=(MDR_V2&&) = delete;
     ~MDR_V2() = default;
 
-    MDR_V2(sdbusplus::bus::bus& bus, const char* path, sd_event* event) :
+    MDR_V2(sdbusplus::bus::bus& bus, const char* path,
+           boost::asio::io_context& io) :
         sdbusplus::server::object::object<
             sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>(bus, path),
-        bus(bus), timer(event, [&](void) { agentSynchronizeData(); })
+        bus(bus), timer(io), smbiosInterface(getObjectServer().add_interface(
+                                 smbiosPath, smbiosInterfaceName))
     {
 
         smbiosDir.agentVersion = smbiosAgentVersion;
@@ -132,6 +82,11 @@
         smbiosDir.dir[smbiosDirIndex].dataStorage = smbiosTableStorage;
 
         agentSynchronizeData();
+
+        smbiosInterface->register_method("GetRecordType", [this](size_t type) {
+            return getRecordType(type);
+        });
+        smbiosInterface->initialize();
     }
 
     std::vector<uint8_t> getDirectoryInformation(uint8_t dirIndex) override;
@@ -157,8 +112,11 @@
 
     uint8_t directoryEntries(uint8_t value) override;
 
+    std::vector<boost::container::flat_map<std::string, RecordVariant>>
+        getRecordType(size_t type);
+
   private:
-    Timer timer;
+    boost::asio::steady_timer timer;
 
     sdbusplus::bus::bus& bus;
 
@@ -180,6 +138,7 @@
     std::vector<std::unique_ptr<Cpu>> cpus;
     std::vector<std::unique_ptr<Dimm>> dimms;
     std::unique_ptr<System> system;
+    std::shared_ptr<sdbusplus::asio::dbus_interface> smbiosInterface;
 };
 
 } // namespace smbios
diff --git a/include/smbios.hpp b/include/smbios_mdrv2.hpp
similarity index 64%
rename from include/smbios.hpp
rename to include/smbios_mdrv2.hpp
index e6dc743..e53d709 100644
--- a/include/smbios.hpp
+++ b/include/smbios_mdrv2.hpp
@@ -1,5 +1,5 @@
 /*
-// Copyright (c) 2019 Intel Corporation
+// Copyright (c) 2018 Intel Corporation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -16,31 +16,50 @@
 
 #pragma once
 
+#include <phosphor-logging/elog-errors.hpp>
+
 #include <array>
 
-static constexpr uint16_t smbiosAgentId = 0x0101;
-static constexpr int smbiosDirIndex = 0;
-static constexpr int firstAgentIndex = 1;
-static constexpr uint8_t maxDirEntries = 4;
-static constexpr uint32_t pageMask = 0xf000;
-static constexpr uint8_t smbiosAgentVersion = 1;
-static constexpr uint32_t defaultTimeout = 20000;
-static constexpr uint32_t smbiosTableVersion = 15;
-static constexpr uint32_t smbiosSMMemoryOffset = 0;
-static constexpr uint32_t smbiosSMMemorySize = 1024 * 1024;
-static constexpr uint32_t smbiosTableTimestamp = 0x45464748;
-static constexpr uint32_t smbiosTableStorageSize = 64 * 1024;
+static constexpr const char* mdrType2File = "/var/lib/smbios/smbios2";
 static constexpr const char* smbiosPath = "/var/lib/smbios";
+
 static constexpr uint16_t mdrSMBIOSSize = 32 * 1024;
 
-static constexpr const char* cpuPath =
-    "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu";
+constexpr uint16_t smbiosAgentId = 0x0101;
+constexpr int firstAgentIndex = 1;
 
-static constexpr const char* dimmPath =
-    "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm";
+constexpr uint8_t maxDirEntries = 4;
+constexpr uint32_t mdr2SMSize = 0x00100000;
+constexpr uint32_t mdr2SMBaseAddress = 0x9FF00000;
 
-static constexpr const char* systemPath =
-    "/xyz/openbmc_project/inventory/system/chassis/motherboard/bios";
+constexpr uint8_t mdrTypeII = 2;
+
+constexpr uint8_t mdr2Version = 2;
+constexpr uint8_t smbiosAgentVersion = 1;
+
+constexpr uint32_t pageMask = 0xf000;
+constexpr int smbiosDirIndex = 0;
+
+constexpr uint32_t smbiosTableVersion = 15;
+constexpr uint32_t smbiosTableTimestamp = 0x45464748;
+constexpr uint32_t smbiosSMMemoryOffset = 0;
+constexpr uint32_t smbiosSMMemorySize = 1024 * 1024;
+constexpr uint32_t smbiosTableStorageSize = 64 * 1024;
+constexpr uint32_t defaultTimeout = 20000;
+
+enum class MDR2SMBIOSStatusEnum
+{
+    mdr2Init = 0,
+    mdr2Loaded = 1,
+    mdr2Updated = 2,
+    mdr2Updating = 3
+};
+
+enum class MDR2DirLockEnum
+{
+    mdr2DirUnlock = 0,
+    mdr2DirLock = 1
+};
 
 enum class DirDataRequestEnum
 {
@@ -55,6 +74,60 @@
     flagIsLocked = 2
 };
 
+typedef struct
+{
+    uint8_t dataInfo[16];
+} DataIdStruct;
+
+typedef struct
+{
+    DataIdStruct id;
+    uint32_t size;
+    uint32_t dataSetSize;
+    uint8_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));
+
+static constexpr const char* cpuPath =
+    "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu";
+
+static constexpr const char* dimmPath =
+    "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm";
+
+static constexpr const char* systemPath =
+    "/xyz/openbmc_project/inventory/system/chassis/motherboard/bios";
+
 typedef enum
 {
     biosType = 0,
@@ -101,7 +174,8 @@
 
 // When first time run getSMBIOSTypePtr, need to send the RegionS[].regionData
 // to smbiosDataIn
-static inline uint8_t* getSMBIOSTypePtr(uint8_t* smbiosDataIn, uint8_t typeId)
+static inline uint8_t* getSMBIOSTypePtr(uint8_t* smbiosDataIn, uint8_t typeId,
+                                        size_t size = 0)
 {
     if (smbiosDataIn == nullptr)
     {
@@ -110,9 +184,10 @@
     char* smbiosData = reinterpret_cast<char*>(smbiosDataIn);
     while ((*smbiosData != '\0') || (*(smbiosData + 1) != '\0'))
     {
+        uint32_t len = *(smbiosData + 1);
         if (*smbiosData != typeId)
         {
-            uint32_t len = *(smbiosData + 1);
+
             smbiosData += len;
             while ((*smbiosData != '\0') || (*(smbiosData + 1) != '\0'))
             {
@@ -126,6 +201,12 @@
             smbiosData += separateLen;
             continue;
         }
+        if (len < size)
+        {
+            phosphor::logging::log<phosphor::logging::level::ERR>(
+                "Record size mismatch!");
+            return nullptr;
+        }
         return reinterpret_cast<uint8_t*>(smbiosData);
     }
     return nullptr;
diff --git a/include/system.hpp b/include/system.hpp
index ea1eccf..cf69cb7 100644
--- a/include/system.hpp
+++ b/include/system.hpp
@@ -15,7 +15,7 @@
 */
 
 #pragma once
-#include "smbios.hpp"
+#include "smbios_mdrv2.hpp"
 
 #include <xyz/openbmc_project/Common/UUID/server.hpp>
 #include <xyz/openbmc_project/Inventory/Decorator/Revision/server.hpp>
@@ -26,11 +26,11 @@
 namespace smbios
 {
 
-class System : sdbusplus::server::object::object<
-                   sdbusplus::xyz::openbmc_project::Common::server::UUID>,
-               sdbusplus::server::object::object<
-                   sdbusplus::xyz::openbmc_project::Inventory::Decorator::
-                       server::Revision>
+class System :
+    sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Common::server::UUID>,
+    sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Revision>
 {
   public:
     System() = delete;
