diff --git a/include/cpu.hpp b/include/cpu.hpp
index 78c4c9c..22b6c08 100644
--- a/include/cpu.hpp
+++ b/include/cpu.hpp
@@ -15,7 +15,7 @@
 */
 
 #pragma once
-#include "smbios_mdrv2.hpp"
+#include "smbios.hpp"
 
 #include <xyz/openbmc_project/Inventory/Decorator/Asset/server.hpp>
 #include <xyz/openbmc_project/Inventory/Item/Cpu/server.hpp>
@@ -29,13 +29,13 @@
 {
 
 // Definition follow smbios spec DSP0134 3.0.0
-static const std::map<uint8_t, const char *> processorTypeTable = {
+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"},
 };
 
 // Definition follow smbios spec DSP0134 3.0.0
-static const std::map<uint8_t, const char *> familyTable = {
+static const std::map<uint8_t, const char*> familyTable = {
     {0x1, "Other"},
     {0x2, "Unknown"},
     {0x10, "Pentium II Xeon processor"},
@@ -102,14 +102,14 @@
 {
   public:
     Cpu() = delete;
-    Cpu(const Cpu &) = delete;
-    Cpu &operator=(const Cpu &) = delete;
-    Cpu(Cpu &&) = delete;
-    Cpu &operator=(Cpu &&) = delete;
+    Cpu(const Cpu&) = delete;
+    Cpu& operator=(const Cpu&) = delete;
+    Cpu(Cpu&&) = delete;
+    Cpu& operator=(Cpu&&) = delete;
     ~Cpu() = default;
 
-    Cpu(sdbusplus::bus::bus &bus, const std::string &objPath,
-        const uint8_t &cpuId, uint8_t *smbiosTableStorage) :
+    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()),
@@ -145,7 +145,7 @@
   private:
     uint8_t cpuNum;
 
-    uint8_t *storage;
+    uint8_t* storage;
 
     struct ProcessorInfo
     {
@@ -181,13 +181,13 @@
     } __attribute__((packed));
 
     void cpuSocket(const uint8_t positionNum, const uint8_t structLen,
-                   uint8_t *dataIn);
+                   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);
+                         uint8_t* dataIn);
     void cpuVersion(const uint8_t positionNum, const uint8_t structLen,
-                    uint8_t *dataIn);
+                    uint8_t* dataIn);
     void cpuCharacteristics(const uint16_t value);
     void cpuStatus(const uint8_t value);
 };
diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
index 772711d..48df53e 100644
--- a/include/mdrv2.hpp
+++ b/include/mdrv2.hpp
@@ -16,6 +16,9 @@
 
 #pragma once
 #include "cpu.hpp"
+#include "dimm.hpp"
+#include "smbios.hpp"
+#include "system.hpp"
 
 #include <sys/stat.h>
 #include <sys/types.h>
diff --git a/include/smbios.hpp b/include/smbios.hpp
index 2e02d82..e6dc743 100644
--- a/include/smbios.hpp
+++ b/include/smbios.hpp
@@ -33,6 +33,15 @@
 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";
+
+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";
+
 enum class DirDataRequestEnum
 {
     dirDataNotRequested = 0x00,
diff --git a/include/system.hpp b/include/system.hpp
index 6d99599..ea1eccf 100644
--- a/include/system.hpp
+++ b/include/system.hpp
@@ -35,13 +35,13 @@
   public:
     System() = delete;
     ~System() = default;
-    System(const System &) = delete;
-    System &operator=(const System &) = delete;
-    System(System &&) = default;
-    System &operator=(System &&) = default;
+    System(const System&) = delete;
+    System& operator=(const System&) = delete;
+    System(System&&) = default;
+    System& operator=(System&&) = default;
 
-    System(sdbusplus::bus::bus &bus, const std::string &objPath,
-           uint8_t *smbiosTableStorage) :
+    System(sdbusplus::bus::bus& bus, const std::string& objPath,
+           uint8_t* smbiosTableStorage) :
         sdbusplus::server::object::object<
             sdbusplus::xyz::openbmc_project::Common::server::UUID>(
             bus, objPath.c_str()),
@@ -63,7 +63,7 @@
     /** @brief Path of the group instance */
     std::string path;
 
-    uint8_t *storage;
+    uint8_t* storage;
 
     struct BIOSInfo
     {
