diff --git a/users.hpp b/users.hpp
new file mode 100644
index 0000000..84a0f86
--- /dev/null
+++ b/users.hpp
@@ -0,0 +1,111 @@
+/*
+// Copyright (c) 2018 Intel Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+*/
+#pragma once
+#include <experimental/filesystem>
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/server/object.hpp>
+#include <xyz/openbmc_project/User/Attributes/server.hpp>
+#include <xyz/openbmc_project/Object/Delete/server.hpp>
+
+namespace phosphor
+{
+namespace user
+{
+
+namespace Base = sdbusplus::xyz::openbmc_project;
+using UsersIface =
+    sdbusplus::server::object::object<Base::User::server::Attributes>;
+using DeleteIface =
+    sdbusplus::server::object::object<Base::Object::server::Delete>;
+
+// Place where all user objects has to be created
+constexpr auto usersObjPath = "/xyz/openbmc_project/user";
+
+class UserMgr; // Forward declaration for UserMgr.
+
+/** @class Users
+ *  @brief Lists User objects and it's properties
+ */
+class Users : public UsersIface, DeleteIface
+{
+  public:
+    Users() = delete;
+    ~Users() = default;
+    Users(const Users &) = delete;
+    Users &operator=(const Users &) = delete;
+    Users(Users &&) = delete;
+    Users &operator=(Users &&) = delete;
+
+    /** @brief Constructs UserMgr object.
+     *
+     *  @param[in] bus  - sdbusplus handler
+     *  @param[in] path - D-Bus path
+     *  @param[in] groups - users group list
+     *  @param[in] priv - users privilege
+     *  @param[in] enabled - user enabled state
+     *  @param[in] parent - user manager - parent object
+     */
+    Users(sdbusplus::bus::bus &bus, const char *path,
+          std::vector<std::string> groups, std::string priv, bool enabled,
+          UserMgr &parent);
+
+    /** @brief delete user method.
+     *  This method deletes the user as requested
+     *
+     */
+    void delete_(void) override;
+
+    /** @brief update user privilege
+     *
+     *  @param[in] value - User privilege
+     */
+    std::string userPrivilege(std::string value) override;
+
+    /** @brief lists user privilege
+     *
+     */
+    std::string userPrivilege(void) const override;
+
+    /** @brief update user groups
+     *
+     *  @param[in] value - User groups
+     */
+    std::vector<std::string>
+        userGroups(std::vector<std::string> value) override;
+
+    /** @brief list user groups
+     *
+     */
+    std::vector<std::string> userGroups(void) const override;
+
+    /** @brief lists user enabled state
+     *
+     */
+    bool userEnabled(void) const override;
+
+    /** @brief update user enabled state
+     *
+     *  @param[in] value - bool value
+     */
+    bool userEnabled(bool value) override;
+
+  private:
+    std::string userName;
+    UserMgr &manager;
+};
+
+} // namespace user
+} // namespace phosphor
