diff --git a/ipmi/test_ipmi_payload.robot b/ipmi/test_ipmi_payload.robot
index 34433d9..144b1d2 100644
--- a/ipmi/test_ipmi_payload.robot
+++ b/ipmi/test_ipmi_payload.robot
@@ -75,8 +75,7 @@
     [Tags]  Test_Get_Payload_Instance_Info
 
     ${payload_status}=  Get Payload Activation Status
-    Run keyword If  '${payload_status}' == '01'
-    ...  Deactivate Payload
+    IF  '${payload_status}' == '01'  Deactivate Payload
 
     # First four bytes should be 00 if given instance is not activated.
     ${resp}=  Run IPMI Command
diff --git a/ipmi/test_ipmi_sensor.robot b/ipmi/test_ipmi_sensor.robot
index f5e25f9..566d7a9 100644
--- a/ipmi/test_ipmi_sensor.robot
+++ b/ipmi/test_ipmi_sensor.robot
@@ -270,8 +270,9 @@
         ${sensor_value}=  Set Variable  ${sensor[1].split()[0].strip()}
         ${contains}=  Evaluate  """disabled""" in "${sensor_value}"
 
-        Run Keyword IF  "${contains}" != """True"""
-        ...  Set To Dictionary  ${sensor_value_dict}  ${sensor_key}  ${sensor_value}
+        IF  "${contains}" != """True"""
+            Set To Dictionary  ${sensor_value_dict}  ${sensor_key}  ${sensor_value}
+        END
     END
 
     RETURN  ${sensor_value_dict}
@@ -310,8 +311,9 @@
         ${is_device_name_present}=  Evaluate  "DeviceName" in @{keys}
         IF  ${is_device_name_present}
             ${contains}=  Evaluate  "${member_id}" in """${data}[DeviceName]"""
-            Run Keyword IF  "${contains}" == "True"
-            ...  Set To Dictionary  ${redfish_value_dict}  ${data}[DeviceName]  ${reading}
+            IF  "${contains}" == "True"
+                Set To Dictionary  ${redfish_value_dict}  ${data}[DeviceName]  ${reading}
+            END
         ELSE
             ${data_source_id}=  Evaluate  ("${data}[DataSourceUri]").split('temperature_')
             # Example format:
@@ -469,8 +471,9 @@
 
     @{redfish_readings}=  Redfish.Get Attribute  /redfish/v1/Chassis/${CHASSIS_ID}/Power  Voltages
     FOR  ${data}  IN  @{redfish_readings}
-        Run keyword if  '${data}[MemberId]' == 'ps0_input_voltage'
-        ...  Should Be Equal As Numbers  ${data['${redfish_threshold_id}']}  ${ipmi_threshold_reading}
+        IF  '${data}[MemberId]' == 'ps0_input_voltage'
+            Should Be Equal As Numbers  ${data['${redfish_threshold_id}']}  ${ipmi_threshold_reading}
+        END
     END
 
 
@@ -503,8 +506,9 @@
 
         # Adding sensors to the list whose presence is detected.
         ${contains}=  Evaluate  "Presence detected" in "${line}" or "ok" in "${line}"
-        Run Keyword IF  "${contains}" == "True"
-        ...  Append To List  ${sensor_list}  ${sensor_name}
+        IF  "${contains}" == "True"
+            Append To List  ${sensor_list}  ${sensor_name}
+        END
     END
 
     # Example of output for ${sensor_list}
diff --git a/lib/snmp/redfish_snmp_utils.robot b/lib/snmp/redfish_snmp_utils.robot
index 9045143..a7bc30a 100644
--- a/lib/snmp/redfish_snmp_utils.robot
+++ b/lib/snmp/redfish_snmp_utils.robot
@@ -175,10 +175,11 @@
 
       # Delete the SNMP manager if the requested IP & ports are found
       # and mark is_snmp_found to true.
-      Run Keyword If  'snmp://${snmp_ip_port}' == '${snmp_mgr}'
-      ...  Run Keywords  Set Local Variable  ${is_snmp_found}  ${True}
-      ...  AND  Redfish.Delete  ${snmp_mgr_uri}
-      ...  AND  Exit For Loop
+      IF  'snmp://${snmp_ip_port}' == '${snmp_mgr}'
+          Set Local Variable  ${is_snmp_found}  ${True}
+          Redfish.Delete  ${snmp_mgr_uri}
+          Exit For Loop
+      END
     END
 
     Pass Execution If  ${is_snmp_found} == ${False}
diff --git a/lib/snmp/snmp_utils.robot b/lib/snmp/snmp_utils.robot
index d94cb8f..122789b 100644
--- a/lib/snmp/snmp_utils.robot
+++ b/lib/snmp/snmp_utils.robot
@@ -34,13 +34,13 @@
     ${resp}=  OpenBMC Post Request
     ...  ${SNMP_MANAGER_URI}action/Client  data=${data}
 
-    Run Keyword If  '${expected_result}' == 'error'
-    ...      Should Be Equal As Strings
-    ...      ${resp.status_code}  ${HTTP_BAD_REQUEST}
-    ...      msg=Allowing the configuration of an invalid SNMP.
-    ...  ELSE
-    ...      Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-    ...      msg=Not allowing the configuration of a valid SNMP.
+    IF  '${expected_result}' == 'error'
+        Should Be Equal As Strings  ${resp.status_code}  ${HTTP_BAD_REQUEST}
+        ...  msg=Allowing the configuration of an invalid SNMP.
+    ELSE
+        Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
+        ...  msg=Not allowing the configuration of a valid SNMP.
+    END
 
 
 Get List Of SNMP Manager And Port Configured On BMC
@@ -95,9 +95,9 @@
     ${snmp_objs}=  Read Properties  ${SNMP_MANAGER_URI}enumerate
     FOR  ${snmp_obj}  IN   @{snmp_objs}
         ${obj}=  Set Variable  ${snmp_objs['${snmp_obj}']}
-        Run Keyword If
-        ...  '${obj['Address']}' == '${ip}' and '${obj['Port']}' == '${port}'
-        ...    Return From Keyword  ${snmp_obj}
+        IF  '${obj['Address']}' == '${ip}' and '${obj['Port']}' == '${port}'
+            Return From Keyword  ${snmp_obj}
+        END
     END
 
     Return From Keyword  ${EMPTY}
diff --git a/lib/state_manager.robot b/lib/state_manager.robot
index bd6cbe2..af9044d 100755
--- a/lib/state_manager.robot
+++ b/lib/state_manager.robot
@@ -25,7 +25,7 @@
     ...  ${HOST_STATE_URI}  RequestedHostTransition   data=${args}
 
     # Does caller want to wait for status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
 
     Wait Until Keyword Succeeds
     ...  10 min  10 sec  Is Host Running
@@ -45,11 +45,11 @@
     ...  ${HOST_STATE_URI}  RequestedHostTransition   data=${args}
 
     # Does caller want to wait for status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
 
     ${status}=  Run Keyword And Return Status  Wait For PowerOff
 
-    Run Keyword if  '${status}' == '${False}'  Hard Power Off
+    IF  '${status}' == '${False}'  Hard Power Off
 
 
 Wait For PowerOff
@@ -71,7 +71,7 @@
     ...  ${CHASSIS_STATE_URI}  RequestedPowerTransition  data=${args}
 
     # Does caller want to wait for status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
 
     Wait Until Keyword Succeeds
     ...  1 min  10 sec  Run Keywords  Is Chassis Off  AND  Is Host Off
@@ -89,7 +89,7 @@
     ...  ${HOST_STATE_URI}  RequestedHostTransition  data=${args}
 
     # Does caller want to wait for host booted status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
 
     Is Host Rebooted
 
@@ -179,9 +179,10 @@
     [Documentation]  Recover host from quisced state.
 
     ${resp}=  Run Keyword And Return Status  Is Host Quiesced
-    Run Keyword If  '${resp}' == 'True'
-    ...  Run Keywords  Initiate Host PowerOff  AND
-    ...  Log  HOST is recovered from quiesced state
+    IF  '${resp}' == 'True'
+        Initiate Host PowerOff
+        Log  HOST is recovered from quiesced state
+    END
 
 
 Get Host State
@@ -231,10 +232,11 @@
     # expected_state - expected BMC state
 
     ${bmc_state}=  Get BMC State
-    Run Keyword If  '${bmc_state}' == '${expected_state}'
-    ...    Log  BMC is already in ${expected_state} state
-    ...  ELSE
-    ...    OBMC Reboot (off)
+    IF  '${bmc_state}' == '${expected_state}'
+        Log  BMC is already in ${expected_state} state
+    ELSE
+        OBMC Reboot (off)
+    END
 
 Initiate BMC Reboot
     [Documentation]  Initiate BMC reboot.
@@ -249,10 +251,10 @@
     ...  ${BMC_STATE_URI}  RequestedBMCTransition  data=${args}
 
     # Does caller want to wait for status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
 
     ${session_active}=  Check If BMC Reboot Is Initiated
-    Run Keyword If  '${session_active}' == '${True}'
+    IF  '${session_active}' == '${True}'
     ...  Fail  msg=BMC Reboot didn't occur.
 
     Check If BMC is Up
@@ -282,13 +284,13 @@
     [Documentation]  Wait until given BMC state is reached.
     [Arguments]  ${state}
     # state - BMC state to wait for
-    Run Keyword If  '${state}' == '${BMC_READY_STATE}'
-    ...    Wait Until Keyword Succeeds
-    ...    10 min  10 sec  Is BMC Ready
-    ...  ELSE IF  '${state}' == '${BMC_NOT_READY_STATE}'
-    ...    Wait Until Keyword Succeeds
-    ...    10 min  10 sec  Is BMC Not Ready
-    ...  ELSE  Fail  msg=Invalid BMC state
+    IF  '${state}' == '${BMC_READY_STATE}'
+        Wait Until Keyword Succeeds  10 min  10 sec  Is BMC Ready
+    ELSE IF  '${state}' == '${BMC_NOT_READY_STATE}'
+        Wait Until Keyword Succeeds   10 min  10 sec  Is BMC Not Ready
+    ELSE
+        Fail  msg=Invalid BMC state
+    END
 
 
 Set State Interface Version
@@ -296,18 +298,20 @@
     ${resp}=  Openbmc Get Request  ${CHASSIS_STATE_URI}
     ${status}=  Run Keyword And Return Status
     ...  Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
-    Run Keyword If  '${status}' == '${True}'
-    ...  Set Global Variable  ${OBMC_STATES_VERSION}  ${1}
-    ...  ELSE
-    ...  Set Global Variable  ${OBMC_STATES_VERSION}  ${0}
+    IF  '${status}' == '${True}'
+        Set Global Variable  ${OBMC_STATES_VERSION}  ${1}
+    ELSE
+        Set Global Variable  ${OBMC_STATES_VERSION}  ${0}
+    END
 
 
 Power Off Request
     [Documentation]  Select appropriate poweroff keyword.
-    Run Keyword If  '${OBMC_STATES_VERSION}' == '${0}'
-    ...  Initiate Power Off
-    ...  ELSE
-    ...  Initiate Host PowerOff
+    IF  '${OBMC_STATES_VERSION}' == '${0}'
+        Initiate Power Off
+    ELSE
+        Initiate Host PowerOff
+    END
 
 
 Wait For BMC Ready
diff --git a/lib/utils.robot b/lib/utils.robot
index 8c00bd1..e25b0a5 100755
--- a/lib/utils.robot
+++ b/lib/utils.robot
@@ -48,13 +48,11 @@
     [Documentation]  Verify ping and rest authentication.
     ${l_ping}=   Run Keyword And Return Status
     ...    Ping Host  ${OPENBMC_HOST}
-    Run Keyword If  '${l_ping}' == '${False}'
-    ...    Fail   msg=Ping Failed
+    IF  '${l_ping}' == '${False}'  Fail   msg=Ping Failed
 
     ${l_rest}=   Run Keyword And Return Status
     ...    Initialize OpenBMC
-    Run Keyword If  '${l_rest}' == '${False}'
-    ...    Fail   msg=REST Authentication Failed
+    IF  '${l_rest}' == '${False}'  Fail   msg=REST Authentication Failed
 
     # Just to make sure the SSH is working for SCP
     Open Connection And Log In
@@ -66,10 +64,10 @@
     [Documentation]  Verify ping, SSH and redfish authentication.
 
     ${l_ping}=   Run Keyword And Return Status  Ping Host  ${OPENBMC_HOST}
-    Run Keyword If  '${l_ping}' == '${False}'  Fail   msg=Ping Failed
+    IF  '${l_ping}' == '${False}'  Fail   msg=Ping Failed
 
     ${l_rest}=   Run Keyword And Return Status   Redfish.Login
-    Run Keyword If  '${l_rest}' == '${False}'  Fail   msg=REST Authentication Failed
+    IF  '${l_rest}' == '${False}'  Fail   msg=REST Authentication Failed
 
     # Just to make sure the SSH is working.
     Open Connection And Log In
@@ -115,8 +113,9 @@
     ...  data=xyz.openbmc_project.State.Watchdog.Action.PowerCycle
     ${status}  ${result}=  Run Keyword And Ignore Error
     ...  Read Attribute  ${HOST_WATCHDOG_URI}  ExpireAction
-    Run Keyword If  '${status}' == 'PASS'
-    ...  Write Attribute  ${HOST_WATCHDOG_URI}  ExpireAction  data=${data}
+    IF  '${status}' == 'PASS'
+        Write Attribute  ${HOST_WATCHDOG_URI}  ExpireAction  data=${data}
+    END
 
     ${int_milliseconds}=  Convert To Integer  ${milliseconds}
     ${data}=  Create Dictionary  data=${int_milliseconds}
@@ -245,16 +244,16 @@
     # the only recourse users will have is that they may specify
     # -v boot_prog_method:Old to force old behavior on such builds.
 
-    Run Keyword If  '${boot_prog_method}' != '${EMPTY}'  Return From Keyword
+    IF  '${boot_prog_method}' != '${EMPTY}'  Return From Keyword
 
     ${new_status}  ${new_value}=  Run Keyword And Ignore Error
     ...  New Get Boot Progress
     # If the new style read fails, the method must necessarily be "Old".
-    Run Keyword If  '${new_status}' == 'PASS'
-    ...  Run Keywords
-    ...  Set Global Variable  ${boot_prog_method}  New  AND
-    ...  Rqpvars  boot_prog_method  AND
-    ...  Return From Keyword
+    IF  '${new_status}' == 'PASS'
+        Set Global Variable  ${boot_prog_method}  New
+        Rqpvars  boot_prog_method
+        Return From Keyword
+    END
 
     # Default method is "Old".
     Set Global Variable  ${boot_prog_method}  Old
@@ -277,7 +276,7 @@
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
 
     # Does caller want to wait for power on status?
-    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    IF  '${wait}' == '${0}'  Return From Keyword
     Wait Until Keyword Succeeds  3 min  10 sec  Is Power On
 
 
@@ -368,8 +367,7 @@
     ...  ${OPENBMC_BASE_URI}control/bmc0/action/warmReset  data=${data}
     Should Be Equal As Strings      ${resp.status_code}     ${HTTP_OK}
     ${session_active}=   Check If warmReset is Initiated
-    Run Keyword If   '${session_active}' == '${True}'
-    ...    Fail   msg=warm reset didn't occur
+    IF  '${session_active}' == '${True}'  Fail   msg=warm reset didn't occur
 
     Sleep   ${SYSTEM_SHUTDOWN_TIME}min
     Check If BMC Is Up
@@ -690,10 +688,11 @@
     ...                    1=RetryAttempts
     ...                    0=Disabled
 
-    Run Keyword If  ${REDFISH_SUPPORT_TRANS_STATE} == ${1}
-    ...    Redfish Set Auto Reboot  ${rest_redfish_dict["${value}"]}
-    ...  ELSE
-    ...    Set Auto Reboot  ${value}
+    IF  ${REDFISH_SUPPORT_TRANS_STATE} == ${1}
+        Redfish Set Auto Reboot  ${rest_redfish_dict["${value}"]}
+    ELSE
+        Set Auto Reboot  ${value}
+    END
 
 Set Auto Reboot
     [Documentation]  Set the given auto reboot setting.
@@ -843,8 +842,9 @@
     ${data}=  Create Dictionary  BootSourceOverrideEnabled=${override_enabled}
     ...  BootSourceOverrideTarget=${override_target}
 
-    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
-    ...  Set To Dictionary  ${data}  BootSourceOverrideMode  ${override_mode}
+    IF  '${PLATFORM_ARCH_TYPE}' == 'x86'
+        Set To Dictionary  ${data}  BootSourceOverrideMode  ${override_mode}
+    END
 
     ${payload}=  Create Dictionary  Boot=${data}
 
@@ -854,8 +854,9 @@
     ${resp}=  Redfish.Get Attribute  /redfish/v1/Systems/${SYSTEM_ID}  Boot
     Should Be Equal As Strings  ${resp["BootSourceOverrideEnabled"]}  ${override_enabled}
     Should Be Equal As Strings  ${resp["BootSourceOverrideTarget"]}  ${override_target}
-    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
-    ...  Should Be Equal As Strings  ${resp["BootSourceOverrideMode"]}  ${override_mode}
+    IF  '${PLATFORM_ARCH_TYPE}' == 'x86'
+        Should Be Equal As Strings  ${resp["BootSourceOverrideMode"]}  ${override_mode}
+    END
 
 
 # Redfish state keywords.
@@ -969,8 +970,9 @@
     ...  host=Disabled
     ...  boot_progress=None
 
-    Run Keyword If  '${PLATFORM_ARCH_TYPE}' == 'x86'
-    ...  Set To Dictionary  ${standby_states}  boot_progress=NA
+    IF  '${PLATFORM_ARCH_TYPE}' == 'x86'
+        Set To Dictionary  ${standby_states}  boot_progress=NA
+    END
 
     Wait Until Keyword Succeeds  3 min  10 sec  Redfish Get States
 
