diff --git a/include/redfish_v1.hpp b/include/redfish_v1.hpp
index 3aecae0..e32be23 100644
--- a/include/redfish_v1.hpp
+++ b/include/redfish_v1.hpp
@@ -102,42 +102,6 @@
         res.end();
       });
 
-  CROW_ROUTE(app, "/redfish/v1/AccountService/Roles/")
-      .methods("GET"_method)(
-          [&](const crow::request& req, crow::response& res) {
-            res.json_value = {
-                {"@odata.context",
-                 "/redfish/v1/$metadata#RoleCollection.RoleCollection"},
-                {"@odata.id", "/redfish/v1/AccountService/Roles"},
-                {"@odata.type", "#RoleCollection.RoleCollection"},
-                {"Name", "Account Service"},
-                {"Description", "BMC User Roles"},
-                {"Members@odata.count", 1},
-                {"Members",
-                 {{"@odata.id",
-                   "/redfish/v1/AccountService/Roles/Administrator"}}}};
-            get_redfish_sub_routes(app, "/redfish/v1/AccountService",
-                                   res.json_value);
-            res.end();
-          });
-
-  CROW_ROUTE(app, "/redfish/v1/AccountService/Roles/Administrator/")
-      .methods("GET"_method)(
-          [&](const crow::request& req, crow::response& res) {
-            res.json_value = {
-                {"@odata.context", "/redfish/v1/$metadata#Role.Role"},
-                {"@odata.id", "/redfish/v1/AccountService/Roles/Administrator"},
-                {"@odata.type", "#Role.v1_0_2.Role"},
-                {"Id", "Administrator"},
-                {"Name", "User Role"},
-                {"Description", "Administrator User Role"},
-                {"IsPredefined", true},
-                {"AssignedPrivileges",
-                 {"Login", "ConfigureManager", "ConfigureUsers",
-                  "ConfigureSelf", "ConfigureComponents"}}};
-            res.end();
-          });
-
   CROW_ROUTE(app, "/redfish/v1/AccountService/Accounts/")
       .methods(
           "GET"_method)([&](const crow::request& req, crow::response& res) {
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
