diff --git a/redfish-core/lib/cable.hpp b/redfish-core/lib/cable.hpp
index 265a1ea..28031e1 100644
--- a/redfish-core/lib/cable.hpp
+++ b/redfish-core/lib/cable.hpp
@@ -89,19 +89,42 @@
     {
         for (const auto& interface : interfaces)
         {
-            if (interface != "xyz.openbmc_project.Inventory.Item.Cable")
+            if (interface == "xyz.openbmc_project.Inventory.Item.Cable")
             {
-                continue;
+                sdbusplus::asio::getAllProperties(
+                    *crow::connections::systemBus, service, cableObjectPath,
+                    interface,
+                    [asyncResp](
+                        const boost::system::error_code& ec,
+                        const dbus::utility::DBusPropertiesMap& properties) {
+                    fillCableProperties(asyncResp->res, ec, properties);
+                    });
             }
+            else if (interface == "xyz.openbmc_project.Inventory.Item")
+            {
+                sdbusplus::asio::getProperty<bool>(
+                    *crow::connections::systemBus, service, cableObjectPath,
+                    interface, "Present",
+                    [asyncResp, cableObjectPath](
+                        const boost::system::error_code& ec, bool present) {
+                    if (ec)
+                    {
+                        BMCWEB_LOG_DEBUG(
+                            "get presence failed for Cable {} with error {}",
+                            cableObjectPath, ec);
+                        if (ec.value() != EBADR)
+                        {
+                            messages::internalError(asyncResp->res);
+                        }
+                        return;
+                    }
 
-            sdbusplus::asio::getAllProperties(
-                *crow::connections::systemBus, service, cableObjectPath,
-                interface,
-                [asyncResp](
-                    const boost::system::error_code& ec,
-                    const dbus::utility::DBusPropertiesMap& properties) {
-                fillCableProperties(asyncResp->res, ec, properties);
-                });
+                    if (!present)
+                    {
+                        asyncResp->res.jsonValue["Status"]["State"] = "Absent";
+                    }
+                    });
+            }
         }
     }
 }
@@ -155,6 +178,7 @@
                     boost::urls::format("/redfish/v1/Cables/{}", cableId);
                 asyncResp->res.jsonValue["Id"] = cableId;
                 asyncResp->res.jsonValue["Name"] = "Cable";
+                asyncResp->res.jsonValue["Status"]["State"] = "Enabled";
 
                 getCableProperties(asyncResp, objectPath, serviceMap);
                 return;
