diff --git a/include/ibm/management_console_rest.hpp b/include/ibm/management_console_rest.hpp
index 525c27d..3038916 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/include/ibm/management_console_rest.hpp
@@ -143,15 +143,15 @@
                                   pathObj.filename().string());
         }
     }
-    res.jsonValue["@odata.type"] = "#FileCollection.v1_0_0.FileCollection";
+    res.jsonValue["@odata.type"] = "#IBMConfigFile.v1_0_0.IBMConfigFile";
     res.jsonValue["@odata.id"] = "/ibm/v1/Host/ConfigFiles/";
     res.jsonValue["Id"] = "ConfigFiles";
     res.jsonValue["Name"] = "ConfigFiles";
 
     res.jsonValue["Members"] = std::move(pathObjList);
-    res.jsonValue["Actions"]["#FileCollection.DeleteAll"] = {
+    res.jsonValue["Actions"]["#IBMConfigFiles.DeleteAll"] = {
         {"target",
-         "/ibm/v1/Host/ConfigFiles/Actions/FileCollection.DeleteAll"}};
+         "/ibm/v1/Host/ConfigFiles/Actions/IBMConfigFiles.DeleteAll"}};
     res.end();
 }
 
@@ -554,7 +554,7 @@
             });
 
     BMCWEB_ROUTE(app,
-                 "/ibm/v1/Host/ConfigFiles/Actions/FileCollection.DeleteAll")
+                 "/ibm/v1/Host/ConfigFiles/Actions/IBMConfigFiles.DeleteAll")
         .requires({"ConfigureComponents", "ConfigureManager"})
         .methods(boost::beast::http::verb::post)(
             [](const crow::Request& req, crow::Response& res) {
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index d2f4f2a..451816e 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -368,6 +368,7 @@
     std::string subscriptionType;
     std::vector<std::string> registryMsgIds;
     std::vector<std::string> registryPrefixes;
+    std::vector<std::string> resourceTypes;
     std::vector<nlohmann::json> httpHeaders; // key-value pair
     std::vector<nlohmann::json> metricReportDefinitions;
 
@@ -742,6 +743,8 @@
                                               subValue->registryMsgIds);
             json_util::getValueFromJsonObject(jsonObj, "RegistryPrefixes",
                                               subValue->registryPrefixes);
+            json_util::getValueFromJsonObject(jsonObj, "ResourceTypes",
+                                              subValue->resourceTypes);
             json_util::getValueFromJsonObject(jsonObj, "HttpHeaders",
                                               subValue->httpHeaders);
             json_util::getValueFromJsonObject(
@@ -791,6 +794,7 @@
             entry["MessageIds"] = subValue->registryMsgIds;
             entry["Protocol"] = subValue->protocol;
             entry["RegistryPrefixes"] = subValue->registryPrefixes;
+            entry["ResourceTypes"] = subValue->resourceTypes;
             entry["SubscriptionType"] = subValue->subscriptionType;
             entry["MetricReportDefinitions"] =
                 subValue->metricReportDefinitions;
diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index b27c6e0..d3ed416 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -26,6 +26,14 @@
 static constexpr const std::array<const char*, 3> supportedRetryPolicies = {
     "TerminateAfterRetries", "SuspendRetries", "RetryForever"};
 
+#ifdef BMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE
+static constexpr const std::array<const char*, 2> supportedResourceTypes = {
+    "IBMConfigFile", "Task"};
+#else
+static constexpr const std::array<const char*, 1> supportedResourceTypes = {
+    "Task"};
+#endif
+
 static constexpr const uint8_t maxNoOfSubscriptions = 20;
 
 class EventService : public Node
@@ -72,6 +80,7 @@
             retryTimeoutInterval;
         asyncResp->res.jsonValue["EventFormatTypes"] = supportedEvtFormatTypes;
         asyncResp->res.jsonValue["RegistryPrefixes"] = supportedRegPrefixes;
+        asyncResp->res.jsonValue["ResourceTypes"] = supportedResourceTypes;
 
         nlohmann::json supportedSSEFilters = {
             {"EventFormatType", true},        {"MessageId", true},
@@ -228,6 +237,7 @@
         std::optional<std::string> retryPolicy;
         std::optional<std::vector<std::string>> msgIds;
         std::optional<std::vector<std::string>> regPrefixes;
+        std::optional<std::vector<std::string>> resTypes;
         std::optional<std::vector<nlohmann::json>> headers;
         std::optional<std::vector<nlohmann::json>> metricReportDefinitions;
 
@@ -237,7 +247,7 @@
                 "EventFormatType", eventFormatType, "HttpHeaders", headers,
                 "RegistryPrefixes", regPrefixes, "MessageIds", msgIds,
                 "DeliveryRetryPolicy", retryPolicy, "MetricReportDefinitions",
-                metricReportDefinitions))
+                metricReportDefinitions, "ResourceTypes", resTypes))
         {
             return;
         }
@@ -362,6 +372,22 @@
             subValue->registryPrefixes = *regPrefixes;
         }
 
+        if (resTypes)
+        {
+            for (const std::string& it : *resTypes)
+            {
+                if (std::find(supportedResourceTypes.begin(),
+                              supportedResourceTypes.end(),
+                              it) == supportedResourceTypes.end())
+                {
+                    messages::propertyValueNotInList(asyncResp->res, it,
+                                                     "ResourceTypes");
+                    return;
+                }
+            }
+            subValue->resourceTypes = *resTypes;
+        }
+
         if (msgIds)
         {
             // Do we need to loop-up MessageRegistry and validate
@@ -560,6 +586,8 @@
         asyncResp->res.jsonValue["EventFormatType"] = subValue->eventFormatType;
         asyncResp->res.jsonValue["RegistryPrefixes"] =
             subValue->registryPrefixes;
+        asyncResp->res.jsonValue["ResourceTypes"] = subValue->resourceTypes;
+
         asyncResp->res.jsonValue["MessageIds"] = subValue->registryMsgIds;
         asyncResp->res.jsonValue["DeliveryRetryPolicy"] = subValue->retryPolicy;
         asyncResp->res.jsonValue["MetricReportDefinitions"] =
