diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index c26d90b..0598636 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -16,6 +16,7 @@
 #pragma once
 
 #include "../lib/redfish_sessions.hpp"
+#include "../lib/roles.hpp"
 #include "../lib/service_root.hpp"
 
 namespace redfish {
@@ -34,14 +35,17 @@
   template <typename CrowApp>
   RedfishService(CrowApp& app) {
     auto privilegeProvider = PrivilegeProvider();
-    serviceRootPtr = std::make_unique<ServiceRoot>(app, privilegeProvider);
-    sessionsCollectionPtr =
-        std::make_unique<SessionCollection>(app, privilegeProvider);
+
+    nodes.emplace_back(
+        std::make_unique<SessionCollection>(app, privilegeProvider));
+    nodes.emplace_back(std::make_unique<Roles>(app, privilegeProvider));
+    nodes.emplace_back(
+        std::make_unique<RoleCollection>(app, privilegeProvider));
+    nodes.emplace_back(std::make_unique<ServiceRoot>(app, privilegeProvider));
   }
 
  private:
-  std::unique_ptr<ServiceRoot> serviceRootPtr;
-  std::unique_ptr<SessionCollection> sessionsCollectionPtr;
+  std::vector<std::unique_ptr<Node>> nodes;
 };
 
 }  // namespace redfish
diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp
new file mode 100644
index 0000000..bce4cce
--- /dev/null
+++ b/redfish-core/lib/roles.hpp
@@ -0,0 +1,79 @@
+/*
+// 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 <vector>
+#include "node.hpp"
+
+namespace redfish {
+
+class Roles : public Node {
+ public:
+  template <typename CrowApp, typename PrivilegeProvider>
+  Roles(CrowApp& app, PrivilegeProvider& provider)
+      : Node(app, provider, "#Role.v1_0_2.Role",
+             "/redfish/v1/AccountService/Roles/Administrator/") {
+    nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles/Administrator";
+    nodeJson["@odata.type"] = "#Role.v1_0_2.Role";
+    nodeJson["@odata.context"] = "/redfish/v1/$metadata#Role.Role";
+    nodeJson["Id"] = "Administrator";
+    nodeJson["Name"] = "User Role";
+    nodeJson["Description"] = "Administrator User Role";
+    nodeJson["IsPredefined"] = true;
+    nodeJson["AssignedPrivileges"] = {"Login", "ConfigureManager",
+                                      "ConfigureUsers", "ConfigureSelf",
+                                      "ConfigureComponents"};
+    nodeJson["OemPrivileges"] = nlohmann::json::array();
+  }
+
+ private:
+  void doGet(crow::response& res, const crow::request& req,
+             const std::vector<std::string>& params) override {
+    res.json_value = nodeJson;
+    res.end();
+  }
+
+  nlohmann::json nodeJson;
+};
+
+class RoleCollection : public Node {
+ public:
+  template <typename CrowApp, typename PrivilegeProvider>
+  RoleCollection(CrowApp& app, PrivilegeProvider& provider)
+      : Node(app, provider, "#RoleCollection.RoleCollection",
+             "/redfish/v1/AccountService/Roles/") {
+    nodeJson["@odata.id"] = "/redfish/v1/AccountService/Roles";
+    nodeJson["@odata.type"] = "#RoleCollection.RoleCollection";
+    nodeJson["@odata.context"] =
+        "/redfish/v1/$metadata#RoleCollection.RoleCollection";
+    nodeJson["Name"] = "Roles Collection";
+    nodeJson["Description"] = "BMC User Roles";
+    nodeJson["Members@odata.count"] = 1;
+    nodeJson["Members"] = {
+        {"@odata.id", "/redfish/v1/AccountService/Roles/Administrator"}};
+  }
+
+ private:
+  void doGet(crow::response& res, const crow::request& req,
+             const std::vector<std::string>& params) override {
+    res.json_value = nodeJson;
+    res.end();
+  }
+
+  nlohmann::json nodeJson;
+};
+
+}  // namespace redfish
