diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 320f4e4..680a0ee 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -326,135 +326,67 @@
                                                      << properties.size()
                                                      << " Cpu properties.";
 
-                                    if (properties.size() > 0)
-                                    {
-                                        const uint64_t* processorId = nullptr;
-                                        const std::string* procFamily = nullptr;
-                                        nlohmann::json& procSummary =
-                                            aResp->res.jsonValue["ProcessorSumm"
-                                                                 "ary"];
-                                        nlohmann::json& procCount =
-                                            procSummary["Count"];
-
-                                        auto procCountPtr = procCount.get_ptr<
-                                            nlohmann::json::
-                                                number_integer_t*>();
-                                        if (procCountPtr == nullptr)
-                                        {
-                                            messages::internalError(aResp->res);
-                                            return;
-                                        }
-                                        for (const auto& property : properties)
-                                        {
-
-                                            if (property.first == "Id")
+                                    auto getCpuPresenceState =
+                                        [aResp](
+                                            const boost::system::error_code ec3,
+                                            const std::variant<bool>&
+                                                cpuPresenceCheck) {
+                                            if (ec3)
                                             {
-                                                processorId =
-                                                    std::get_if<uint64_t>(
-                                                        &property.second);
-                                                if (nullptr != procFamily)
-                                                {
-                                                    break;
-                                                }
-                                                continue;
+                                                BMCWEB_LOG_ERROR
+                                                    << "DBUS response error "
+                                                    << ec3;
+                                                return;
                                             }
+                                            modifyCpuPresenceState(
+                                                aResp, cpuPresenceCheck);
+                                        };
 
-                                            if (property.first == "Family")
+                                    auto getCpuFunctionalState =
+                                        [aResp](
+                                            const boost::system::error_code ec3,
+                                            const std::variant<bool>&
+                                                cpuFunctionalCheck) {
+                                            if (ec3)
                                             {
-                                                procFamily =
-                                                    std::get_if<std::string>(
-                                                        &property.second);
-                                                if (nullptr != processorId)
-                                                {
-                                                    break;
-                                                }
-                                                continue;
+                                                BMCWEB_LOG_ERROR
+                                                    << "DBUS response error "
+                                                    << ec3;
+                                                return;
                                             }
-                                        }
+                                            modifyCpuFunctionalState(
+                                                aResp, cpuFunctionalCheck);
+                                        };
 
-                                        if (procFamily != nullptr &&
-                                            processorId != nullptr)
-                                        {
-                                            if (procCountPtr != nullptr &&
-                                                *processorId != 0)
-                                            {
-                                                *procCountPtr += 1;
-                                                procSummary["Status"]["State"] =
-                                                    "Enabled";
+                                    // Get the Presence of CPU
+                                    crow::connections::systemBus
+                                        ->async_method_call(
+                                            std::move(getCpuPresenceState),
+                                            service, path,
+                                            "org.freedesktop.DBus."
+                                            "Properties",
+                                            "Get",
+                                            "xyz.openbmc_project.Inventory."
+                                            "Item",
+                                            "Present");
 
-                                                procSummary["Model"] =
-                                                    *procFamily;
-                                            }
-                                        }
-                                    }
-                                    else
-                                    {
-                                        auto getCpuPresenceState =
-                                            [aResp](
-                                                const boost::system::error_code
-                                                    ec3,
-                                                const std::variant<bool>&
-                                                    cpuPresenceCheck) {
-                                                if (ec3)
-                                                {
-                                                    BMCWEB_LOG_ERROR
-                                                        << "DBUS response "
-                                                           "error "
-                                                        << ec3;
-                                                    return;
-                                                }
-                                                modifyCpuPresenceState(
-                                                    aResp, cpuPresenceCheck);
-                                            };
+                                    // Get the Functional State
+                                    crow::connections::systemBus
+                                        ->async_method_call(
+                                            std::move(getCpuFunctionalState),
+                                            service, path,
+                                            "org.freedesktop.DBus."
+                                            "Properties",
+                                            "Get",
+                                            "xyz.openbmc_project.State."
+                                            "Decorator."
+                                            "OperationalStatus",
+                                            "Functional");
 
-                                        auto getCpuFunctionalState =
-                                            [aResp](
-                                                const boost::system::error_code
-                                                    ec3,
-                                                const std::variant<bool>&
-                                                    cpuFunctionalCheck) {
-                                                if (ec3)
-                                                {
-                                                    BMCWEB_LOG_ERROR
-                                                        << "DBUS response "
-                                                           "error "
-                                                        << ec3;
-                                                    return;
-                                                }
-                                                modifyCpuFunctionalState(
-                                                    aResp, cpuFunctionalCheck);
-                                            };
-                                        // Get the Presence of CPU
-                                        crow::connections::systemBus
-                                            ->async_method_call(
-                                                std::move(getCpuPresenceState),
-                                                service, path,
-                                                "org.freedesktop.DBus."
-                                                "Properties",
-                                                "Get",
-                                                "xyz.openbmc_project.Inventory."
-                                                "Item",
-                                                "Present");
-
-                                        // Get the Functional State
-                                        crow::connections::systemBus
-                                            ->async_method_call(
-                                                std::move(
-                                                    getCpuFunctionalState),
-                                                service, path,
-                                                "org.freedesktop.DBus."
-                                                "Properties",
-                                                "Get",
-                                                "xyz.openbmc_project.State."
-                                                "Decorator."
-                                                "OperationalStatus",
-                                                "Functional");
-
-                                        // Get the MODEL from
-                                        // xyz.openbmc_project.Inventory.Decorator.Asset
-                                        // support it later as Model  is Empty
-                                        // currently.
-                                    }
+                                    // Get the MODEL from
+                                    // xyz.openbmc_project.Inventory.Decorator.Asset
+                                    // support it later as Model  is Empty
+                                    // currently.
                                 },
                                 connection.first, path,
                                 "org.freedesktop.DBus.Properties", "GetAll",
