diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index a1761bb..11190ef 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -14,7 +14,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 #include "registries.hpp"
 #include "registries/base_message_registry.hpp"
 #include "registries/openbmc_message_registry.hpp"
diff --git a/redfish-core/include/node.hpp b/redfish-core/include/node.hpp
deleted file mode 100644
index a1b7d72..0000000
--- a/redfish-core/include/node.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-// 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 "async_resp.hpp"
-#include "http_request.hpp"
-#include "http_response.hpp"
-#include "privileges.hpp"
-#include "redfish_v1.hpp"
-
-#include <error_messages.hpp>
-#include <rf_async_resp.hpp>
-
-#include <vector>
-
-namespace redfish
-{
-
-/**
- * @brief  Abstract class used for implementing Redfish nodes.
- *
- */
-class Node
-{
-  private:
-    bool redfishPreChecks(const crow::Request& req,
-                          const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
-    {
-        std::string_view odataHeader = req.getHeaderValue("OData-Version");
-        if (odataHeader.empty())
-        {
-            // Clients aren't required to provide odata version
-            return true;
-        }
-        if (odataHeader != "4.0")
-        {
-            redfish::messages::preconditionFailed(asyncResp->res);
-            return false;
-        }
-
-        asyncResp->res.addHeader("OData-Version", "4.0");
-        return true;
-    }
-
-  public:
-    template <typename... Params>
-    Node(App& app, std::string&& entityUrl,
-         [[maybe_unused]] Params... paramsIn) :
-        app(app)
-    {
-        crow::DynamicRule& get = app.routeDynamic(entityUrl.c_str());
-        getRule = &get;
-        get.methods(boost::beast::http::verb::get)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doGet(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& patch = app.routeDynamic(entityUrl.c_str());
-        patchRule = &patch;
-        patch.methods(boost::beast::http::verb::patch)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPatch(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& post = app.routeDynamic(entityUrl.c_str());
-        postRule = &post;
-        post.methods(boost::beast::http::verb::post)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPost(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& put = app.routeDynamic(entityUrl.c_str());
-        putRule = &put;
-        put.methods(boost::beast::http::verb::put)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doPut(asyncResp, req, paramVec);
-            });
-
-        crow::DynamicRule& deleteR = app.routeDynamic(entityUrl.c_str());
-        deleteRule = &deleteR;
-        deleteR.methods(boost::beast::http::verb::delete_)(
-            [this](const crow::Request& req,
-                   const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                   Params... params) {
-                if (!redfishPreChecks(req, asyncResp))
-                {
-                    return;
-                }
-                std::vector<std::string> paramVec = {params...};
-                doDelete(asyncResp, req, paramVec);
-            });
-    }
-
-    void initPrivileges()
-    {
-        auto it = entityPrivileges.find(boost::beast::http::verb::get);
-        if (it != entityPrivileges.end())
-        {
-            if (getRule != nullptr)
-            {
-                getRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::post);
-        if (it != entityPrivileges.end())
-        {
-            if (postRule != nullptr)
-            {
-                postRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::patch);
-        if (it != entityPrivileges.end())
-        {
-            if (patchRule != nullptr)
-            {
-                patchRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::put);
-        if (it != entityPrivileges.end())
-        {
-            if (putRule != nullptr)
-            {
-                putRule->privileges(it->second);
-            }
-        }
-        it = entityPrivileges.find(boost::beast::http::verb::delete_);
-        if (it != entityPrivileges.end())
-        {
-            if (deleteRule != nullptr)
-            {
-                deleteRule->privileges(it->second);
-            }
-        }
-    }
-
-    virtual ~Node() = default;
-
-    OperationMap entityPrivileges;
-
-    crow::DynamicRule* getRule = nullptr;
-    crow::DynamicRule* postRule = nullptr;
-    crow::DynamicRule* patchRule = nullptr;
-    crow::DynamicRule* putRule = nullptr;
-    crow::DynamicRule* deleteRule = nullptr;
-
-  protected:
-    App& app;
-    // Node is designed to be an abstract class, so doGet is pure virtual
-    virtual void doGet(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                       const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPatch(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPost(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                        const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doPut(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                       const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-
-    virtual void doDelete(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                          const crow::Request&, const std::vector<std::string>&)
-    {
-        asyncResp->res.result(boost::beast::http::status::method_not_allowed);
-    }
-};
-
-} // namespace redfish
diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 0f43a36..47d4848 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -201,15 +201,7 @@
         requestRoutesMetricReportDefinition(app);
         requestRoutesMetricReportCollection(app);
         requestRoutesMetricReport(app);
-
-        for (const auto& node : nodes)
-        {
-            node->initPrivileges();
-        }
     }
-
-  private:
-    std::vector<std::unique_ptr<Node>> nodes;
 };
 
 } // namespace redfish
diff --git a/redfish-core/include/server_sent_events.hpp b/redfish-core/include/server_sent_events.hpp
index 578fa19..7613d7b 100644
--- a/redfish-core/include/server_sent_events.hpp
+++ b/redfish-core/include/server_sent_events.hpp
@@ -15,7 +15,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 
 #include <boost/asio/strand.hpp>
 #include <boost/beast/core/span.hpp>
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 582f781..835fae3 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -14,7 +14,6 @@
 // limitations under the License.
 */
 #pragma once
-#include "node.hpp"
 
 #include <app.hpp>
 #include <dbus_utility.hpp>
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index d78cb58..5040f9e 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -20,7 +20,6 @@
 #include <boost/container/flat_set.hpp>
 #include <dbus_singleton.hpp>
 #include <error_messages.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 
 #include <optional>
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index 0e0629d..e785038 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -5,7 +5,6 @@
 #include <boost/container/flat_set.hpp>
 #include <dbus_singleton.hpp>
 #include <error_messages.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 
 #include <optional>
diff --git a/redfish-core/lib/redfish_sessions.hpp b/redfish-core/lib/redfish_sessions.hpp
index 7590268..53ec7d0 100644
--- a/redfish-core/lib/redfish_sessions.hpp
+++ b/redfish-core/lib/redfish_sessions.hpp
@@ -16,7 +16,6 @@
 #pragma once
 
 #include "error_messages.hpp"
-#include "node.hpp"
 #include "persistent_data.hpp"
 
 #include <app.hpp>
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index ce40f67..cdb6a51 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -19,7 +19,6 @@
 #include <boost/container/flat_map.hpp>
 #include <boost/process/async_pipe.hpp>
 #include <boost/type_traits/has_dereference.hpp>
-#include <node.hpp>
 #include <utils/json_utils.hpp>
 // for GetObjectType and ManagedObjectType
 #include <account_service.hpp>
