diff --git a/app/channel.cpp b/app/channel.cpp
index 5da9739..c22bd8d 100644
--- a/app/channel.cpp
+++ b/app/channel.cpp
@@ -16,7 +16,7 @@
 #include <string>
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
 
 namespace cipher
 {
diff --git a/app/watchdog.cpp b/app/watchdog.cpp
index 2f6d883..22ad30d 100644
--- a/app/watchdog.cpp
+++ b/app/watchdog.cpp
@@ -17,7 +17,7 @@
 using phosphor::logging::commit;
 using phosphor::logging::level;
 using phosphor::logging::log;
-using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+using sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 static bool lastCallSuccessful = false;
 
diff --git a/app/watchdog_service.cpp b/app/watchdog_service.cpp
index f9fb625..744ee79 100644
--- a/app/watchdog_service.cpp
+++ b/app/watchdog_service.cpp
@@ -17,9 +17,9 @@
 using phosphor::logging::entry;
 using phosphor::logging::level;
 using phosphor::logging::log;
-using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
-using sdbusplus::xyz::openbmc_project::State::server::convertForMessage;
-using sdbusplus::xyz::openbmc_project::State::server::Watchdog;
+using sdbusplus::common::xyz::openbmc_project::state::convertForMessage;
+using sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
+using sdbusplus::server::xyz::openbmc_project::state::Watchdog;
 
 static constexpr char wd_path[] = "/xyz/openbmc_project/watchdog/host0";
 static constexpr char wd_intf[] = "xyz.openbmc_project.State.Watchdog";
diff --git a/app/watchdog_service.hpp b/app/watchdog_service.hpp
index f466ec7..b1f490a 100644
--- a/app/watchdog_service.hpp
+++ b/app/watchdog_service.hpp
@@ -14,9 +14,9 @@
     WatchdogService();
 
     using Action =
-        sdbusplus::xyz::openbmc_project::State::server::Watchdog::Action;
+        sdbusplus::server::xyz::openbmc_project::state::Watchdog::Action;
     using TimerUse =
-        sdbusplus::xyz::openbmc_project::State::server::Watchdog::TimerUse;
+        sdbusplus::server::xyz::openbmc_project::state::Watchdog::TimerUse;
 
     /** @brief Resets the time remaining on the watchdog.
      *         Equivalent to setTimeRemaining(getInterval()).
diff --git a/apphandler.cpp b/apphandler.cpp
index c4cdc2b..20a529d 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -60,11 +60,11 @@
 void register_netfn_app_functions() __attribute__((constructor));
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
-using Version = sdbusplus::xyz::openbmc_project::Software::server::Version;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
+using Version = sdbusplus::server::xyz::openbmc_project::software::Version;
 using Activation =
-    sdbusplus::xyz::openbmc_project::Software::server::Activation;
-using BMC = sdbusplus::xyz::openbmc_project::State::server::BMC;
+    sdbusplus::server::xyz::openbmc_project::software::Activation;
+using BMC = sdbusplus::server::xyz::openbmc_project::state::BMC;
 namespace fs = std::filesystem;
 
 #ifdef ENABLE_I2C_WHITELIST_CHECK
@@ -214,7 +214,7 @@
 
 namespace acpi_state
 {
-using namespace sdbusplus::xyz::openbmc_project::Control::Power::server;
+using namespace sdbusplus::server::xyz::openbmc_project::control::power;
 
 const static constexpr char* acpiObjPath =
     "/xyz/openbmc_project/control/host0/acpi_power_state";
@@ -755,7 +755,7 @@
 static constexpr size_t uuidBinaryLength = 16;
 static std::array<uint8_t, uuidBinaryLength> rfc4122ToIpmi(std::string rfc4122)
 {
-    using Argument = xyz::openbmc_project::Common::InvalidArgument;
+    using Argument = xyz::openbmc_project::common::InvalidArgument;
     // UUID is in RFC4122 format. Ex: 61a39523-78f2-11e5-9862-e6402cfc3223
     // Per IPMI Spec 2.0 need to convert to 16 hex bytes and reverse the byte
     // order
diff --git a/chassishandler.cpp b/chassishandler.cpp
index 89d3e00..ea233bf 100644
--- a/chassishandler.cpp
+++ b/chassishandler.cpp
@@ -119,13 +119,12 @@
     "/xyz/openbmc_project/Chassis/Buttons/Reset0";
 
 // Phosphor Host State manager
-namespace State = sdbusplus::xyz::openbmc_project::State::server;
-
+namespace State = sdbusplus::server::xyz::openbmc_project::state;
 namespace fs = std::filesystem;
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
-using namespace sdbusplus::xyz::openbmc_project::Control::Boot::server;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
+using namespace sdbusplus::server::xyz::openbmc_project::control::boot;
 
 namespace chassis
 {
@@ -824,7 +823,9 @@
     constexpr auto hostStateIntf = "xyz.openbmc_project.State.Host";
 
     // Convert to string equivalent of the passed in transition enum.
-    auto request = State::convertForMessage(transition);
+    auto request =
+        sdbusplus::common::xyz::openbmc_project::state::convertForMessage(
+            transition);
 
     std::string service;
     boost::system::error_code ec = ipmi::getService(ctx, hostStateIntf,
@@ -863,7 +864,9 @@
                                                     chassisStatePath, service);
 
     // Convert to string equivalent of the passed in transition enum.
-    auto request = State::convertForMessage(transition);
+    auto request =
+        sdbusplus::common::xyz::openbmc_project::state::convertForMessage(
+            transition);
 
     if (!ec)
     {
@@ -921,7 +924,7 @@
 namespace power_policy
 {
 
-using namespace sdbusplus::xyz::openbmc_project::Control::Power::server;
+using namespace sdbusplus::server::xyz::openbmc_project::control::power;
 using IpmiValue = uint8_t;
 using DbusValue = RestorePolicy::Policy;
 
@@ -1518,7 +1521,7 @@
 namespace boot_options
 {
 
-using namespace sdbusplus::xyz::openbmc_project::Control::Boot::server;
+using namespace sdbusplus::server::xyz::openbmc_project::control::boot;
 using IpmiValue = uint8_t;
 constexpr auto ipmiDefault = 0;
 
diff --git a/dcmihandler.cpp b/dcmihandler.cpp
index bbbf09a..6597865 100644
--- a/dcmihandler.cpp
+++ b/dcmihandler.cpp
@@ -19,10 +19,10 @@
 #include <variant>
 
 using namespace phosphor::logging;
-using sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface;
+using sdbusplus::server::xyz::openbmc_project::network::EthernetInterface;
 
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 void register_netfn_dcmi_functions() __attribute__((constructor));
 
diff --git a/globalhandler.cpp b/globalhandler.cpp
index 8161988..992bdd8 100644
--- a/globalhandler.cpp
+++ b/globalhandler.cpp
@@ -15,7 +15,7 @@
 static constexpr auto match = "bmc0";
 
 using namespace phosphor::logging;
-using BMC = sdbusplus::xyz::openbmc_project::State::server::BMC;
+using BMC = sdbusplus::server::xyz::openbmc_project::state::BMC;
 
 void register_netfn_global_functions() __attribute__((constructor));
 
diff --git a/host-cmd-manager.cpp b/host-cmd-manager.cpp
index 75cca84..c539aa2 100644
--- a/host-cmd-manager.cpp
+++ b/host-cmd-manager.cpp
@@ -28,7 +28,7 @@
 // For throwing exceptions
 using namespace phosphor::logging;
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 namespace sdbusRule = sdbusplus::bus::match::rules;
 
@@ -169,7 +169,7 @@
 
 void Manager::clearQueueOnPowerOn(sdbusplus::message_t& msg)
 {
-    namespace server = sdbusplus::xyz::openbmc_project::State::server;
+    namespace server = sdbusplus::server::xyz::openbmc_project::state;
 
     ::ipmi::DbusInterface interface;
     ::ipmi::PropertyMap properties;
diff --git a/host-interface.cpp b/host-interface.cpp
index dabaf32..f6ba817 100644
--- a/host-interface.cpp
+++ b/host-interface.cpp
@@ -25,7 +25,7 @@
 using namespace phosphor::logging;
 
 // When you see Base:: you know we're referencing our base class
-namespace Base = sdbusplus::xyz::openbmc_project::Control::server;
+namespace Base = sdbusplus::server::xyz::openbmc_project::control;
 
 // IPMI OEM command.
 // https://github.com/openbmc/openbmc/issues/2082 for handling
diff --git a/host-interface.hpp b/host-interface.hpp
index c4ee1c1..52dbab1 100644
--- a/host-interface.hpp
+++ b/host-interface.hpp
@@ -18,8 +18,8 @@
  */
 class Host :
     public sdbusplus::server::object_t<
-        sdbusplus::xyz::openbmc_project::Control::server::Host,
-        sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware>
+        sdbusplus::server::xyz::openbmc_project::control::Host,
+        sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>
 {
   public:
     /** @brief Constructs Host Control and Condition Interfaces
@@ -29,8 +29,8 @@
      */
     Host(sdbusplus::bus_t& bus, const char* objPath) :
         sdbusplus::server::object_t<
-            sdbusplus::xyz::openbmc_project::Control::server::Host,
-            sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware>(
+            sdbusplus::server::xyz::openbmc_project::control::Host,
+            sdbusplus::server::xyz::openbmc_project::condition::HostFirmware>(
             bus, objPath),
         bus(bus)
     {
diff --git a/libipmid/utils.cpp b/libipmid/utils.cpp
index 1261c2e..1c94aad 100644
--- a/libipmid/utils.cpp
+++ b/libipmid/utils.cpp
@@ -21,7 +21,7 @@
 {
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
 
 namespace network
 {
diff --git a/read_fru_data.cpp b/read_fru_data.cpp
index 25be922..9b8b2ca 100644
--- a/read_fru_data.cpp
+++ b/read_fru_data.cpp
@@ -20,7 +20,7 @@
 
 using namespace phosphor::logging;
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 std::unique_ptr<sdbusplus::bus::match_t> matchPtr
     __attribute__((init_priority(101)));
 
diff --git a/selutility.cpp b/selutility.cpp
index 9684b36..b3bfa3e 100644
--- a/selutility.cpp
+++ b/selutility.cpp
@@ -16,7 +16,7 @@
 extern const ipmi::sensor::InvObjectIDMap invSensors;
 using namespace phosphor::logging;
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 namespace
 {
diff --git a/sensordatahandler.cpp b/sensordatahandler.cpp
index 93ee714..1e196dc 100644
--- a/sensordatahandler.cpp
+++ b/sensordatahandler.cpp
@@ -18,7 +18,7 @@
 
 using namespace phosphor::logging;
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 static constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
 static constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index 5afa730..c46157c 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -41,7 +41,7 @@
 
 using namespace phosphor::logging;
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 void register_netfn_sen_functions() __attribute__((constructor));
 
@@ -1040,7 +1040,7 @@
 void setUnitFieldsForObject(const ipmi::sensor::Info* info,
                             get_sdr::SensorDataFullRecordBody* body)
 {
-    namespace server = sdbusplus::xyz::openbmc_project::Sensor::server;
+    namespace server = sdbusplus::server::xyz::openbmc_project::sensor;
     try
     {
         auto unit = server::Value::convertUnitFromString(info->unit);
diff --git a/settings.cpp b/settings.cpp
index 25c420e..bf7c11d 100644
--- a/settings.cpp
+++ b/settings.cpp
@@ -10,7 +10,7 @@
 {
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
 
 constexpr auto mapperService = "xyz.openbmc_project.ObjectMapper";
 constexpr auto mapperPath = "/xyz/openbmc_project/object_mapper";
diff --git a/softoff/mainapp.cpp b/softoff/mainapp.cpp
index 7ff90b0..6f1f2d3 100644
--- a/softoff/mainapp.cpp
+++ b/softoff/mainapp.cpp
@@ -72,8 +72,8 @@
          phosphor::ipmi::Base::SoftPowerOff::HostResponse::SoftOffReceived))
     {
         using error =
-            sdbusplus::xyz::openbmc_project::State::Host::Error::SoftOffTimeout;
-        using errorMetadata = xyz::openbmc_project::State::Host::SoftOffTimeout;
+            sdbusplus::error::xyz::openbmc_project::state::host::SoftOffTimeout;
+        using errorMetadata = xyz::openbmc_project::state::host::SoftOffTimeout;
         report<error>(prev_entry<errorMetadata::TIMEOUT_IN_MSEC>());
         return -1;
     }
diff --git a/softoff/softoff.cpp b/softoff/softoff.cpp
index 7dcde4c..fe915d1 100644
--- a/softoff/softoff.cpp
+++ b/softoff/softoff.cpp
@@ -28,7 +28,7 @@
 {
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Control::server;
+using namespace sdbusplus::server::xyz::openbmc_project::control;
 
 void SoftPowerOff::sendHostShutDownCmd()
 {
@@ -69,7 +69,7 @@
     if (Host::convertResultFromString(cmdStatus) == Host::Result::Success)
     {
         // Set our internal property indicating we got host attention
-        sdbusplus::xyz::openbmc_project::Ipmi::Internal ::server::SoftPowerOff::
+        sdbusplus::server::xyz::openbmc_project::ipmi::internal::SoftPowerOff::
             responseReceived(HostResponse::SoftOffReceived);
 
         // Start timer for host shutdown
@@ -128,7 +128,7 @@
         completed = true;
     }
 
-    return sdbusplus::xyz::openbmc_project::Ipmi::Internal ::server::
+    return sdbusplus::server::xyz::openbmc_project::ipmi::internal::
         SoftPowerOff::responseReceived(response);
 }
 
diff --git a/softoff/softoff.hpp b/softoff/softoff.hpp
index c78710b..d525d11 100644
--- a/softoff/softoff.hpp
+++ b/softoff/softoff.hpp
@@ -14,8 +14,8 @@
 namespace ipmi
 {
 
-namespace Base = sdbusplus::xyz::openbmc_project::Ipmi::Internal::server;
-using namespace sdbusplus::xyz::openbmc_project::Control::server;
+namespace Base = sdbusplus::server::xyz::openbmc_project::ipmi::internal;
+using namespace sdbusplus::server::xyz::openbmc_project::control;
 
 namespace sdbusRule = sdbusplus::bus::match::rules;
 
diff --git a/storageaddsel.cpp b/storageaddsel.cpp
index b2ff317..fc7e9c0 100644
--- a/storageaddsel.cpp
+++ b/storageaddsel.cpp
@@ -21,7 +21,7 @@
 
 using namespace std;
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Logging::server;
+using namespace sdbusplus::server::xyz::openbmc_project::logging;
 
 std::string readESEL(const char* fileName)
 {
@@ -61,8 +61,8 @@
     }
     data[eSELData.size() * byteSeparator] = '\0';
 
-    using error = sdbusplus::org::open_power::Host::Error::MaintenanceProcedure;
-    using metadata = org::open_power::Host::MaintenanceProcedure;
+    using error = sdbusplus::error::org::open_power::host::MaintenanceProcedure;
+    using metadata = org::open_power::host::MaintenanceProcedure;
 
     report<error>(metadata::ESEL(data.get()),
                   metadata::PROCEDURE(static_cast<uint32_t>(procedureNum)));
diff --git a/storagehandler.cpp b/storagehandler.cpp
index b9f654c..0057b77 100644
--- a/storagehandler.cpp
+++ b/storagehandler.cpp
@@ -62,12 +62,12 @@
 } // namespace
 
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 using namespace phosphor::logging;
 using namespace ipmi::fru;
-using namespace xyz::openbmc_project::Logging::SEL;
+using namespace xyz::openbmc_project::logging::sel;
 using SELCreated =
-    sdbusplus::xyz::openbmc_project::Logging::SEL::Error::Created;
+    sdbusplus::error::xyz::openbmc_project::logging::sel::Created;
 
 using SELRecordID = uint16_t;
 using SELEntry = ipmi::sel::SELEventRecordFormat;
diff --git a/systemintfcmds.cpp b/systemintfcmds.cpp
index 1ab2322..8e1cdb0 100644
--- a/systemintfcmds.cpp
+++ b/systemintfcmds.cpp
@@ -12,7 +12,7 @@
 
 void register_netfn_app_functions() __attribute__((constructor));
 
-using namespace sdbusplus::xyz::openbmc_project::Control::server;
+using namespace sdbusplus::server::xyz::openbmc_project::control;
 
 // For accessing Host command manager
 using cmdManagerPtr = std::unique_ptr<phosphor::host::command::Manager>;
diff --git a/transporthandler.cpp b/transporthandler.cpp
index dd2ac14..a63e7c4 100644
--- a/transporthandler.cpp
+++ b/transporthandler.cpp
@@ -5,10 +5,10 @@
 using phosphor::logging::entry;
 using phosphor::logging::level;
 using phosphor::logging::log;
-using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
-using sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface;
-using sdbusplus::xyz::openbmc_project::Network::server::IP;
-using sdbusplus::xyz::openbmc_project::Network::server::Neighbor;
+using sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
+using sdbusplus::server::xyz::openbmc_project::network::EthernetInterface;
+using sdbusplus::server::xyz::openbmc_project::network::IP;
+using sdbusplus::server::xyz::openbmc_project::network::Neighbor;
 
 namespace cipher
 {
@@ -212,7 +212,7 @@
         nextDhcp = currentDhcp;
     }
     std::string newDhcp =
-        sdbusplus::xyz::openbmc_project::Network::server::convertForMessage(
+        sdbusplus::common::xyz::openbmc_project::network::convertForMessage(
             nextDhcp);
     setDbusProperty(bus, params.service, params.logicalPath, INTF_ETHERNET,
                     "DHCPEnabled", newDhcp);
@@ -261,7 +261,7 @@
     }
 
     std::string newDhcp =
-        sdbusplus::xyz::openbmc_project::Network::server::convertForMessage(
+        sdbusplus::common::xyz::openbmc_project::network::convertForMessage(
             nextDhcp);
     setDbusProperty(bus, params.service, params.logicalPath, INTF_ETHERNET,
                     "DHCPEnabled", newDhcp);
@@ -348,7 +348,7 @@
                                       params.logicalPath.c_str(),
                                       INTF_IP_CREATE, "IP");
     std::string protocol =
-        sdbusplus::xyz::openbmc_project::Network::server::convertForMessage(
+        sdbusplus::common::xyz::openbmc_project::network::convertForMessage(
             AddrFamily<family>::protocol);
     newreq.append(protocol, addrToString<family>(address), prefix, "");
     bus.call_noreply(newreq);
@@ -491,7 +491,7 @@
             return IPv6Source::SLAAC;
         default:
         {
-            auto originStr = sdbusplus::xyz::openbmc_project::Network::server::
+            auto originStr = sdbusplus::common::xyz::openbmc_project::network::
                 convertForMessage(origin);
             log<level::ERR>(
                 "Invalid IP::AddressOrigin conversion to IPv6Source",
diff --git a/transporthandler.hpp b/transporthandler.hpp
index 8e1c4fb..f80332d 100644
--- a/transporthandler.hpp
+++ b/transporthandler.hpp
@@ -266,7 +266,7 @@
 {
     using addr = in_addr;
     static constexpr auto protocol =
-        sdbusplus::xyz::openbmc_project::Network::server::IP::Protocol::IPv4;
+        sdbusplus::server::xyz::openbmc_project::network::IP::Protocol::IPv4;
     static constexpr size_t maxStrLen = INET6_ADDRSTRLEN;
     static constexpr uint8_t defaultPrefix = 32;
     static constexpr char propertyGateway[] = "DefaultGateway";
@@ -278,7 +278,7 @@
 {
     using addr = in6_addr;
     static constexpr auto protocol =
-        sdbusplus::xyz::openbmc_project::Network::server::IP::Protocol::IPv6;
+        sdbusplus::server::xyz::openbmc_project::network::IP::Protocol::IPv6;
     static constexpr size_t maxStrLen = INET6_ADDRSTRLEN;
     static constexpr uint8_t defaultPrefix = 128;
     static constexpr char propertyGateway[] = "DefaultGateway6";
@@ -299,21 +299,21 @@
 {
     std::string path;
     typename AddrFamily<family>::addr address;
-    sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin origin;
+    sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin origin;
     uint8_t prefix;
 };
 
 /** @brief Valid address origins for IPv6 */
 static inline const std::unordered_set<
-    sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin>
-    originsV6Static = {sdbusplus::xyz::openbmc_project::Network::server::IP::
+    sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin>
+    originsV6Static = {sdbusplus::server::xyz::openbmc_project::network::IP::
                            AddressOrigin::Static};
 static inline const std::unordered_set<
-    sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin>
+    sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin>
     originsV6Dynamic = {
-        sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin::
+        sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin::
             DHCP,
-        sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin::
+        sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin::
             SLAAC,
 };
 
@@ -435,7 +435,7 @@
             phosphor::logging::entry("FAMILY=%d", family),
             phosphor::logging::entry("ADDRESS=%s", address));
         phosphor::logging::elog<
-            sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure>();
+            sdbusplus::error::xyz::openbmc_project::common::InternalFailure>();
     }
     return *ret;
 }
@@ -476,7 +476,7 @@
     [[maybe_unused]] sdbusplus::bus_t& bus,
     [[maybe_unused]] const ChannelParams& params, uint8_t idx,
     const std::unordered_set<
-        sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin>&
+        sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin>&
         origins,
     ObjectLookupCache& ips)
 {
@@ -489,8 +489,8 @@
             continue;
         }
 
-        sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin
-            origin = sdbusplus::xyz::openbmc_project::Network::server::IP::
+        sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin
+            origin = sdbusplus::server::xyz::openbmc_project::network::IP::
                 convertAddressOriginFromString(
                     std::get<std::string>(properties.at("Origin")));
         if (origins.find(origin) == origins.end())
@@ -528,7 +528,7 @@
 auto getIfAddr(
     sdbusplus::bus_t& bus, const ChannelParams& params, uint8_t idx,
     const std::unordered_set<
-        sdbusplus::xyz::openbmc_project::Network::server::IP::AddressOrigin>&
+        sdbusplus::server::xyz::openbmc_project::network::IP::AddressOrigin>&
         origins)
 {
     ObjectLookupCache ips(bus, params, INTF_IP);
@@ -541,7 +541,7 @@
  *  @param[in] params - The parameters for the channel
  *  @return DHCPConf enumeration
  */
-sdbusplus::xyz::openbmc_project::Network::server::EthernetInterface::DHCPConf
+sdbusplus::server::xyz::openbmc_project::network::EthernetInterface::DHCPConf
     getDHCPProperty(sdbusplus::bus_t& bus, const ChannelParams& params);
 
 /** @brief Sets the DHCP v6 state on the given interface
@@ -553,7 +553,7 @@
  *                             False: requestedDhcp assigned unconditionally
  */
 void setDHCPv6Property(sdbusplus::bus_t& bus, const ChannelParams& params,
-                       const sdbusplus::xyz::openbmc_project::Network::server::
+                       const sdbusplus::server::xyz::openbmc_project::network::
                            EthernetInterface::DHCPConf requestedDhcp,
                        const bool defaultMode);
 
@@ -596,9 +596,9 @@
                        const typename AddrFamily<family>::addr& ip,
                        ObjectLookupCache& neighbors)
 {
-    using sdbusplus::xyz::openbmc_project::Network::server::Neighbor;
+    using sdbusplus::server::xyz::openbmc_project::network::Neighbor;
     const auto state =
-        sdbusplus::xyz::openbmc_project::Network::server::convertForMessage(
+        sdbusplus::common::xyz::openbmc_project::network::convertForMessage(
             Neighbor::State::Permanent);
     for (const auto& [path, neighbor] : neighbors)
     {
diff --git a/user_channel/shadowlock.hpp b/user_channel/shadowlock.hpp
index 8b09f21..c869aca 100644
--- a/user_channel/shadowlock.hpp
+++ b/user_channel/shadowlock.hpp
@@ -12,7 +12,7 @@
 {
 
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 using namespace phosphor::logging;
 
 /** @class Lock
diff --git a/user_channel/user_mgmt.cpp b/user_channel/user_mgmt.cpp
index 2e6e841..017b8f6 100644
--- a/user_channel/user_mgmt.cpp
+++ b/user_channel/user_mgmt.cpp
@@ -116,10 +116,10 @@
 using PrivAndGroupType = std::variant<std::string, std::vector<std::string>>;
 
 using NoResource =
-    sdbusplus::xyz::openbmc_project::User::Common::Error::NoResource;
+    sdbusplus::error::xyz::openbmc_project::user::common::NoResource;
 
 using InternalFailure =
-    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+    sdbusplus::error::xyz::openbmc_project::common::InternalFailure;
 
 std::unique_ptr<sdbusplus::bus::match_t> userUpdatedSignal
     __attribute__((init_priority(101)));
@@ -175,7 +175,7 @@
     }
 }
 
-static std::string getUserServiceName()
+std::string getUserServiceName()
 {
     static sdbusplus::bus_t bus(ipmid_get_sd_bus_connection());
     static std::string userMgmtService;
diff --git a/whitelist-filter.cpp b/whitelist-filter.cpp
index 95bdc07..6a2b4f0 100644
--- a/whitelist-filter.cpp
+++ b/whitelist-filter.cpp
@@ -11,7 +11,7 @@
 #include <array>
 
 using namespace phosphor::logging;
-using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+using namespace sdbusplus::error::xyz::openbmc_project::common;
 
 namespace ipmi
 {
@@ -75,7 +75,7 @@
 void WhitelistFilter::cacheRestrictedMode(
     const std::vector<std::string>& devices)
 {
-    using namespace sdbusplus::xyz::openbmc_project::Control::Security::server;
+    using namespace sdbusplus::server::xyz::openbmc_project::control::security;
     std::string restrictionModeSetting;
     std::string restrictionModeService;
 
@@ -131,7 +131,7 @@
 void WhitelistFilter::handleRestrictedModeChange(
     sdbusplus::message_t& m, const std::map<std::string, size_t>& deviceList)
 {
-    using namespace sdbusplus::xyz::openbmc_project::Control::Security::server;
+    using namespace sdbusplus::server::xyz::openbmc_project::control::security;
     std::string intf;
     std::vector<std::pair<std::string, ipmi::Value>> propertyList;
     m.read(intf, propertyList);
