diff --git a/CMakeLists.txt b/CMakeLists.txt
index 56a2d91..1300c23 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -32,6 +32,9 @@
 option (BMCWEB_ENABLE_REDFISH_CPU_LOG "Enable CPU log service transactions
        through Redfish.  Paths are under
        '/redfish/v1/Systems/system/LogServices/CpuLog'." 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)
 
 # Insecure options.  Every option that starts with a BMCWEB_INSECURE flag should
 # not be enabled by default for any platform, unless the author fully
@@ -262,4 +265,5 @@
     $<$<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>
 )
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index 7f58ab5..d24e641 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -131,16 +131,25 @@
     void doGet(crow::Response &res, const crow::Request &req,
                const std::vector<std::string> &params) override
     {
-        const std::array<const char *, 3> interfaces = {
-            "xyz.openbmc_project.Inventory.Item.Board",
-            "xyz.openbmc_project.Inventory.Item.Chassis",
-            "xyz.openbmc_project.Inventory.Item.PowerSupply"};
         res.jsonValue["@odata.type"] = "#ChassisCollection.ChassisCollection";
         res.jsonValue["@odata.id"] = "/redfish/v1/Chassis";
         res.jsonValue["@odata.context"] =
             "/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",
+            "xyz.openbmc_project.Inventory.Item.PowerSupply"};
+
         auto asyncResp = std::make_shared<AsyncResp>(res);
         crow::connections::systemBus->async_method_call(
             [asyncResp](const boost::system::error_code ec,
@@ -215,6 +224,16 @@
             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
 
         res.jsonValue["@odata.type"] = "#Chassis.v1_4_0.Chassis";
         res.jsonValue["@odata.id"] = "/redfish/v1/Chassis/" + chassisId;
@@ -249,10 +268,13 @@
                         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 936d655..f9c2f38 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -968,11 +968,14 @@
             "GracefulRestart"};
 
         res.jsonValue["DateTime"] = getDateTime();
-        res.jsonValue["Links"] = {
-            {"ManagerForServers@odata.count", 1},
-            {"ManagerForServers",
-             {{{"@odata.id", "/redfish/v1/Systems/system"}}}},
-            {"ManagerForServers", nlohmann::json::array()}};
+        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 c2f9b43..ebfac98 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -51,6 +51,16 @@
             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
 
         res.jsonValue["@odata.id"] =
             "/redfish/v1/Chassis/" + chassis_name + "/Power";
@@ -58,6 +68,10 @@
         res.jsonValue["@odata.context"] = "/redfish/v1/$metadata#Power.Power";
         res.jsonValue["Id"] = "Power";
         res.jsonValue["Name"] = "Power";
+#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
+        res.end();
+        return;
+#endif
         auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
             res, chassis_name, typeList, "Power");
         // TODO Need to retrieve Power Control information.
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 737aa3a..255c094 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -1147,6 +1147,11 @@
         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 d18b62d..5c0aa5a 100644
--- a/redfish-core/lib/thermal.hpp
+++ b/redfish-core/lib/thermal.hpp
@@ -51,6 +51,16 @@
             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
 
         res.jsonValue["@odata.type"] = "#Thermal.v1_4_0.Thermal";
         res.jsonValue["@odata.context"] =
@@ -60,7 +70,10 @@
 
         res.jsonValue["@odata.id"] =
             "/redfish/v1/Chassis/" + chassisName + "/Thermal";
-
+#ifdef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
+        res.end();
+        return;
+#endif
         auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
             res, chassisName, typeList, "Thermal");
 
