diff --git a/lib/openbmc_ffdc.robot b/lib/openbmc_ffdc.robot
index 1f7caff..f4d330c 100755
--- a/lib/openbmc_ffdc.robot
+++ b/lib/openbmc_ffdc.robot
@@ -18,6 +18,13 @@
 ...                │       ├── 20160909102538035251_OS_msglog
 ...                │       ├── 20160909102538035251_OS_cpufrequency
 ...                │       ├── 20160909102538035251_OS_boot
+...                │       ├── 20160909102538035251_OS_isusb
+...                │       ├── 20160909102538035251_OS_kern
+...                │       ├── 20160909102538035251_OS_authlog
+...                │       ├── 20160909102538035251_OS_syslog
+...                │       ├── 20160909102538035251_OS_info
+...                │       ├── 20160909102538035251_OS_rsct
+...                │       ├── 20160909102538035251_OS_secure
 ...                │       └── 20160909102538035251_ffdc_report.txt
 ...                └── test_history.txt
 
diff --git a/lib/openbmc_ffdc_list.py b/lib/openbmc_ffdc_list.py
index f71309a..0e36d70 100755
--- a/lib/openbmc_ffdc_list.py
+++ b/lib/openbmc_ffdc_list.py
@@ -61,6 +61,42 @@
     },
 }
 
+# Add file name and correcponding command needed for Ubuntu Linux
+FFDC_OS_UBUNTU_FILE = {
+    'OS FILES':
+    {
+        # File Name         Command
+        'OS_isusb': 'lsusb -t ; lsusb -v',
+        'OS_kern': 'tail -n 50000 /var/log/kern.log',
+        'OS_authlog': 'cat /var/log/auth.log; cat /var/log/auth.log.1',
+        'OS_syslog': 'tail -n 200000 /var/log/syslog',
+        'OS_info': 'uname -a; dpkg -s opal-prd; dpkg -s ipmitool',
+    },
+}
+
+# Add file name and correcponding command needed for RHEL Linux
+FFDC_OS_RHEL_FILE = {
+    'OS FILES':
+    {
+        # File Name         Command
+        'OS_rsct': '/usr/bin/ctversion -bv',
+        'OS_secure': 'cat /var/log/secure',
+        'OS_syslog': 'tail -n 200000 /var/log/messages',
+        'OS_info': 'lsb_release -a; cat /etc/redhat-release; uname -a; rpm -qa',
+    },
+}
+
+# Add file name and correcponding command needed for RHEL Linux
+FFDC_OS_IBM_POWERKVM_FILE = {
+    'OS FILES':
+    {
+        # File Name         Command
+        'OS_secure': 'cat /var/log/secure',
+        'OS_syslog': 'tail -n 200000 /var/log/messages',
+        'OS_info': 'lsb_release -a; uname -a; rpm -qa',
+    },
+}
+
 # Add file name and correcponding Get Request
 FFDC_GET_REQUEST = {
     'GET REQUESTS':
@@ -185,6 +221,26 @@
         """
         return FFDC_OS_ALL_DISTROS_FILE[i_type].items()
 
+    def get_ffdc_os_distro_index(self, distro):
+        r"""
+        ########################################################################
+        #   @brief    This method returns the key pair from the dictionary
+        #   @return   Index of the method dictionary
+        ########################################################################
+        """
+        distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
+        return eval(distro_file).keys()
+
+    def get_ffdc_os_distro_call(self, i_type, distro):
+        r"""
+        ########################################################################
+        #   @brief    This method returns the key pair from the dictionary
+        #   @return   List of key pair keywords
+        ########################################################################
+        """
+        distro_file = "FFDC_OS_" + str(distro).upper() + "_FILE"
+        return eval(distro_file)[i_type].items()
+
     def get_strip_string(self, i_str):
         r"""
         ########################################################################
diff --git a/lib/openbmc_ffdc_methods.robot b/lib/openbmc_ffdc_methods.robot
index 9bf2b11..ac866e6 100755
--- a/lib/openbmc_ffdc_methods.robot
+++ b/lib/openbmc_ffdc_methods.robot
@@ -67,7 +67,7 @@
 
 
 Execute Command and Write FFDC
-    [Documentation]    Execute command on BMC and write to ffdc
+    [Documentation]    Execute command on BMC or OS and write to ffdc
     ...                By default to ffdc_report.txt file else to
     ...                specified file path.
     [Arguments]        ${key_index}
@@ -163,25 +163,50 @@
     \   Log FFDC Get Requests   ${index}
 
 
-Log OS FFDC
+Log OS ALL DISTROS FFDC
     [Documentation]    Create file in current FFDC log directory.
     ...                Executes OS command and write to
     ...                corresponding file name.
     [Arguments]        ${key_index}
 
-    Open Connection And Log In  host=${OS_HOST}  username=${OS_USERNAME}
-    ...   password=${OS_PASSWORD}
     @{cmd_list}=  get ffdc os all distros call  ${key_index}
     :FOR  ${cmd}  IN  @{cmd_list}
     \   ${logpath}=  Catenate  SEPARATOR=  ${LOG_PREFIX}  ${cmd[0]}
     \   Execute Command and Write FFDC  ${cmd[0]}  ${cmd[1]}   ${logpath}
 
 
+Log OS SPECIFIC DISTRO FFDC
+    [Documentation]    Create file in current FFDC log directory.
+    ...                Executes OS command and write to
+    ...                corresponding file name.
+    [Arguments]        ${key_index}  ${linux_distro}
+
+    @{cmd_list}=  get ffdc os distro call  ${key_index}  ${linux_distro}
+    :FOR  ${cmd}  IN  @{cmd_list}
+    \   ${logpath}=  Catenate  SEPARATOR=  ${LOG_PREFIX}  ${cmd[0]}
+    \   Execute Command and Write FFDC  ${cmd[0]}  ${cmd[1]}   ${logpath}
+
+
+
 OS FFDC Files
     [Documentation]    Get the command list and iterate
 
     Return From Keyword If  '${OS_HOST}' == '${EMPTY}'
     ...   No OS Host Provided
+    Open Connection And Log In  host=${OS_HOST}  username=${OS_USERNAME}
+    ...   password=${OS_PASSWORD}
+
     @{entries}=  Get ffdc os all distros index
     :FOR  ${index}  IN  @{entries}
-    \   Log OS FFDC  ${index}
+    \   Log OS ALL DISTROS FFDC  ${index}
+
+    ${linux_distro}=  Execute Command
+    ...   . /etc/os-release; echo $ID
+    ...   return_stdout=True  return_stderr=False  return_rc=False
+
+    Return From Keyword If  '${linux_distro}' == '${EMPTY}' or '${linux_distro}' == 'None'
+    ...   Could not determine Linux Distribution
+
+    @{entries}=  Get ffdc os distro index  ${linux_distro}
+    :FOR  ${index}  IN  @{entries}
+    \   Log OS SPECIFIC DISTRO FFDC  ${index}  ${linux_distro}
