diff --git a/manager.hpp b/manager.hpp
index ef3315f..7edb30f 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -24,6 +24,7 @@
 {
     public:
         friend class TestManager;
+
         explicit Manager(sdbusplus::bus::bus& bus);
         Manager(const Manager&) = delete;
         Manager& operator=(const Manager&) = delete;
@@ -51,12 +52,21 @@
         /** @brief The value to indicate if host is on */
         bool hostOn = false;
 
+        /** @brief The requested time mode when host is on*/
+        std::string requestedMode;
+
+        /** @brief The requested time owner when host is on*/
+        std::string requestedOwner;
+
         /** @brief The current time mode */
         Mode timeMode;
 
         /** @brief The current time owner */
         Owner timeOwner;
 
+        /** @brief Restore saved settings */
+        void restoreSettings();
+
         /** @brief Check if host is on and update hostOn variable */
         void checkHostOn();
 
@@ -94,6 +104,28 @@
          */
         void onPgoodChanged(bool pgood);
 
+        /** @brief Set the property as requested time mode/owner
+         *
+         * @param[in] key - The property name
+         * @param[in] value - The property value
+         */
+        void setPropertyAsRequested(const std::string& key,
+                                    const std::string& value);
+
+        /** @brief Set the current mode to user requested one
+         *  if conditions allow it
+         *
+         * @param[in] mode - The string of time mode
+         */
+        void setRequestedMode(const std::string& mode);
+
+        /** @brief Set the current owner to user requested one
+         *  if conditions allow it
+         *
+         * @param[in] owner - The string of time owner
+         */
+        void setRequestedOwner(const std::string& owner);
+
         /** @brief The static function called on settings property changed
          *
          * @param[in] msg - Data associated with subscribed signal
@@ -138,6 +170,12 @@
          */
         static Owner convertToOwner(const std::string& owner);
 
+        /** @brief The string of time mode property */
+        static constexpr auto PROPERTY_TIME_MODE = "time_mode";
+
+        /** @brief The string of time owner property */
+        static constexpr auto PROPERTY_TIME_OWNER = "time_owner";
+
         using Updater = std::function<void(const std::string&)>;
 
         /** @brief Map the property string to functions that shall
@@ -145,10 +183,10 @@
          */
         const std::map<std::string, Updater> propertyUpdaters =
         {
-            {"time_mode", std::bind(&Manager::setCurrentTimeMode,
-                                    this, std::placeholders::_1)},
-            {"time_owner", std::bind(&Manager::setCurrentTimeOwner,
-                                     this, std::placeholders::_1)}
+            {PROPERTY_TIME_MODE, std::bind(&Manager::setCurrentTimeMode,
+                                           this, std::placeholders::_1)},
+            {PROPERTY_TIME_OWNER, std::bind(&Manager::setCurrentTimeOwner,
+                                            this, std::placeholders::_1)}
         };
 
         /** @brief The properties that manager shall notify the
@@ -158,6 +196,12 @@
 
         /** @brief The map that maps the string to Owners */
         static const std::map<std::string, Owner> ownerMap;
+
+        /** @brief The file name of saved time mode */
+        static constexpr auto modeFile = "/var/lib/obmc/saved_time_mode";
+
+        /** @brief The file name of saved time owner */
+        static constexpr auto ownerFile = "/var/lib/obmc/saved_time_owner";
 };
 
 }
