diff --git a/ffdc/ffdc_collector.py b/ffdc/ffdc_collector.py
index 53fe9dd..b980425 100644
--- a/ffdc/ffdc_collector.py
+++ b/ffdc/ffdc_collector.py
@@ -147,8 +147,8 @@
 
         run_env_ok = True
 
-        redfishtool_version = self.run_redfishtool('-V').split(' ')[2].strip('\n')
-        ipmitool_version = self.run_ipmitool('ipmitool -V').split(' ')[2]
+        redfishtool_version = self.run_tool_cmd('redfishtool -V').split(' ')[2].strip('\n')
+        ipmitool_version = self.run_tool_cmd('ipmitool -V').split(' ')[2]
 
         self.logger.info("\n\t---- Script host environment ----")
         self.logger.info("\t{:<10}  {:<10}".format('Script hostname', os.uname()[1]))
@@ -318,19 +318,19 @@
 
                 if protocol == 'REDFISH':
                     if protocol in working_protocol_list:
-                        self.protocol_redfish(target_type, k)
+                        self.protocol_execute(protocol, target_type, k)
                     else:
                         self.logger.error("\n\tERROR: REDFISH is not available for %s." % self.hostname)
 
                 if protocol == 'IPMI':
                     if protocol in working_protocol_list:
-                        self.protocol_ipmi(target_type, k)
+                        self.protocol_execute(protocol, target_type, k)
                     else:
                         self.logger.error("\n\tERROR: IPMI is not available for %s." % self.hostname)
 
                 if protocol == 'SHELL':
                     if protocol in working_protocol_list:
-                        self.protocol_shell_script(target_type, k)
+                        self.protocol_execute(protocol, target_type, k)
                     else:
                         self.logger.error("\n\tERROR: can't execute SHELL script")
 
@@ -394,76 +394,32 @@
         for file in telnet_files_saved:
             self.logger.info("\n\t\tSuccessfully save file " + file + ".")
 
-    def protocol_redfish(self,
+    def protocol_execute(self,
+                         protocol,
                          target_type,
                          sub_type):
         r"""
-        Perform actions using Redfish protocol.
+        Perform actions for a given protocol.
 
         Description of argument(s):
+        protocol            Protocol to execute.
         target_type         OS Type of remote host.
         sub_type            Group type of commands.
         """
 
-        self.logger.info("\n\t[Run] Executing commands to %s using %s" % (self.hostname, 'REDFISH'))
-        redfish_files_saved = []
-        progress_counter = 0
-        list_of_URL = self.ffdc_actions[target_type][sub_type]['URL']
-        for index, each_url in enumerate(list_of_URL, start=0):
-            redfish_parm = '-u ' + self.username + ' -p ' + self.password + ' -r ' \
-                           + self.hostname + ' -S Always raw GET ' + each_url
-
-            result = self.run_redfishtool(redfish_parm)
-            if result:
-                try:
-                    targ_file = self.get_file_list(self.ffdc_actions[target_type][sub_type])[index]
-                except IndexError:
-                    targ_file = each_url.split('/')[-1]
-                    self.logger.warning(
-                        "\n\t[WARN] Missing filename to store data from redfish URL %s." % each_url)
-                    self.logger.warning("\t[WARN] Data will be stored in %s." % targ_file)
-
-                targ_file_with_path = (self.ffdc_dir_path
-                                       + self.ffdc_prefix
-                                       + targ_file)
-
-                # Creates a new file
-                with open(targ_file_with_path, 'w') as fp:
-                    fp.write(result)
-                    fp.close
-                    redfish_files_saved.append(targ_file)
-
-            progress_counter += 1
-            self.print_progress(progress_counter)
-
-        self.logger.info("\n\t[Run] Commands execution completed.\t\t [OK]")
-
-        for file in redfish_files_saved:
-            self.logger.info("\n\t\tSuccessfully save file " + file + ".")
-
-    def protocol_ipmi(self,
-                      target_type,
-                      sub_type):
-        r"""
-        Perform actions using ipmitool over LAN protocol.
-
-        Description of argument(s):
-        target_type         OS Type of remote host.
-        sub_type            Group type of commands.
-        """
-
-        self.logger.info("\n\t[Run] Executing commands to %s using %s" % (self.hostname, 'IPMI'))
-        ipmi_files_saved = []
+        self.logger.info("\n\t[Run] Executing commands to %s using %s" % (self.hostname, protocol))
+        executed_files_saved = []
         progress_counter = 0
         list_of_cmd = self.get_command_list(self.ffdc_actions[target_type][sub_type])
         for index, each_cmd in enumerate(list_of_cmd, start=0):
-            result = self.run_ipmitool(each_cmd)
+            result = self.run_tool_cmd(each_cmd)
             if result:
                 try:
                     targ_file = self.get_file_list(self.ffdc_actions[target_type][sub_type])[index]
                 except IndexError:
                     targ_file = each_cmd.split('/')[-1]
-                    self.logger.warning("\n\t[WARN] Missing filename to store data from IPMI %s." % each_cmd)
+                    self.logger.warning(
+                        "\n\t[WARN] Missing filename to store data from %s." % each_cmd)
                     self.logger.warning("\t[WARN] Data will be stored in %s." % targ_file)
 
                 targ_file_with_path = (self.ffdc_dir_path
@@ -474,14 +430,14 @@
                 with open(targ_file_with_path, 'w') as fp:
                     fp.write(result)
                     fp.close
-                    ipmi_files_saved.append(targ_file)
+                    executed_files_saved.append(targ_file)
 
             progress_counter += 1
             self.print_progress(progress_counter)
 
         self.logger.info("\n\t[Run] Commands execution completed.\t\t [OK]")
 
-        for file in ipmi_files_saved:
+        for file in executed_files_saved:
             self.logger.info("\n\t\tSuccessfully save file " + file + ".")
 
     def collect_and_copy_ffdc(self,
@@ -731,9 +687,9 @@
         Verify remote host has redfish service active
 
         """
-        redfish_parm = '-u ' + self.username + ' -p ' + self.password + ' -r ' \
+        redfish_parm = 'redfishtool -r ' \
                        + self.hostname + ' -S Always raw GET /redfish/v1/'
-        return(self.run_redfishtool(redfish_parm, True))
+        return(self.run_tool_cmd(redfish_parm, True))
 
     def verify_ipmi(self):
         r"""
@@ -747,40 +703,17 @@
             ipmi_parm = 'ipmitool -I lanplus  -P ' \
                 + self.password + ' -H ' + self.hostname + ' power status'
 
-        return(self.run_ipmitool(ipmi_parm, True))
+        return(self.run_tool_cmd(ipmi_parm, True))
 
-    def run_redfishtool(self,
-                        parms_string,
-                        quiet=False):
-        r"""
-        Run CLI redfishtool
-
-        Description of variable:
-        parms_string         redfishtool subcommand and options.
-        quiet                do not print redfishtool error message if True
-        """
-
-        result = subprocess.run(['redfishtool ' + parms_string],
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE,
-                                shell=True,
-                                universal_newlines=True)
-
-        if result.stderr and not quiet:
-            self.logger.error('\n\tERROR with redfishtool ' + parms_string)
-            self.logger.error('\n\t%s' % result.stderr.split('\n'))
-
-        return result.stdout
-
-    def run_ipmitool(self,
+    def run_tool_cmd(self,
                      parms_string,
                      quiet=False):
         r"""
-        Run CLI IPMI tool.
+        Run CLI standard tool or scripts.
 
         Description of variable:
-        parms_string         ipmitool subcommand and options.
-        quiet                do not print redfishtool error message if True
+        parms_string         tool command options.
+        quiet                do not print tool error message if True
         """
 
         result = subprocess.run([parms_string],
@@ -795,73 +728,6 @@
 
         return result.stdout
 
-    def run_shell_script(self,
-                         parms_string,
-                         quiet=False):
-        r"""
-        Run CLI shell script tool.
-
-        Description of variable:
-        parms_string         script command options.
-        quiet                do not print redfishtool error message if True
-        """
-
-        result = subprocess.run([parms_string],
-                                stdout=subprocess.PIPE,
-                                stderr=subprocess.PIPE,
-                                shell=True,
-                                universal_newlines=True)
-
-        if result.stderr and not quiet:
-            self.logger.error('\n\t\tERROR executing %s' % parms_string)
-            self.logger.error('\t\t' + result.stderr)
-
-        return result.stdout
-
-    def protocol_shell_script(self,
-                              target_type,
-                              sub_type):
-        r"""
-        Perform SHELL script execution locally.
-
-        Description of argument(s):
-        target_type         OS Type of remote host.
-        sub_type            Group type of commands.
-        """
-
-        self.logger.info("\n\t[Run] Executing commands to %s using %s" % (self.hostname, 'SHELL'))
-        shell_files_saved = []
-        progress_counter = 0
-        list_of_cmd = self.get_command_list(self.ffdc_actions[target_type][sub_type])
-        for index, each_cmd in enumerate(list_of_cmd, start=0):
-
-            result = self.run_shell_script(each_cmd)
-            if result:
-                try:
-                    targ_file = self.get_file_list(self.ffdc_actions[target_type][sub_type])[index]
-                except IndexError:
-                    targ_file = each_cmd.split('/')[-1]
-                    self.logger.warning("\n\t[WARN] Missing filename to store data %s." % each_cmd)
-                    self.logger.warning("\t[WARN] Data will be stored in %s." % targ_file)
-
-                targ_file_with_path = (self.ffdc_dir_path
-                                       + self.ffdc_prefix
-                                       + targ_file)
-
-                # Creates a new file
-                with open(targ_file_with_path, 'w') as fp:
-                    fp.write(result)
-                    fp.close
-                    shell_files_saved.append(targ_file)
-
-            progress_counter += 1
-            self.print_progress(progress_counter)
-
-        self.logger.info("\n\t[Run] Commands execution completed.\t\t [OK]")
-
-        for file in shell_files_saved:
-            self.logger.info("\n\t\tSuccessfully save file " + file + ".")
-
     def verify_protocol(self, protocol_list):
         r"""
         Perform protocol working check.
diff --git a/ffdc/ffdc_config.yaml b/ffdc/ffdc_config.yaml
index c9f23b2..d0bc091 100644
--- a/ffdc/ffdc_config.yaml
+++ b/ffdc/ffdc_config.yaml
@@ -101,14 +101,14 @@
     # URLs and Files are one-to-one corresponding.
     # File contains the data returned from 'redfishtool GET URL'
     REDFISH_LOGS:
-        URL:
-            - '/xyz/openbmc_project/software/enumerate'
-            - '/xyz/openbmc_project/state/enumerate'
-            - '/org/open_power/enumerate'
-            - '/redfish/v1/AccountService/Accounts'
-            - '/redfish/v1/Managers/bmc/LogServices/Dump/Entries'
-            - '/redfish/v1/Systems/system/LogServices/Dump/Entries'
-            - '/redfish/v1/Systems/system/LogServices/EventLog/Entries'
+        COMMANDS:
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /xyz/openbmc_project/software/enumerate
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /xyz/openbmc_project/state/enumerate
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /org/open_power/enumerate
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /redfish/v1/AccountService/Accounts
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /redfish/v1/Managers/bmc/LogServices/Dump/Entries
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /redfish/v1/Systems/system/LogServices/Dump/Entries
+            - redfishtool -u ${username} -p ${password} -r ${hostname} -S Always raw GET /redfish/v1/Systems/system/LogServices/EventLog/Entries
         FILES:
             - 'REDFISH_software.json'
             - 'REDFISH_bmc_state.json'
