diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index 378396c..162ebd0 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -1,4 +1,5 @@
 #include <iostream>
+#include <systemd/sd-bus.h>
 #include "host_state_manager.hpp"
 
 namespace phosphor
@@ -8,6 +9,60 @@
 namespace manager
 {
 
+// TODO - Will be rewritten once sdbusplus client bindings are in place
+//        and persistent storage design is in place
+void Host::determineInitialState()
+{
+    std::string sysState;
+
+    auto method = this->bus.new_method_call("org.openbmc.managers.System",
+                                            "/org/openbmc/managers/System",
+                                            "org.openbmc.managers.System",
+                                            "getSystemState");
+
+    auto reply = this->bus.call(method);
+
+    reply.read(sysState);
+
+    if(sysState == "HOST_BOOTED")
+    {
+        std::cout << "HOST is BOOTED " << sysState << std::endl;
+        sdbusplus::xyz::openbmc_project::State::server::Host::
+            currentHostState(HostState::Running);
+    }
+    else
+    {
+        std::cout << "HOST is not BOOTED " << sysState << std::endl;
+        sdbusplus::xyz::openbmc_project::State::server::Host::
+            currentHostState(HostState::Off);
+    }
+
+    // Set transition initially to Off
+    // TODO - Eventually need to restore this from persistent storage
+    sdbusplus::xyz::openbmc_project::State::server::Host::
+                requestedHostTransition(Transition::Off);
+
+    return;
+}
+
+Host::Transition Host::requestedHostTransition(Transition value)
+{
+    std::cout << "Someone is setting the RequestedHostTransition field" <<
+            std::endl;
+    return sdbusplus::xyz::openbmc_project::State::server::Host::
+            requestedHostTransition(value);
+}
+
+
+Host::HostState Host::currentHostState(HostState value)
+{
+    std::cout << "Someone is being bad and trying to set the HostState field" <<
+            std::endl;
+
+    return sdbusplus::xyz::openbmc_project::State::server::Host::
+            currentHostState();
+}
+
 } // namespace manager
 } // namespace state
 } // namepsace phosphor
diff --git a/host_state_manager.hpp b/host_state_manager.hpp
index 4a755db..d1f17d4 100644
--- a/host_state_manager.hpp
+++ b/host_state_manager.hpp
@@ -21,6 +21,10 @@
     public:
         /** @brief Constructs Host State Manager
          *
+         * @note This constructor passes 'true' to the base class in order to
+         *       defer dbus object registration until we can run
+         *       determineInitialState() and set our properties
+         *
          * @param[in] bus       - The Dbus bus object
          * @param[in] busName   - The Dbus name to own
          * @param[in] objPath   - The Dbus object path
@@ -30,9 +34,32 @@
                 const char* objPath) :
                 sdbusplus::server::object::object<
                     sdbusplus::xyz::openbmc_project::State::server::Host>(
-                            bus, objPath) {};
+                            bus, objPath, true),
+                bus(bus)
+        {
+            // Will throw exception on fail
+            determineInitialState();
+
+            // We deferred this until we could get our property correct
+            this->emit_object_added();
+        }
+
+        /**
+         * @brief Determine initial host state and set internally
+         *
+         * @return Will throw exceptions on failure
+         **/
+        void determineInitialState();
+
+        /** @brief Set value of HostTransition */
+        Transition requestedHostTransition(Transition value) override;
+
+        /** @brief Set value of CurrentHostState */
+        HostState currentHostState(HostState value) override;
 
     private:
+        /** @brief Persistent sdbusplus DBus bus connection. */
+        sdbusplus::bus::bus& bus;
 };
 
 } // namespace manager
