diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 119c6ad..3c2775d 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -5,6 +5,7 @@
 #include "host_check.hpp"
 #include "utils.hpp"
 
+#include <fmt/format.h>
 #include <stdio.h>
 #include <systemd/sd-bus.h>
 
@@ -48,40 +49,9 @@
 namespace fs = std::experimental::filesystem;
 using sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
 
-// host-shutdown notifies host of shutdown and that leads to host-stop being
-// called so initiate a host shutdown with the -shutdown target and consider the
-// host shut down when the -stop target is complete
-constexpr auto HOST_STATE_SOFT_POWEROFF_TGT = "obmc-host-shutdown@0.target";
-constexpr auto HOST_STATE_POWEROFF_TGT = "obmc-host-stop@0.target";
-constexpr auto HOST_STATE_POWERON_TGT = "obmc-host-start@0.target";
-constexpr auto HOST_STATE_POWERON_MIN_TGT = "obmc-host-startmin@0.target";
-constexpr auto HOST_STATE_REBOOT_TGT = "obmc-host-reboot@0.target";
-constexpr auto HOST_STATE_WARM_REBOOT = "obmc-host-warm-reboot@0.target";
-constexpr auto HOST_STATE_FORCE_WARM_REBOOT =
-    "obmc-host-force-warm-reboot@0.target";
-constexpr auto HOST_STATE_DIAGNOSTIC_MODE =
-    "obmc-host-diagnostic-mode@0.target";
-
-constexpr auto HOST_STATE_QUIESCE_TGT = "obmc-host-quiesce@0.target";
-
 constexpr auto ACTIVE_STATE = "active";
 constexpr auto ACTIVATING_STATE = "activating";
 
-/* Map a transition to it's systemd target */
-const std::map<server::Host::Transition, std::string> SYSTEMD_TARGET_TABLE = {
-    {server::Host::Transition::Off, HOST_STATE_SOFT_POWEROFF_TGT},
-    {server::Host::Transition::On, HOST_STATE_POWERON_TGT},
-    {server::Host::Transition::Reboot, HOST_STATE_REBOOT_TGT},
-// Some systems do not support a warm reboot so just map the reboot
-// requests to our normal cold reboot in that case
-#if ENABLE_WARM_REBOOT
-    {server::Host::Transition::GracefulWarmReboot, HOST_STATE_WARM_REBOOT},
-    {server::Host::Transition::ForceWarmReboot, HOST_STATE_FORCE_WARM_REBOOT}};
-#else
-    {server::Host::Transition::GracefulWarmReboot, HOST_STATE_REBOOT_TGT},
-    {server::Host::Transition::ForceWarmReboot, HOST_STATE_REBOOT_TGT}};
-#endif
-
 constexpr auto SYSTEMD_SERVICE = "org.freedesktop.systemd1";
 constexpr auto SYSTEMD_OBJ_PATH = "/org/freedesktop/systemd1";
 constexpr auto SYSTEMD_INTERFACE = "org.freedesktop.systemd1.Manager";
@@ -108,7 +78,8 @@
 void Host::determineInitialState()
 {
 
-    if (stateActive(HOST_STATE_POWERON_MIN_TGT) || isHostRunning())
+    if (stateActive(getTarget(server::Host::HostState::Running)) ||
+        isHostRunning())
     {
         info("Initial Host State will be Running");
         server::Host::currentHostState(HostState::Running);
@@ -126,13 +97,52 @@
         // set to default value.
         server::Host::requestedHostTransition(Transition::Off);
     }
-
     return;
 }
 
+void Host::createSystemdTargetMaps()
+{
+    stateTargetTable = {
+        {HostState::Off, fmt::format("obmc-host-stop@{}.target", id)},
+        {HostState::Running, fmt::format("obmc-host-startmin@{}.target", id)},
+        {HostState::Quiesced, fmt::format("obmc-host-quiesce@{}.target", id)},
+        {HostState::DiagnosticMode,
+         fmt::format("obmc-host-diagnostic-mode@{}.target", id)}};
+
+    transitionTargetTable = {
+        {Transition::Off, fmt::format("obmc-host-shutdown@{}.target", id)},
+        {Transition::On, fmt::format("obmc-host-start@{}.target", id)},
+        {Transition::Reboot, fmt::format("obmc-host-reboot@{}.target", id)},
+// Some systems do not support a warm reboot so just map the reboot
+// requests to our normal cold reboot in that case
+#if ENABLE_WARM_REBOOT
+        {Transition::GracefulWarmReboot,
+         fmt::format("obmc-host-warm-reboot@{}.target", id)},
+        {Transition::ForceWarmReboot,
+         fmt::format("obmc-host-force-warm-reboot@{}.target", id)}
+    };
+#else
+        {Transition::GracefulWarmReboot,
+         fmt::format("obmc-host-reboot@{}.target", id)},
+        {Transition::ForceWarmReboot,
+         fmt::format("obmc-host-reboot@{}.target", id)}
+    };
+#endif
+}
+
+const std::string& Host::getTarget(HostState state)
+{
+    return stateTargetTable[state];
+};
+
+const std::string& Host::getTarget(Transition tranReq)
+{
+    return transitionTargetTable[tranReq];
+};
+
 void Host::executeTransition(Transition tranReq)
 {
-    auto sysdUnit = SYSTEMD_TARGET_TABLE.find(tranReq)->second;
+    auto& sysdUnit = getTarget(tranReq);
 
     auto method = this->bus.new_method_call(SYSTEMD_SERVICE, SYSTEMD_OBJ_PATH,
                                             SYSTEMD_INTERFACE, "StartUnit");
@@ -278,18 +288,18 @@
     // Read the msg and populate each variable
     msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
 
-    if ((newStateUnit == HOST_STATE_POWEROFF_TGT) &&
+    if ((newStateUnit == getTarget(server::Host::HostState::Off)) &&
         (newStateResult == "done") &&
-        (!stateActive(HOST_STATE_POWERON_MIN_TGT)))
+        (!stateActive(getTarget(server::Host::HostState::Running))))
     {
         info("Received signal that host is off");
         this->currentHostState(server::Host::HostState::Off);
         this->bootProgress(bootprogress::Progress::ProgressStages::Unspecified);
         this->operatingSystemState(osstatus::Status::OSStatus::Inactive);
     }
-    else if ((newStateUnit == HOST_STATE_POWERON_MIN_TGT) &&
+    else if ((newStateUnit == getTarget(server::Host::HostState::Running)) &&
              (newStateResult == "done") &&
-             (stateActive(HOST_STATE_POWERON_MIN_TGT)))
+             (stateActive(getTarget(server::Host::HostState::Running))))
     {
         info("Received signal that host is running");
         this->currentHostState(server::Host::HostState::Running);
@@ -308,9 +318,9 @@
             std::filesystem::remove(hostFile.get());
         }
     }
-    else if ((newStateUnit == HOST_STATE_QUIESCE_TGT) &&
+    else if ((newStateUnit == getTarget(server::Host::HostState::Quiesced)) &&
              (newStateResult == "done") &&
-             (stateActive(HOST_STATE_QUIESCE_TGT)))
+             (stateActive(getTarget(server::Host::HostState::Quiesced))))
     {
         if (Host::isAutoReboot())
         {
@@ -334,7 +344,7 @@
     // Read the msg and populate each variable
     msg.read(newStateID, newStateObjPath, newStateUnit);
 
-    if (newStateUnit == HOST_STATE_DIAGNOSTIC_MODE)
+    if (newStateUnit == getTarget(server::Host::HostState::DiagnosticMode))
     {
         info("Received signal that host is in diagnostice mode");
         this->currentHostState(server::Host::HostState::DiagnosticMode);
diff --git a/host_state_manager.hpp b/host_state_manager.hpp
index a27cbf5..c3394f0 100644
--- a/host_state_manager.hpp
+++ b/host_state_manager.hpp
@@ -51,8 +51,9 @@
      *
      * @param[in] bus       - The Dbus bus object
      * @param[in] objPath   - The Dbus object path
+     * @param[in] id        - The Host id
      */
-    Host(sdbusplus::bus::bus& bus, const char* objPath) :
+    Host(sdbusplus::bus::bus& bus, const char* objPath, size_t id) :
         HostInherit(bus, objPath, true), bus(bus),
         systemdSignalJobRemoved(
             bus,
@@ -68,11 +69,14 @@
                 sdbusRule::interface("org.freedesktop.systemd1.Manager"),
             std::bind(std::mem_fn(&Host::sysStateChangeJobNew), this,
                       std::placeholders::_1)),
-        settings(bus)
+        settings(bus), id(id)
     {
         // Enable systemd signals
         subscribeToSystemdSignals();
 
+        // create map of target name base on host id
+        createSystemdTargetMaps();
+
         // Will throw exception on fail
         determineInitialState();
 
@@ -135,6 +139,11 @@
      **/
     void determineInitialState();
 
+    /**
+     * create systemd target instance names and mapping table
+     **/
+    void createSystemdTargetMaps();
+
     /** @brief Execute the transition request
      *
      * This function assumes the state has been validated and the host
@@ -267,6 +276,24 @@
      */
     bool deserialize(const fs::path& path);
 
+    /**
+     * @brief Get target name of a HostState
+     *
+     * @param[in] state      -  The state of the host
+     *
+     * @return string - systemd target name of the state
+     */
+    const std::string& getTarget(HostState state);
+
+    /**
+     * @brief Get target name of a TransitionRequest
+     *
+     * @param[in] tranReq      -  Transition requested
+     *
+     * @return string - systemd target name of Requested transition
+     */
+    const std::string& getTarget(Transition tranReq);
+
     /** @brief Persistent sdbusplus DBus bus connection. */
     sdbusplus::bus::bus& bus;
 
@@ -278,6 +305,15 @@
 
     // Settings objects of interest
     settings::Objects settings;
+
+    /** @brief Host id. **/
+    const size_t id = 0;
+
+    /** @brief HostState to systemd target mapping table. **/
+    std::map<HostState, std::string> stateTargetTable;
+
+    /** @brief Requested Transition to systemd target mapping table. **/
+    std::map<Transition, std::string> transitionTargetTable;
 };
 
 } // namespace manager
diff --git a/host_state_manager_main.cpp b/host_state_manager_main.cpp
index 865987c..186e06b 100644
--- a/host_state_manager_main.cpp
+++ b/host_state_manager_main.cpp
@@ -2,6 +2,8 @@
 
 #include "host_state_manager.hpp"
 
+#include <getopt.h>
+
 #include <sdbusplus/bus.hpp>
 
 #include <cstdlib>
@@ -9,24 +11,51 @@
 #include <experimental/filesystem>
 #include <iostream>
 
-int main()
+int main(int argc, char** argv)
 {
+    size_t hostId = 0;
+
+    int arg;
+    int optIndex = 0;
+
+    static struct option longOpts[] = {{"host", required_argument, 0, 'h'},
+                                       {0, 0, 0, 0}};
+
+    while ((arg = getopt_long(argc, argv, "h:", longOpts, &optIndex)) != -1)
+    {
+        switch (arg)
+        {
+            case 'h':
+                hostId = std::stoul(optarg);
+                break;
+            default:
+                break;
+        }
+    }
+
     namespace fs = std::experimental::filesystem;
 
     auto bus = sdbusplus::bus::new_default();
 
-    // For now, we only have one instance of the host
-    auto objPathInst = std::string{HOST_OBJPATH} + '0';
+    auto hostBusName = std::string{HOST_BUSNAME} + std::to_string(hostId);
+    auto objPathInst = std::string{HOST_OBJPATH} + std::to_string(hostId);
 
     // Add sdbusplus ObjectManager.
     sdbusplus::server::manager::manager objManager(bus, objPathInst.c_str());
 
-    phosphor::state::manager::Host manager(bus, objPathInst.c_str());
+    phosphor::state::manager::Host manager(bus, objPathInst.c_str(), hostId);
 
     auto dir = fs::path(HOST_STATE_PERSIST_PATH).parent_path();
     fs::create_directories(dir);
 
-    bus.request_name(HOST_BUSNAME);
+    // For backwards compatibility, request a busname without host id if
+    // input id is 0.
+    if (hostId == 0)
+    {
+        bus.request_name(HOST_BUSNAME);
+    }
+
+    bus.request_name(hostBusName.c_str());
 
     while (true)
     {
diff --git a/meson.build b/meson.build
index 9f69d5e..a1a6c55 100644
--- a/meson.build
+++ b/meson.build
@@ -69,6 +69,7 @@
 phosphorlogging = dependency('phosphor-logging')
 phosphordbusinterfaces = dependency('phosphor-dbus-interfaces')
 libgpiod = dependency('libgpiod', version : '>=1.4.1')
+fmt = dependency('fmt')
 
 cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
 
@@ -80,7 +81,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 42b08db..2df30e6 100644
--- a/service_files/meson.build
+++ b/service_files/meson.build
@@ -8,7 +8,7 @@
     'phosphor-reset-sensor-states@.service',
     'xyz.openbmc_project.State.BMC.service',
     'xyz.openbmc_project.State.Chassis.service',
-    'xyz.openbmc_project.State.Host.service',
+    'xyz.openbmc_project.State.Host@.service',
     'xyz.openbmc_project.State.Hypervisor.service',
     'xyz.openbmc_project.State.ScheduledHostTransition.service',
     'phosphor-clear-one-time@.service',
diff --git a/service_files/xyz.openbmc_project.State.Host.service b/service_files/xyz.openbmc_project.State.Host.service
deleted file mode 100644
index ea3a5a5..0000000
--- a/service_files/xyz.openbmc_project.State.Host.service
+++ /dev/null
@@ -1,23 +0,0 @@
-[Unit]
-Description=Phosphor Host State Manager
-Wants=mapper-wait@-xyz-openbmc_project-control-host0-auto_reboot.service
-After=mapper-wait@-xyz-openbmc_project-control-host0-auto_reboot.service
-Before=mapper-wait@-xyz-openbmc_project-state-host.service
-Wants=mapper-wait@-xyz-openbmc_project-state-chassis0.service
-After=mapper-wait@-xyz-openbmc_project-state-chassis0.service
-Wants=obmc-mapper.target
-After=obmc-mapper.target
-After=phosphor-ipmi-host.service
-After=pldmd.service
-Before=obmc-host-reset@0.target
-Wants=xyz.openbmc_project.Logging.service
-After=xyz.openbmc_project.Logging.service
-
-[Service]
-ExecStart=/usr/bin/phosphor-host-state-manager
-Restart=always
-Type=dbus
-BusName=xyz.openbmc_project.State.Host
-
-[Install]
-WantedBy=multi-user.target
diff --git a/service_files/xyz.openbmc_project.State.Host@.service b/service_files/xyz.openbmc_project.State.Host@.service
new file mode 100644
index 0000000..fded2f0
--- /dev/null
+++ b/service_files/xyz.openbmc_project.State.Host@.service
@@ -0,0 +1,20 @@
+[Unit]
+Description=Phosphor Host%i State Manager
+Wants=mapper-wait@-xyz-openbmc_project-control-host%i-auto_reboot.service
+After=mapper-wait@-xyz-openbmc_project-control-host%i-auto_reboot.service
+Wants=mapper-wait@-xyz-openbmc_project-state-chassis0.service
+After=mapper-wait@-xyz-openbmc_project-state-chassis0.service
+Wants=obmc-mapper.target
+After=obmc-mapper.target
+After=phosphor-ipmi-host.service
+After=pldmd.service
+Before=obmc-host-reset@%i.target
+
+[Service]
+ExecStart=/usr/bin/phosphor-host-state-manager --host %i
+Restart=always
+Type=dbus
+BusName=xyz.openbmc_project.State.Host%i
+
+[Install]
+WantedBy=multi-user.target
