diff --git a/CMakeLists.txt b/CMakeLists.txt
index cdf4622..70fcd44 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,6 +106,7 @@
 target_link_libraries(fru-device stdc++fs)
 target_link_libraries(fru-device ${Boost_LIBRARIES})
 target_link_libraries(fru-device -lsystemd)
+target_link_libraries(fru-device phosphor_dbus)
 
 add_executable(entity-manager src/EntityManager.cpp
                               src/Overlay.cpp
diff --git a/src/FruDevice.cpp b/src/FruDevice.cpp
index 1baea56..ef1eee1 100644
--- a/src/FruDevice.cpp
+++ b/src/FruDevice.cpp
@@ -28,6 +28,7 @@
 #include <sys/ioctl.h>
 #include <regex>
 #include <sys/inotify.h>
+#include <xyz/openbmc_project/Common/error.hpp>
 
 namespace fs = std::experimental::filesystem;
 static constexpr bool DEBUG = false;
@@ -431,16 +432,15 @@
             std::cout << property.first << ": " << property.second << "\n";
         }
     }
-    // baseboard can set this to -1 to not set a bus / address
-    if (bus > 0)
-    {
-        std::stringstream data;
-        data << "0x" << std::hex << bus;
-        iface->register_property("BUS", data.str());
-        data.str("");
-        data << "0x" << std::hex << address;
-        iface->register_property("ADDRESS", data.str());
-    }
+
+    // baseboard will be 0, 0
+    std::stringstream data;
+    data << "0x" << std::hex << bus;
+    iface->register_property("BUS", data.str());
+    data.str("");
+    data << "0x" << std::hex << address;
+    iface->register_property("ADDRESS", data.str());
+
     iface->initialize();
 }
 
@@ -464,6 +464,7 @@
 }
 
 void rescanBusses(
+    BusMap &busMap,
     boost::container::flat_map<std::pair<size_t, size_t>,
                                std::shared_ptr<sdbusplus::asio::dbus_interface>>
         &dbusInterfaceMap,
@@ -487,7 +488,7 @@
         // scanning muxes in reverse order seems to have adverse effects
         // sorting this list seems to be a fix for that
         std::sort(i2cBuses.begin(), i2cBuses.end());
-        BusMap busMap = FindI2CDevices(i2cBuses);
+        busMap = FindI2CDevices(i2cBuses);
 
         for (auto &busIface : dbusInterfaceMap)
         {
@@ -497,6 +498,14 @@
         dbusInterfaceMap.clear();
         UNKNOWN_BUS_OBJECT_COUNT = 0;
 
+        // todo, get this from a more sensable place
+        std::vector<char> baseboardFru;
+        if (readBaseboardFru(baseboardFru))
+        {
+            boost::container::flat_map<int, std::vector<char>> baseboardDev;
+            baseboardDev.emplace(0, baseboardFru);
+            busMap[0] = std::make_shared<DeviceMap>(baseboardDev);
+        }
         for (auto &devicemap : busMap)
         {
             for (auto &device : *devicemap.second)
@@ -506,13 +515,6 @@
                                    device.first);
             }
         }
-        // todo, get this from a more sensable place
-        std::vector<char> baseboardFru;
-        if (readBaseboardFru(baseboardFru))
-        {
-            AddFruObjectToDbus(systemBus, baseboardFru, objServer,
-                               dbusInterfaceMap, -1, -1);
-        }
     } while (pendingCallback);
 }
 
@@ -538,6 +540,7 @@
     boost::container::flat_map<std::pair<size_t, size_t>,
                                std::shared_ptr<sdbusplus::asio::dbus_interface>>
         dbusInterfaceMap;
+    BusMap busmap;
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> iface =
         objServer.add_interface("/xyz/openbmc_project/FruDevice",
@@ -552,7 +555,7 @@
         if (threadRunning.compare_exchange_strong(notRunning, true))
         {
             future = std::async(std::launch::async, [&] {
-                rescanBusses(dbusInterfaceMap, systemBus, objServer,
+                rescanBusses(busmap, dbusInterfaceMap, systemBus, objServer,
                              pendingCallback);
                 threadRunning = false;
             });
@@ -563,6 +566,25 @@
         }
         return;
     });
+
+    iface->register_method(
+        "GetRawFru", [&](const uint8_t &bus, const uint8_t &address) {
+            auto deviceMap = busmap.find(bus);
+            if (deviceMap == busmap.end())
+            {
+                throw sdbusplus::xyz::openbmc_project::Common::Error::
+                    InvalidArgument();
+            }
+            auto device = deviceMap->second->find(address);
+            if (device == deviceMap->second->end())
+            {
+                throw sdbusplus::xyz::openbmc_project::Common::Error::
+                    InvalidArgument();
+            }
+            std::vector<uint8_t> &ret =
+                reinterpret_cast<std::vector<uint8_t> &>(device->second);
+            return ret;
+        });
     iface->initialize();
 
     std::function<void(sdbusplus::message::message & message)> eventHandler =
@@ -580,8 +602,8 @@
                 if (threadRunning.compare_exchange_strong(notRunning, true))
                 {
                     future = std::async(std::launch::async, [&] {
-                        rescanBusses(dbusInterfaceMap, systemBus, objServer,
-                                     pendingCallback);
+                        rescanBusses(busmap, dbusInterfaceMap, systemBus,
+                                     objServer, pendingCallback);
                         threadRunning = false;
                     });
                 }
@@ -641,7 +663,7 @@
             {
                 future = std::async(std::launch::async, [&] {
                     std::this_thread::sleep_for(std::chrono::seconds(2));
-                    rescanBusses(dbusInterfaceMap, systemBus, objServer,
+                    rescanBusses(busmap, dbusInterfaceMap, systemBus, objServer,
                                  pendingCallback);
                     threadRunning = false;
                 });
@@ -656,7 +678,8 @@
 
     dirWatch.async_read_some(boost::asio::buffer(readBuffer), watchI2cBusses);
     // run the initial scan
-    rescanBusses(dbusInterfaceMap, systemBus, objServer, pendingCallback);
+    rescanBusses(busmap, dbusInterfaceMap, systemBus, objServer,
+                 pendingCallback);
 
     io.run();
     return 0;
