diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index 60be584..7acbef5 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -6,6 +6,8 @@
 #include "xyz/openbmc_project/Common/error.hpp"
 #include "xyz/openbmc_project/State/Shutdown/Power/error.hpp"
 
+#include <fmt/format.h>
+
 #include <cereal/archives/json.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 #include <phosphor-logging/lg2.hpp>
@@ -33,13 +35,13 @@
 using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
 using sdbusplus::xyz::openbmc_project::State::Shutdown::Power::Error::Blackout;
 using sdbusplus::xyz::openbmc_project::State::Shutdown::Power::Error::Regulator;
-constexpr auto CHASSIS_STATE_POWEROFF_TGT = "obmc-chassis-poweroff@0.target";
-constexpr auto CHASSIS_STATE_HARD_POWEROFF_TGT =
-    "obmc-chassis-hard-poweroff@0.target";
-constexpr auto CHASSIS_STATE_POWERON_TGT = "obmc-chassis-poweron@0.target";
-constexpr auto RESET_HOST_SENSORS_SVC =
-    "phosphor-reset-sensor-states@0.service";
-
+constexpr auto CHASSIS_STATE_POWEROFF_TGT_FMT =
+    "obmc-chassis-poweroff@{}.target";
+constexpr auto CHASSIS_STATE_HARD_POWEROFF_TGT_FMT =
+    "obmc-chassis-hard-poweroff@{}.target";
+constexpr auto CHASSIS_STATE_POWERON_TGT_FMT = "obmc-chassis-poweron@{}.target";
+constexpr auto RESET_HOST_SENSORS_SVC_FMT =
+    "phosphor-reset-sensor-states@{}.service";
 constexpr auto ACTIVE_STATE = "active";
 constexpr auto ACTIVATING_STATE = "activating";
 
@@ -48,13 +50,6 @@
 constexpr uint STATE_FULLY_CHARGED = 4;
 constexpr uint BATTERY_LVL_FULL = 8;
 
-/* Map a transition to it's systemd target */
-const std::map<server::Chassis::Transition, std::string> SYSTEMD_TARGET_TABLE =
-    {
-        // Use the hard off target to ensure we shutdown immediately
-        {server::Chassis::Transition::Off, CHASSIS_STATE_HARD_POWEROFF_TGT},
-        {server::Chassis::Transition::On, CHASSIS_STATE_POWERON_TGT}};
-
 constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1";
 constexpr auto SYSTEMD_OBJ_PATH = "/org/freedesktop/systemd1";
 constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager";
@@ -85,6 +80,14 @@
     return;
 }
 
+void Chassis::createSystemdTargetTable()
+{
+    systemdTargetTable = {
+        // Use the hard off target to ensure we shutdown immediately
+        {Transition::Off, fmt::format(CHASSIS_STATE_HARD_POWEROFF_TGT_FMT, id)},
+        {Transition::On, fmt::format(CHASSIS_STATE_POWERON_TGT_FMT, id)}};
+}
+
 // TODO - Will be rewritten once sdbusplus client bindings are in place
 //        and persistent storage design is in place and sdbusplus
 //        has read property function
@@ -136,7 +139,7 @@
                         "Chassis power was on before the BMC reboot and it is off now");
 
                     // Reset host sensors since system is off now
-                    startUnit(RESET_HOST_SENSORS_SVC);
+                    startUnit(fmt::format(RESET_HOST_SENSORS_SVC_FMT, id));
 
                     setStateChangeTime();
 
@@ -410,16 +413,17 @@
         return 0;
     }
 
-    if ((newStateUnit == CHASSIS_STATE_POWEROFF_TGT) &&
-        (newStateResult == "done") && (!stateActive(CHASSIS_STATE_POWERON_TGT)))
+    if ((newStateUnit == systemdTargetTable[Transition::Off]) &&
+        (newStateResult == "done") &&
+        (!stateActive(systemdTargetTable[Transition::On])))
     {
         info("Received signal that power OFF is complete");
         this->currentPowerState(server::Chassis::PowerState::Off);
         this->setStateChangeTime();
     }
-    else if ((newStateUnit == CHASSIS_STATE_POWERON_TGT) &&
+    else if ((newStateUnit == systemdTargetTable[Transition::On]) &&
              (newStateResult == "done") &&
-             (stateActive(CHASSIS_STATE_POWERON_TGT)))
+             (stateActive(systemdTargetTable[Transition::On])))
     {
         info("Received signal that power ON is complete");
         this->currentPowerState(server::Chassis::PowerState::On);
@@ -448,7 +452,7 @@
 
     info("Change to Chassis Requested Power State: {REQ_POWER_TRAN}",
          "REQ_POWER_TRAN", value);
-    startUnit(SYSTEMD_TARGET_TABLE.find(value)->second);
+    startUnit(systemdTargetTable.find(value)->second);
     return server::Chassis::requestedPowerTransition(value);
 }
 
diff --git a/chassis_state_manager.hpp b/chassis_state_manager.hpp
index cf59025..b48409b 100644
--- a/chassis_state_manager.hpp
+++ b/chassis_state_manager.hpp
@@ -44,8 +44,9 @@
      *
      * @param[in] bus       - The Dbus bus object
      * @param[in] objPath   - The Dbus object path
+     * @param[in] id        - Chassis id
      */
-    Chassis(sdbusplus::bus::bus& bus, const char* objPath) :
+    Chassis(sdbusplus::bus::bus& bus, const char* objPath, size_t id) :
         ChassisInherit(bus, objPath, true), bus(bus),
         systemdSignals(
             bus,
@@ -54,12 +55,14 @@
                 sdbusRule::interface("org.freedesktop.systemd1.Manager"),
             std::bind(std::mem_fn(&Chassis::sysStateChange), this,
                       std::placeholders::_1)),
-        pohTimer(sdeventplus::Event::get_default(),
-                 std::bind(&Chassis::pohCallback, this), std::chrono::hours{1},
-                 std::chrono::minutes{1})
+        id(id), pohTimer(sdeventplus::Event::get_default(),
+                         std::bind(&Chassis::pohCallback, this),
+                         std::chrono::hours{1}, std::chrono::minutes{1})
     {
         subscribeToSystemdSignals();
 
+        createSystemdTargetTable();
+
         restoreChassisStateChangeTime();
 
         determineInitialState();
@@ -83,6 +86,9 @@
     void startPOHCounter();
 
   private:
+    /** @brief Create systemd target instance names and mapping table */
+    void createSystemdTargetTable();
+
     /** @brief Determine initial chassis state and set internally */
     void determineInitialState();
 
@@ -137,6 +143,12 @@
     /** @brief Watch for any changes to UPS properties  **/
     std::unique_ptr<sdbusplus::bus::match_t> uPowerPropChangeSignal;
 
+    /** @brief Chassis id. **/
+    const size_t id = 0;
+
+    /** @brief Transition state to systemd target mapping table. **/
+    std::map<Transition, std::string> systemdTargetTable;
+
     /** @brief Used to Set value of POHCounter */
     uint32_t pohCounter(uint32_t value) override;
 
diff --git a/chassis_state_manager_main.cpp b/chassis_state_manager_main.cpp
index c78eea4..eac4fd4 100644
--- a/chassis_state_manager_main.cpp
+++ b/chassis_state_manager_main.cpp
@@ -2,26 +2,53 @@
 
 #include "chassis_state_manager.hpp"
 
+#include <getopt.h>
+
 #include <sdbusplus/bus.hpp>
 
 #include <cstdlib>
 #include <exception>
 #include <iostream>
 
-int main()
+int main(int argc, char** argv)
 {
+    size_t chassisId = 0;
+    int arg;
+    int optIndex = 0;
+    static struct option longOpts[] = {{"chassis", required_argument, 0, 'c'},
+                                       {0, 0, 0, 0}};
+
+    while ((arg = getopt_long(argc, argv, "c:", longOpts, &optIndex)) != -1)
+    {
+        switch (arg)
+        {
+            case 'c':
+                chassisId = std::stoul(optarg);
+                break;
+            default:
+                break;
+        }
+    }
+
     auto bus = sdbusplus::bus::new_default();
 
-    // For now, we only have one instance of the chassis
-    auto objPathInst = std::string{CHASSIS_OBJPATH} + '0';
+    auto chassisBusName =
+        std::string{CHASSIS_BUSNAME} + std::to_string(chassisId);
+    auto objPathInst = std::string{CHASSIS_OBJPATH} + std::to_string(chassisId);
 
     // Add sdbusplus ObjectManager.
     sdbusplus::server::manager::manager objManager(bus, objPathInst.c_str());
+    phosphor::state::manager::Chassis manager(bus, objPathInst.c_str(),
+                                              chassisId);
 
-    phosphor::state::manager::Chassis manager(bus, objPathInst.c_str());
+    // For backwards compatibility, request a busname without chassis id if
+    // input id is 0.
+    if (chassisId == 0)
+    {
+        bus.request_name(CHASSIS_BUSNAME);
+    }
 
-    bus.request_name(CHASSIS_BUSNAME);
+    bus.request_name(chassisBusName.c_str());
     manager.startPOHCounter();
-
     return 0;
 }
diff --git a/host_check.cpp b/host_check.cpp
index a4f8e0d..c3bf068 100644
--- a/host_check.cpp
+++ b/host_check.cpp
@@ -39,7 +39,7 @@
 constexpr auto PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties";
 
 constexpr auto CHASSIS_STATE_SVC = "xyz.openbmc_project.State.Chassis";
-constexpr auto CHASSIS_STATE_PATH = "/xyz/openbmc_project/state/chassis0";
+constexpr auto CHASSIS_STATE_PATH = "/xyz/openbmc_project/state/chassis";
 constexpr auto CHASSIS_STATE_INTF = "xyz.openbmc_project.State.Chassis";
 constexpr auto CHASSIS_STATE_POWER_PROP = "CurrentPowerState";
 
@@ -124,11 +124,20 @@
 }
 
 // Helper function to check if chassis power is on
-bool isChassiPowerOn(sdbusplus::bus::bus& bus)
+bool isChassiPowerOn(sdbusplus::bus::bus& bus, size_t id)
 {
+    auto svcname = std::string{CHASSIS_STATE_SVC};
+    auto objpath = std::string{CHASSIS_STATE_PATH};
+
+    if (id != 0)
+    {
+        svcname += std::to_string(id);
+        objpath += std::to_string(id);
+    }
+
     try
     {
-        auto method = bus.new_method_call(CHASSIS_STATE_SVC, CHASSIS_STATE_PATH,
+        auto method = bus.new_method_call(svcname.c_str(), objpath.c_str(),
                                           PROPERTY_INTERFACE, "Get");
         method.append(CHASSIS_STATE_INTF, CHASSIS_STATE_POWER_PROP);
 
@@ -147,21 +156,20 @@
     {
         error("Error reading Chassis Power State, error: {ERROR}, "
               "service: {SERVICE} path: {PATH}",
-              "ERROR", e, "SERVICE", CHASSIS_STATE_SVC, "PATH",
-              CHASSIS_STATE_PATH);
+              "ERROR", e, "SERVICE", svcname.c_str(), "PATH", objpath.c_str());
         throw;
     }
     return false;
 }
 
-bool isHostRunning()
+bool isHostRunning(size_t id)
 {
     info("Check if host is running");
 
     auto bus = sdbusplus::bus::new_default();
 
     // No need to check if chassis power is not on
-    if (!isChassiPowerOn(bus))
+    if (!isChassiPowerOn(bus, id))
     {
         info("Chassis power not on, exit");
         return false;
diff --git a/host_check.hpp b/host_check.hpp
index 1a64912..9ef7302 100644
--- a/host_check.hpp
+++ b/host_check.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <cstddef>
+
 namespace phosphor
 {
 namespace state
@@ -11,7 +13,7 @@
  *
  * @return True if host running, False otherwise
  */
-bool isHostRunning();
+bool isHostRunning(size_t hostId = 0);
 
 } // namespace manager
 } // namespace state
diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 3c2775d..b098857 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -79,7 +79,7 @@
 {
 
     if (stateActive(getTarget(server::Host::HostState::Running)) ||
-        isHostRunning())
+        isHostRunning(id))
     {
         info("Initial Host State will be Running");
         server::Host::currentHostState(HostState::Running);
diff --git a/meson.build b/meson.build
index a1a6c55..cf019df 100644
--- a/meson.build
+++ b/meson.build
@@ -105,7 +105,7 @@
             'utils.cpp',
             dependencies: [
             sdbusplus, sdeventplus, phosphorlogging,
-            phosphordbusinterfaces, cppfs, libgpiod
+            phosphordbusinterfaces, cppfs, libgpiod, fmt
             ],
     implicit_include_directories: true,
     install: true
diff --git a/service_files/meson.build b/service_files/meson.build
index 2df30e6..87659ca 100644
--- a/service_files/meson.build
+++ b/service_files/meson.build
@@ -7,7 +7,7 @@
     'phosphor-reset-host-running@.service',
     'phosphor-reset-sensor-states@.service',
     'xyz.openbmc_project.State.BMC.service',
-    'xyz.openbmc_project.State.Chassis.service',
+    'xyz.openbmc_project.State.Chassis@.service',
     'xyz.openbmc_project.State.Host@.service',
     'xyz.openbmc_project.State.Hypervisor.service',
     'xyz.openbmc_project.State.ScheduledHostTransition.service',
diff --git a/service_files/xyz.openbmc_project.State.Chassis.service b/service_files/xyz.openbmc_project.State.Chassis.service
deleted file mode 100644
index 7594c48..0000000
--- a/service_files/xyz.openbmc_project.State.Chassis.service
+++ /dev/null
@@ -1,17 +0,0 @@
-[Unit]
-Description=Phosphor Chassis State Manager
-Before=mapper-wait@-xyz-openbmc_project-state-chassis.service
-Wants=obmc-mapper.target
-After=obmc-mapper.target
-After=org.openbmc.control.Power@0.service
-Wants=xyz.openbmc_project.Logging.service
-After=xyz.openbmc_project.Logging.service
-
-[Service]
-ExecStart=/usr/bin/phosphor-chassis-state-manager
-Restart=always
-Type=dbus
-BusName=xyz.openbmc_project.State.Chassis
-
-[Install]
-WantedBy=multi-user.target
diff --git a/service_files/xyz.openbmc_project.State.Chassis@.service b/service_files/xyz.openbmc_project.State.Chassis@.service
new file mode 100644
index 0000000..5f4796c
--- /dev/null
+++ b/service_files/xyz.openbmc_project.State.Chassis@.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Phosphor Chassis%i State Manager
+Before=mapper-wait@-xyz-openbmc_project-state-chassis%i.service
+Wants=obmc-mapper.target
+After=obmc-mapper.target
+After=org.openbmc.control.Power@%i.service
+Wants=xyz.openbmc_project.Logging.service
+After=xyz.openbmc_project.Logging.service
+
+[Service]
+ExecStart=/usr/bin/phosphor-chassis-state-manager --chassis %i
+Restart=always
+Type=dbus
+BusName=xyz.openbmc_project.State.Chassis%i
+
+[Install]
+WantedBy=multi-user.target
