diff --git a/lib/bmc_redfish_utils.py b/lib/bmc_redfish_utils.py
index 4d421b5..47ef3c6 100644
--- a/lib/bmc_redfish_utils.py
+++ b/lib/bmc_redfish_utils.py
@@ -67,21 +67,21 @@
 
         Description of argument(s):
         resource_path      URI resource absolute path
-                        (e.g. "/redfish/v1/Systems/system").
+                           (e.g. "/redfish/v1/Systems/system").
         target_attribute   Name of the attribute (e.g. 'ComputerSystem.Reset').
 
         Example:
-        "Actions": {
-        "#ComputerSystem.Reset": {
-        "ResetType@Redfish.AllowableValues": [
+         "Actions": {
+         "#ComputerSystem.Reset": {
+          "ResetType@Redfish.AllowableValues": [
             "On",
             "ForceOff",
             "GracefulRestart",
             "GracefulShutdown"
-        ],
-        "target": "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"
-        }
-        }
+          ],
+          "target": "/redfish/v1/Systems/system/Actions/ComputerSystem.Reset"
+          }
+         }
         """
 
         global target_list
@@ -109,16 +109,16 @@
 
         Description of argument(s):
         resource_path  URI resource absolute path
-                      (e.g. "/redfish/v1/SessionService/Sessions").
+                       (e.g. "/redfish/v1/SessionService/Sessions").
 
         "Members": [
             {
-             "@odata.id": "/redfish/v1/SessionService/Sessions/Z5HummWPZ7"
+              "@odata.id": "/redfish/v1/SessionService/Sessions/Z5HummWPZ7"
             }
             {
-             "@odata.id": "/redfish/v1/SessionService/Sessions/46CmQmEL7H"
+              "@odata.id": "/redfish/v1/SessionService/Sessions/46CmQmEL7H"
             }
-        ],
+          ],
         """
 
         member_list = []
@@ -137,7 +137,7 @@
 
         Description of argument(s):
         resource_path  URI resource absolute path
-                    (e.g. "/redfish/v1/SessionService/Sessions").
+                       (e.g. "/redfish/v1/SessionService/Sessions").
         """
 
         gp.qprint_executing(style=gp.func_line_style_short)
@@ -148,7 +148,8 @@
         global resource_list
         resource_list = []
         self._rest_response_ = \
-            self._redfish_.get(resource_path, valid_status_codes=[200, 404, 500])
+            self._redfish_.get(resource_path,
+                               valid_status_codes=[200, 404, 500])
 
         # Return empty list.
         if self._rest_response_.status != 200:
@@ -161,7 +162,8 @@
 
         for resource in resource_list:
             self._rest_response_ = \
-                self._redfish_.get(resource, valid_status_codes=[200, 404, 500])
+                self._redfish_.get(resource,
+                                   valid_status_codes=[200, 404, 500])
             if self._rest_response_.status != 200:
                 continue
             self.walk_nested_dict(self._rest_response_.dict)
@@ -175,7 +177,7 @@
 
         Description of argument(s):
         resource_path  URI resource absolute path
-                      (e.g. "/redfish/v1/SessionService/Sessions").
+                       (e.g. "/redfish/v1/SessionService/Sessions").
         """
 
         gp.qprint_executing(style=gp.func_line_style_short)
@@ -183,71 +185,49 @@
         # Set quiet variable to keep subordinate get() calls quiet.
         quiet = 1
 
-        # Variable to hold enumerated data.
-        self.__result = {}
+        url_list = self.list_request(resource_path)
 
-        # Variable to hold the pending list of resources for which enumeration.
-        # is yet to be obtained.
-        self.__pending_enumeration = set()
+        resource_dict = {}
 
-        self.__pending_enumeration.add(resource_path)
+        # Return empty dict.
+        if not url_list:
+            return resource_dict
 
-        # Variable having resources for which enumeration is completed.
-        enumerated_resources = set()
+        for resource in url_list:
+            # JsonSchemas data are not required in enumeration.
+            # Example: '/redfish/v1/JsonSchemas/' and sub resources.
+            if 'JsonSchemas' in resource:
+                continue
+            self._rest_response_ = \
+                self._redfish_.get(resource,
+                                   valid_status_codes=[200, 404, 500])
+            if self._rest_response_.status != 200:
+                continue
+            resource_dict[resource] = self._rest_response_.dict
 
-        resources_to_be_enumerated = (resource_path,)
-
-        while resources_to_be_enumerated:
-            for resource in resources_to_be_enumerated:
-                # JsonSchemas data are not required in enumeration.
-                # Example: '/redfish/v1/JsonSchemas/' and sub resources.
-                if 'JsonSchemas' in resource:
-                    continue
-
-                self._rest_response_ = \
-                    self._redfish_.get(resource, valid_status_codes=[200, 404, 500])
-                # Enumeration is done for available resources ignoring the
-                # ones for which response is not obtained.
-                if self._rest_response_.status != 200:
-                    continue
-
-                self.walk_nested_dict(self._rest_response_.dict, resource)
-
-            enumerated_resources.update(set(resources_to_be_enumerated))
-            resources_to_be_enumerated = \
-                tuple(self.__pending_enumeration - enumerated_resources)
-
-        return json.dumps(self.__result, sort_keys=True,
+        return json.dumps(resource_dict, sort_keys=True,
                           indent=4, separators=(',', ': '))
 
-    def walk_nested_dict(self, data, url=''):
+    def walk_nested_dict(self, data):
         r"""
         Parse through the nested dictionary and get the resource id paths.
 
         Description of argument(s):
         data    Nested dictionary data from response message.
-        url     Resource for which the response is obtained in data.
         """
 
-        url = url.rstrip('/')
         for key, value in data.items():
-            # Recursion if nested dictionary found.
             if isinstance(value, dict):
                 self.walk_nested_dict(value)
             else:
-                # Value contains a list of dictionaries having member data.
                 if 'Members' == key:
                     if isinstance(value, list):
-                        for memberDict in value:
-                            self.__pending_enumeration.add(memberDict['@odata.id'])
+                        for index in value:
+                            if index['@odata.id'] not in resource_list:
+                                resource_list.append(index['@odata.id'])
                 if '@odata.id' == key:
-                    value = value.rstrip('/')
-                    # Data for the given url.
-                    if value == url:
-                        self.__result[url] = data
-                    # Data still needs to be looked up,
-                    else:
-                        self.__pending_enumeration.add(value)
+                    if value not in resource_list and not value.endswith('/'):
+                        resource_list.append(value)
 
     def get_key_value_nested_dict(self, data, key):
         r"""
