diff --git a/CMakeLists.txt b/CMakeLists.txt
index d2a8b6c..3c801dc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,9 +32,6 @@
 option (BMCWEB_ENABLE_REDFISH_CPU_LOG "Enable CPU log service transactions
        through Redfish.  Paths are under
        '/redfish/v1/Systems/system/LogServices/Crashdump'." OFF)
-option (BMCWEB_ENABLE_REDFISH_ONE_CHASSIS "Enable Redfish to assume only one
-       chassis is present.  All sensors will be assumed to be under this
-       chassis.  The chassis path is '/redfish/v1/Chassis/chassis'." OFF)
 option (BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES "Enable DBUS log service
         transactions through Redfish. Paths are under
         '/redfish/v1/Systems/system/LogServices/EventLog/Entries'." OFF)
@@ -270,7 +267,6 @@
     $<$<BOOL:${BMCWEB_ENABLE_REDFISH_RAW_PECI}>: -DBMCWEB_ENABLE_REDFISH_RAW_PECI>
     $<$<BOOL:${BMCWEB_ENABLE_REDFISH_CPU_LOG}>: -DBMCWEB_ENABLE_REDFISH_CPU_LOG>
     $<$<BOOL:${BMCWEB_ENABLE_REDFISH_BMC_JOURNAL}>: -DBMCWEB_ENABLE_REDFISH_BMC_JOURNAL>
-    $<$<BOOL:${BMCWEB_ENABLE_REDFISH_ONE_CHASSIS}>: -DBMCWEB_ENABLE_REDFISH_ONE_CHASSIS>
     $<$<BOOL:${BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES}>: -DBMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES>
 
 )
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index 5cc4531..ae3201a 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -181,14 +181,6 @@
             "/redfish/v1/$metadata#ChassisCollection.ChassisCollection";
         res.jsonValue["Name"] = "Chassis Collection";
 
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        // Assume one Chassis named "chassis"
-        res.jsonValue["Members@odata.count"] = 1;
-        res.jsonValue["Members"] = {
-            {{"@odata.id", "/redfish/v1/Chassis/chassis"}}};
-        res.end();
-        return;
-#endif
         const std::array<const char *, 3> interfaces = {
             "xyz.openbmc_project.Inventory.Item.Board",
             "xyz.openbmc_project.Inventory.Item.Chassis",
@@ -268,16 +260,6 @@
             return;
         }
         const std::string &chassisId = params[0];
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        // In a one chassis system the only supported name is "chassis"
-        if (chassisId != "chassis")
-        {
-            messages::resourceNotFound(res, "#Chassis.v1_4_0.Chassis",
-                                       chassisId);
-            res.end();
-            return;
-        }
-#endif
 
         auto asyncResp = std::make_shared<AsyncResp>(res);
         crow::connections::systemBus->async_method_call(
@@ -304,13 +286,11 @@
                         std::pair<std::string, std::vector<std::string>>>
                         &connectionNames = object.second;
 
-// If only one chassis, just select the first one
-#ifndef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
                     if (!boost::ends_with(path, chassisId))
                     {
                         continue;
                     }
-#endif
+
                     if (connectionNames.size() < 1)
                     {
                         BMCWEB_LOG_ERROR << "Only got "
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 65bea03..2df6034 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -989,11 +989,7 @@
         res.jsonValue["Links"]["ManagerForServers@odata.count"] = 1;
         res.jsonValue["Links"]["ManagerForServers"] = {
             {{"@odata.id", "/redfish/v1/Systems/system"}}};
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        res.jsonValue["Links"]["ManagerForChassis@odata.count"] = 1;
-        res.jsonValue["Links"]["ManagerForChassis"] = {
-            {{"@odata.id", "/redfish/v1/Chassis/chassis"}}};
-#endif
+
         std::shared_ptr<AsyncResp> asyncResp = std::make_shared<AsyncResp>(res);
 
         crow::connections::systemBus->async_method_call(
diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp
index d80ace7..2184114 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -51,16 +51,6 @@
             return;
         }
         const std::string& chassis_name = params[0];
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        // In a one chassis system the only supported name is "chassis"
-        if (chassis_name != "chassis")
-        {
-            messages::resourceNotFound(res, "#Chassis.v1_4_0.Chassis",
-                                       chassis_name);
-            res.end();
-            return;
-        }
-#endif
 
         auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
             res, chassis_name, typeList, "Power");
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 69ee983..6fba7c0 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -28,8 +28,6 @@
 namespace redfish
 {
 
-constexpr const char* dbusSensorPrefix = "/xyz/openbmc_project/sensors/";
-
 using GetSubTreeType = std::vector<
     std::pair<std::string,
               std::vector<std::pair<std::string, std::vector<std::string>>>>>;
@@ -172,65 +170,6 @@
 }
 
 /**
- * @brief Gets all DBus sensor names.
- *
- * Finds the sensor names asynchronously.  Invokes callback when information has
- * been obtained.
- *
- * The callback must have the following signature:
- *   @code
- *   callback(boost::container::flat_set<std::string>& sensorNames)
- *   @endcode
- *
- * @param SensorsAsyncResp Pointer to object holding response data.
- * @param callback Callback to invoke when sensor names obtained.
- */
-template <typename Callback>
-void getAllSensors(std::shared_ptr<SensorsAsyncResp> SensorsAsyncResp,
-                   Callback&& callback)
-{
-    BMCWEB_LOG_DEBUG << "getAllSensors enter";
-    const std::array<std::string, 1> interfaces = {
-        "xyz.openbmc_project.Sensor.Value"};
-
-    // Response handler for GetSubTreePaths DBus method
-    auto respHandler = [callback{std::move(callback)}, SensorsAsyncResp](
-                           const boost::system::error_code ec,
-                           const std::vector<std::string>& sensorList) {
-        BMCWEB_LOG_DEBUG << "getAllSensors respHandler enter";
-        if (ec)
-        {
-            messages::internalError(SensorsAsyncResp->res);
-            BMCWEB_LOG_ERROR << "getAllSensors respHandler: DBus error " << ec;
-            return;
-        }
-        boost::container::flat_set<std::string> sensorNames;
-        for (const std::string& sensor : sensorList)
-        {
-            std::size_t lastPos = sensor.rfind("/");
-            if (lastPos == std::string::npos)
-            {
-                BMCWEB_LOG_ERROR << "Failed to find '/' in " << sensor;
-                continue;
-            }
-            std::string sensorName = sensor.substr(lastPos + 1);
-            sensorNames.emplace(sensorName);
-            BMCWEB_LOG_DEBUG << "Added sensor name " << sensorName;
-        }
-        callback(sensorNames);
-        BMCWEB_LOG_DEBUG << "getAllSensors respHandler exit";
-    };
-
-    // Query mapper for all DBus sensor object paths
-    crow::connections::systemBus->async_method_call(
-        std::move(respHandler), "xyz.openbmc_project.ObjectMapper",
-        "/xyz/openbmc_project/object_mapper",
-        "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
-        "/xyz/openbmc_project/sensors", int32_t(0), interfaces);
-    BMCWEB_LOG_DEBUG << "getAllSensors exit";
-}
-
-/**
  * @brief Shrinks the list of sensors for processing
  * @param SensorsAysncResp  The class holding the Redfish response
  * @param allSensors  A list of all the sensors associated to the
@@ -1076,13 +1015,8 @@
             BMCWEB_LOG_DEBUG << "getChassisCb exit";
         };
 
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-    // Get all sensor names
-    getAllSensors(SensorsAsyncResp, std::move(getChassisCb));
-#else
-    // Get sensor names in chassis
+    // Get set of sensors in chassis
     getChassis(SensorsAsyncResp, std::move(getChassisCb));
-#endif
     BMCWEB_LOG_DEBUG << "getChassisData exit";
 };
 
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 236767c..8019d8c 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -1139,11 +1139,6 @@
         res.jsonValue["LogServices"] = {
             {"@odata.id", "/redfish/v1/Systems/system/LogServices"}};
 
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        res.jsonValue["Links"]["Chassis"] = {
-            {{"@odata.id", "/redfish/v1/Chassis/chassis"}}};
-#endif
-
         auto asyncResp = std::make_shared<AsyncResp>(res);
 
         getLedGroupIdentify(
diff --git a/redfish-core/lib/thermal.hpp b/redfish-core/lib/thermal.hpp
index 7c84039..384fe1a 100644
--- a/redfish-core/lib/thermal.hpp
+++ b/redfish-core/lib/thermal.hpp
@@ -51,16 +51,6 @@
             return;
         }
         const std::string& chassisName = params[0];
-#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
-        // In a one chassis system the only supported name is "chassis"
-        if (chassisName != "chassis")
-        {
-            messages::resourceNotFound(res, "#Chassis.v1_4_0.Chassis",
-                                       chassisName);
-            res.end();
-            return;
-        }
-#endif
 
         auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
             res, chassisName, typeList, "Thermal");
