diff --git a/lib/openbmc_ffdc_utils.robot b/lib/openbmc_ffdc_utils.robot
index 078d97b..1eba969 100644
--- a/lib/openbmc_ffdc_utils.robot
+++ b/lib/openbmc_ffdc_utils.robot
@@ -26,7 +26,7 @@
 Get Test Dir and Name
     [Documentation]    SUITE_NAME and TEST_NAME are automatic variables
     ...                and is populated dynamically by the robot framework
-    ...                during execution 
+    ...                during execution
     ${suite_name}=     Get strip string   ${SUITE_NAME}
     ${suite_name}=     Catenate  SEPARATOR=    ${FFDC_TIME}_   ${suite_name}
     ${test_name}=      Get strip string   ${TEST_NAME}
@@ -64,7 +64,7 @@
     [Documentation]     Write header message to the report document manifest.
     ...                 TEST_NAME, TEST_MESSAGE,SUITE_SOURCE,TEST_DOCUMENTATION
     ...                 are auto variables and are populated dynamically by the
-    ...                 robot framework during execution 
+    ...                 robot framework during execution
     ...                 1. Writes opening statement headers msg
     ...                 2. Add Test setup and config information
     ...                 3. Types of data collection
@@ -103,11 +103,11 @@
 
 
 Test Setup Info
-    [Documentation]      BMC IP, Model and other information 
+    [Documentation]      BMC IP, Model and other information
 
-    Write Data to File   ${\n}-----------------------${\n} 
+    Write Data to File   ${\n}-----------------------${\n}
     Write Data to File   Test Setup Information:
-    Write Data to File   ${\n}-----------------------${\n} 
+    Write Data to File   ${\n}-----------------------${\n}
     Write Data to File   OPENBMC HOST \t: ${OPENBMC_HOST}${\n}
-    Write Data to File   
+    Write Data to File
     ...   SYSTEM TYPE \t: ${OPENBMC_MODEL.replace('./data/','').replace('.py','')}${\n}${\n}
diff --git a/lib/utilities.py b/lib/utilities.py
index 95201dc..980d06b 100755
--- a/lib/utilities.py
+++ b/lib/utilities.py
@@ -6,31 +6,31 @@
 
 
 def get_sensor(module_name, value):
-	m = imp.load_source('module.name', module_name)
+    m = imp.load_source('module.name', module_name)
 
-	for i in m.ID_LOOKUP['SENSOR']:
+    for i in m.ID_LOOKUP['SENSOR']:
 
-		if m.ID_LOOKUP['SENSOR'][i] == value:
-			return i
+        if m.ID_LOOKUP['SENSOR'][i] == value:
+            return i
 
-	return 0xFF
-	
+    return 0xFF
+
 
 def get_inventory_sensor (module_name, value):
-	m = imp.load_source('module.name', module_name)
+    m = imp.load_source('module.name', module_name)
 
-	value = string.replace(value, m.INVENTORY_ROOT, '<inventory_root>')
+    value = string.replace(value, m.INVENTORY_ROOT, '<inventory_root>')
 
-	for i in m.ID_LOOKUP['SENSOR']:
+    for i in m.ID_LOOKUP['SENSOR']:
 
-		if m.ID_LOOKUP['SENSOR'][i] == value:
-			return i
+        if m.ID_LOOKUP['SENSOR'][i] == value:
+            return i
 
-	return 0xFF
+    return 0xFF
 
 
 ################################################################
-#  This will return the URI's of the FRU type 
+#  This will return the URI's of the FRU type
 #
 #  i.e.  get_inventory_list('../data/Palmetto.py')
 #
@@ -39,20 +39,20 @@
 ################################################################
 def get_inventory_list(module_name):
 
-	l = []
-	m = imp.load_source('module.name', module_name)
+    l = []
+    m = imp.load_source('module.name', module_name)
 
-	
-	for i in m.ID_LOOKUP['FRU']:
-		s = m.ID_LOOKUP['FRU'][i]
-		s = s.replace('<inventory_root>',m.INVENTORY_ROOT)
-		l.append(s)
-	
-	return l
+
+    for i in m.ID_LOOKUP['FRU']:
+        s = m.ID_LOOKUP['FRU'][i]
+        s = s.replace('<inventory_root>',m.INVENTORY_ROOT)
+        l.append(s)
+
+    return l
 
 
 ################################################################
-#  This will return the URI's of the FRU type 
+#  This will return the URI's of the FRU type
 #
 #  i.e.  get_inventory_fru_type_list('../data/Barreleye.py', 'CPU')
 #
@@ -60,15 +60,15 @@
 #   /org/openbmc/inventory//system/chassis/motherboard/cpu1]
 ################################################################
 def  get_inventory_fru_type_list(module_name, fru):
-	l = []
-	m = imp.load_source('module.name', module_name)
+    l = []
+    m = imp.load_source('module.name', module_name)
 
-	for i in m.FRU_INSTANCES.keys():
-		if m.FRU_INSTANCES[i]['fru_type'] == fru:
-			s = i.replace('<inventory_root>',m.INVENTORY_ROOT)
-			l.append(s)
-	
-	return l
+    for i in m.FRU_INSTANCES.keys():
+        if m.FRU_INSTANCES[i]['fru_type'] == fru:
+            s = i.replace('<inventory_root>',m.INVENTORY_ROOT)
+            l.append(s)
+
+    return l
 
 
 ################################################################
@@ -80,17 +80,17 @@
 #   /org/openbmc/inventory/system/chassis/motherboard/dimm1]
 ################################################################
 def  get_vpd_inventory_list(module_name, fru):
-	l = []
-	m = imp.load_source('module.name', module_name)
+    l = []
+    m = imp.load_source('module.name', module_name)
 
-	for i in m.ID_LOOKUP['FRU_STR']:
-		x = m.ID_LOOKUP['FRU_STR'][i]
+    for i in m.ID_LOOKUP['FRU_STR']:
+        x = m.ID_LOOKUP['FRU_STR'][i]
 
-		if m.FRU_INSTANCES[x]['fru_type'] == fru:
-			s = x.replace('<inventory_root>',m.INVENTORY_ROOT)
-			l.append(s)
-	
-	return l
+        if m.FRU_INSTANCES[x]['fru_type'] == fru:
+            s = x.replace('<inventory_root>',m.INVENTORY_ROOT)
+            l.append(s)
+
+    return l
 
 
 def call_keyword(keyword):
@@ -98,8 +98,8 @@
 
 
 def main():
-	print get_vpd_inventory_list('../data/Palmetto.py', 'DIMM')
+    print get_vpd_inventory_list('../data/Palmetto.py', 'DIMM')
 
 
 if __name__ == "__main__":
-   main()
\ No newline at end of file
+   main()
diff --git a/lib/utils.robot b/lib/utils.robot
index 229b858..6fdd88d 100644
--- a/lib/utils.robot
+++ b/lib/utils.robot
@@ -49,7 +49,7 @@
     ${args}=     Create Dictionary    data=@{arglist}
     ${resp}=   Call Method    /org/openbmc/control/chassis0/    powerOn    data=${args}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
-    Wait Until Keyword Succeeds	  3 min    	10 sec    Is Power On
+    Wait Until Keyword Succeeds    3 min    10 sec    Is Power On
 
 Initiate Power Off
     [Documentation]  Initiates the power off and waits until the Is Power Off
@@ -58,7 +58,7 @@
     ${args}=     Create Dictionary    data=@{arglist}
     ${resp}=   Call Method    /org/openbmc/control/chassis0/    powerOff   data=${args}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
-    Wait Until Keyword Succeeds	  1 min    	10 sec    Is Power Off
+    Wait Until Keyword Succeeds    1 min    10 sec    Is Power Off
 
 Trigger Warm Reset
     log to console    "Triggering warm reset"
