diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index c37a2af..783198f 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -47,7 +47,7 @@
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Dbus'
     ...    Run Dbus IPMI RAW Command  ${command}
     ...  ELSE  Fail  msg=Invalid IPMI Command type provided: ${IPMI_COMMAND}
-    [Return]  ${resp}
+    RETURN  ${resp}
 
 
 Run IPMI Standard Command
@@ -71,7 +71,7 @@
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Dbus'
     ...    Run Dbus IPMI Standard Command  ${command}
     ...  ELSE  Fail  msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
-    [Return]  ${resp}
+    RETURN  ${resp}
 
 
 Run Dbus IPMI RAW Command
@@ -93,7 +93,7 @@
     ...    ${IPMITOOL_PATH} -I dbus ${command}    return_stdout=True
     ...    return_stderr= True    return_rc=True
     Should Be Equal    ${output}    ${0}    msg=${stderr}
-    [Return]    ${stdout}
+    RETURN    ${stdout}
 
 
 Run Inband IPMI Raw Command
@@ -116,7 +116,7 @@
     ${stdout}  ${stderr}=  Execute Command  ${ipmi_cmd}  return_stderr=True
     Return From Keyword If  ${fail_on_err} == ${0}  ${stderr}
     Should Be Empty  ${stderr}  msg=${stdout}
-    [Return]  ${stdout}
+    RETURN  ${stdout}
 
 
 Run Inband IPMI Standard Command
@@ -142,7 +142,7 @@
     ${stdout}  ${stderr}=  Execute Command  ${ipmi_cmd}  return_stderr=True
     Return From Keyword If  ${fail_on_err} == ${0}  ${stderr}
     Should Be Empty  ${stderr}  msg=${stdout}
-    [Return]  ${stdout}
+    RETURN  ${stdout}
 
 
 Run External IPMI Standard Command
@@ -167,7 +167,7 @@
     ${rc}  ${output}=  Run And Return RC and Output  ${ipmi_cmd}
     Return From Keyword If  ${fail_on_err} == ${0}  ${output}
     Should Be Equal  ${rc}  ${expected_rc}  msg=${output}
-    [Return]  ${output}
+    RETURN  ${output}
 
 
 Run External IPMI Raw Command
@@ -181,7 +181,7 @@
 
     ${output}=  Run External IPMI Standard Command
     ...  raw ${command}  ${fail_on_err}  &{options}
-    [Return]  ${output}
+    RETURN  ${output}
 
 
 Check If IPMI Tool Exist
@@ -228,7 +228,7 @@
     # Logging SOL output for debug purpose.
     Log  ${output}
 
-    [Return]  ${output}
+    RETURN  ${output}
 
 
 Byte Conversion
@@ -274,7 +274,7 @@
     #   Equivalent dbus-send argument for smaller IPMI raw command:
     #   byte:0x00 byte:0x06 byte:0x00 byte:0x36
     Run Keyword if   ${argLength} == 9     Return from Keyword    ${valueinBytesWithoutArray}
-    [Return]    ${valueinBytesWithArray}
+    RETURN    ${valueinBytesWithArray}
 
 
 Set NetFn Byte
@@ -367,7 +367,7 @@
     Should Not Contain  ${output}  Error
     ${output}=  Fetch From Right  ${output}  ${SPACE}
 
-    [Return]  ${output}
+    RETURN  ${output}
 
 
 Set BMC Network From Host
@@ -435,7 +435,7 @@
     ${random_userid}=  Find Free User Id
     IPMI Create User  ${random_userid}  ${random_username}
     Wait And Confirm New User Entry  ${random_username}
-    [Return]  ${random_userid}  ${random_username}
+    RETURN  ${random_userid}  ${random_username}
 
 
 Find Free User Id
@@ -453,7 +453,7 @@
 
         Exit For Loop If  ${is_empty} == ${True}
     END
-    [Return]  ${random_userid}
+    RETURN  ${random_userid}
 
 
 Check Enabled User Count
@@ -559,7 +559,7 @@
 
     Sleep  5s
 
-    [Return]  ${resp}
+    RETURN  ${resp}
 
 
 Fetch One Threshold Sensor From Sensor List
@@ -582,7 +582,7 @@
 
     ${random_sensor_name}=  Evaluate  random.choice(${sensor_name_list})  random
 
-    [Return]  ${random_sensor_name}
+    RETURN  ${random_sensor_name}
 
 Fetch Sensor Details From SDR
     [Documentation]  Identify the sensors from sdr get and fetch sensor details required.
@@ -602,7 +602,7 @@
     ...  case-insensitive
     ${setting_status}=  Fetch From Right  ${setting_line}  :${SPACE}
 
-    [Return]  ${setting_status}
+    RETURN  ${setting_status}
 
 
 Get Bytes From SDR Sensor
@@ -618,7 +618,7 @@
     ${sensor_hex}=  Replace String  ${sensor_detail[1]}  )  ${EMPTY}
     ${sensor_hex}=  Zfill Data  ${sensor_hex}  2
 
-    [Return]  ${sensor_hex}
+    RETURN  ${sensor_hex}
 
 
 Get Current Date from BMC
@@ -640,7 +640,7 @@
     # Convert the date to specified format, default:%m/%d/%Y %H:%M:%S
     ${date}=  Convert Date  ${date}  date_format=%b %d %H:%M:%S %Y  result_format=${date_format}  exclude_millis=True
 
-    [Return]   ${date}
+    RETURN   ${date}
 
 
 Get SEL Info Via IPMI
@@ -661,7 +661,7 @@
     ...  ${IPMI_RAW_CMD['SEL_entry']['SEL_info'][0]}
     ${resp}=  Split String  ${resp}
 
-    [Return]  ${resp}
+    RETURN  ${resp}
 
 
 Verify Invalid IPMI Command
@@ -705,4 +705,4 @@
     # ${hex1} will contains the data to write for fru in list.
     # ${hex2} will contains the data to verify fru after write operation completed.
 
-    [Return]  ${hex1}  ${hex2}
+    RETURN  ${hex1}  ${hex2}
