diff --git a/ffdc/ffdc_collector.py b/ffdc/ffdc_collector.py
index 873f563..bd823df 100644
--- a/ffdc/ffdc_collector.py
+++ b/ffdc/ffdc_collector.py
@@ -102,16 +102,27 @@
             print("\n\t[INFO] %s uname -a\n" % self.hostname)
             print("\t\t %s" % ' '.join(response))
             identity = self.find_os_type(response, 'AIX').split(' ')[0].upper()
+
+            # If OS does not have /etc/os-release and is not AIX,
+            # script does not yet know what to do.
             if not identity:
                 print(">>>>>\tERROR: Script does not yet know about %s" % ' '.join(response))
                 sys.exit(-1)
 
         if self.target_type not in identity:
             user_target_type = self.target_type
+            self.target_type = ""
             for each_os in FFDCCollector.supported_oses:
                 if each_os in identity:
                     self.target_type = each_os
                     break
+
+            # If OS in not one of ['OPENBMC', 'RHEL', 'AIX', 'UBUNTU']
+            # script does not yet know what to do.
+            if not self.target_type:
+                print(">>>>>\tERROR: Script does not yet know about %s" % identity)
+                sys.exit(-1)
+
             print("\n\t[WARN] user request %s does not match remote host type %s.\n"
                   % (user_target_type, self.target_type))
             print("\t[WARN] FFDC collection continues for %s.\n" % self.target_type)
@@ -185,12 +196,25 @@
         with open(self.ffdc_config, 'r') as file:
             ffdc_actions = yaml.load(file, Loader=yaml.FullLoader)
 
+        # Set prefix values for scp files and directory.
+        # Since the time stamp is at second granularity, these values are set here
+        # to be sure that all files for this run will have same timestamps
+        # and they will be saved in the same directory.
+        # self.location == local system for now
+        self.set_ffdc_defaults()
+
         for machine_type in ffdc_actions.keys():
 
             if machine_type == self.target_type:
                 if (ffdc_actions[machine_type]['PROTOCOL'][0] in working_protocol_list):
 
-                    # For RHEL and UBUNTU, collect common Linux FFDC.
+                    # For OPENBMC collect general system info.
+                    if self.target_type == 'OPENBMC':
+
+                        self.collect_and_copy_ffdc(ffdc_actions['GENERAL'],
+                                                   form_filename=True)
+
+                    # For RHEL and UBUNTU, collect common Linux OS FFDC.
                     if self.target_type == 'RHEL' \
                             or self.target_type == 'UBUNTU':
 
@@ -206,12 +230,14 @@
         self.remoteclient.ssh_remoteclient_disconnect()
 
     def collect_and_copy_ffdc(self,
-                              ffdc_actions_for_machine_type):
+                              ffdc_actions_for_machine_type,
+                              form_filename=False):
         r"""
         Send commands in ffdc_config file to targeted system.
 
         Description of argument(s):
         ffdc_actions_for_machine_type    commands and files for the selected remote host type.
+        form_filename                    if true, pre-pend self.target_type to filename
         """
 
         print("\n\t[Run] Executing commands on %s using %s"
@@ -219,6 +245,8 @@
         list_of_commands = ffdc_actions_for_machine_type['COMMANDS']
         progress_counter = 0
         for command in list_of_commands:
+            if form_filename:
+                command = str(command % self.target_type)
             self.remoteclient.execute_command(command)
             progress_counter += 1
             self.print_progress(progress_counter)
@@ -227,18 +255,17 @@
 
         if self.remoteclient.scpclient:
             print("\n\n\tCopying FFDC files from remote system %s.\n" % self.hostname)
-            # Get default values for scp action.
-            # self.location == local system for now
-            self.set_ffdc_defaults()
+
             # Retrieving files from target system
             list_of_files = ffdc_actions_for_machine_type['FILES']
-            self.scp_ffdc(self.ffdc_dir_path, self.ffdc_prefix, list_of_files)
+            self.scp_ffdc(self.ffdc_dir_path, self.ffdc_prefix, form_filename, list_of_files)
         else:
             print("\n\n\tSkip copying FFDC files from remote system %s.\n" % self.hostname)
 
     def scp_ffdc(self,
                  targ_dir_path,
-                 targ_file_prefix="",
+                 targ_file_prefix,
+                 form_filename,
                  file_list=None,
                  quiet=None):
         r"""
@@ -254,6 +281,8 @@
 
         progress_counter = 0
         for filename in file_list:
+            if form_filename:
+                filename = str(filename % self.target_type)
             source_file_path = filename
             targ_file_path = targ_dir_path + targ_file_prefix + filename.split('/')[-1]
 
diff --git a/ffdc/ffdc_config.yaml b/ffdc/ffdc_config.yaml
index 035745c..f899a33 100644
--- a/ffdc/ffdc_config.yaml
+++ b/ffdc/ffdc_config.yaml
@@ -11,7 +11,33 @@
 #       and is listed in FILES to be collected.
 #
 # Note: When a new remote type is added to this configuration file,
-#       it is also need to be added the list of supported OSes in ffdc_lollector.py
+#       it is also need to be added the list of supported OSes in ffdc_collector.py
+
+# Commands and File to take snapshot of linux based system.
+# Filename is <OS>_general.txt, where <OS> is in [OPENBMC, RHEL, UBUNTU]
+GENERAL:
+    COMMANDS:
+        - 'rm -rf /tmp/%s_general.txt'
+        - 'echo "++++++++++ cat /etc/os-release ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'cat /etc/os-release >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ cat /etc/timestamp ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'cat /etc/timestamp >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ uname -a ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'uname -a >> /tmp/%s_general.txt'
+        - 'echo -e "\n++++++++++ cat /etc/timestamp ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'cat /etc/timestamp >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ uptime;cat /proc/uptime ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'uptime;cat /proc/uptime >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ df -hT ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'df -hT >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ date;/sbin/hwclock --show ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - 'date;/sbin/hwclock --show;/usr/bin/timedatectl >> /tmp/%s_general.txt 2>&1'
+        - 'echo -e "\n++++++++++ /usr/bin/obmcutil state ++++++++++" >> /tmp/%s_general.txt 2>&1'
+        - '/usr/bin/obmcutil state >> /tmp/%s_general.txt 2>&1'
+    FILES:
+        - '/tmp/%s_general.txt'
+    PROTOCOL:
+        - 'SSH'
 
 # Commands and Files to collect for a given OpenBMC system.
 OPENBMC:
