diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index cadae5e..cedc9e5 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -16,7 +16,6 @@
 ${netfnByte}=          ${EMPTY}
 ${cmdByte}=            ${EMPTY}
 ${arrayByte}=          array:byte:
-${IPMI_EXT_CMD}        ${EMPTY}
 ${IPMI_USER_OPTIONS}   ${EMPTY}
 ${IPMI_INBAND_CMD}=    ipmitool -C ${IPMI_CIPHER_LEVEL}
 ${HOST}=               -H
@@ -25,121 +24,154 @@
 *** Keywords ***
 
 Run IPMI Command
-    [Documentation]  Run the given IPMI command.
-    [Arguments]  ${args}
+    [Documentation]  Run the raw IPMI command.
+    [Arguments]  ${command}  ${fail_on_err}=${1}  &{options}
+
+    # Description of argument(s):
+    # command                       The IPMI command string to be executed
+    #                               (e.g. "power status").
+    # fail_on_err                   Fail if the IPMI command execution fails.
+    # options                       Additional ipmitool command options (e.g.
+    #                               -C=3, -I=lanplus, etc.).  Currently, only
+    #                               used for external IPMI commands.
+
     ${resp}=  Run Keyword If  '${IPMI_COMMAND}' == 'External'
-    ...  Run External IPMI Raw Command  ${args}
+    ...    Run External IPMI Raw Command  ${command}  ${fail_on_err}  &{options}
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Inband'
-    ...  Run Inband IPMI Raw Command  ${args}
+    ...    Run Inband IPMI Raw Command  ${command}
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Dbus'
-    ...  Run Dbus IPMI RAW Command  ${args}
-    ...  ELSE  Fail  msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
+    ...    Run Dbus IPMI RAW Command  ${command}
+    ...  ELSE  Fail  msg=Invalid IPMI Command type provided: ${IPMI_COMMAND}
     [Return]  ${resp}
 
+
 Run IPMI Standard Command
     [Documentation]  Run the standard IPMI command.
-    [Arguments]  ${args}  ${fail_on_err}=${1}
+    [Arguments]  ${command}  ${fail_on_err}=${1}  &{options}
 
     # Description of argument(s):
-    # args         IPMI command to be executed.
-    # fail_on_err  Fail if keyword the IPMI command fails
+    # command                       The IPMI command string to be executed
+    #                               (e.g. "0x06 0x36").
+    # fail_on_err                   Fail if the IPMI command execution fails.
+    # options                       Additional ipmitool command options (e.g.
+    #                               -C=3, -I=lanplus, etc.).  Currently, only
+    #                               used for external IPMI commands.
 
     ${resp}=  Run Keyword If  '${IPMI_COMMAND}' == 'External'
-    ...  Run External IPMI Standard Command  ${args}  ${fail_on_err}
+    ...    Run External IPMI Standard Command  ${command}  ${fail_on_err}  &{options}
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Inband'
-    ...  Run Inband IPMI Standard Command  ${args}  ${fail_on_err}
+    ...    Run Inband IPMI Standard Command  ${command}  ${fail_on_err}
     ...  ELSE IF  '${IPMI_COMMAND}' == 'Dbus'
-    ...  Run Dbus IPMI Standard Command  ${args}
+    ...    Run Dbus IPMI Standard Command  ${command}
     ...  ELSE  Fail  msg=Invalid IPMI Command type provided : ${IPMI_COMMAND}
 
     [Return]  ${resp}
 
+
 Run Dbus IPMI RAW Command
     [Documentation]  Run the raw IPMI command through dbus.
-    [Arguments]    ${args}
-    ${valueinBytes}=   Byte Conversion  ${args}
+    [Arguments]    ${command}
+    ${valueinBytes}=   Byte Conversion  ${command}
     ${cmd}=   Catenate   ${dbushostipmicmd1} ${dbusHostIpmiCmdReceivedMsg}
     ${cmd}=   Catenate   ${cmd} ${valueinBytes}
     ${output}   ${stderr}=  Execute Command  ${cmd}  return_stderr=True
     Should Be Empty      ${stderr}
     set test variable    ${OUTPUT}     "${output}"
 
+
 Run Dbus IPMI Standard Command
     [Documentation]  Run the standard IPMI command through dbus.
-    [Arguments]    ${args}
+    [Arguments]    ${command}
     Copy ipmitool
     ${stdout}    ${stderr}    ${output}=  Execute Command
-    ...    /tmp/ipmitool -I dbus ${args}    return_stdout=True
+    ...    /tmp/ipmitool -I dbus ${command}    return_stdout=True
     ...    return_stderr= True    return_rc=True
     Should Be Equal    ${output}    ${0}    msg=${stderr}
     [Return]    ${stdout}
 
+
 Run Inband IPMI Raw Command
     [Documentation]  Run the raw IPMI command in-band.
-    [Arguments]  ${args}  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
+    [Arguments]  ${command}  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
     ...          ${os_password}=${OS_PASSWORD}
 
-    # Description of arguments:
-    # ${args}  parameters to IPMI command.
-    # ${os_host} IP address of the OS Host.
-    # ${os_username}  OS Host Login user name.
-    # ${os_password}  OS Host Login passwrd.
+    # Description of argument(s):
+    # command                       The IPMI command string to be executed
+    #                               (e.g. "0x06 0x36").
+    # os_host                       The host name or IP address of the OS Host.
+    # os_username                   The OS host user name.
+    # os_password                   The OS host passwrd.
 
     Login To OS Host  ${os_host}  ${os_username}  ${os_password}
     Check If IPMI Tool Exist
 
-    ${inband_raw_cmd}=  Catenate  ${IPMI_INBAND_CMD}  ${RAW}  ${args}
-    ${stdout}  ${stderr}=  Execute Command  ${inband_raw_cmd}  return_stderr=True
+    ${ipmi_cmd}=  Catenate  ${IPMI_INBAND_CMD}  ${RAW}  ${command}
+    Qprint Issuing  ${ipmi_cmd}
+    ${stdout}  ${stderr}=  Execute Command  ${ipmi_cmd}  return_stderr=True
     Should Be Empty  ${stderr}  msg=${stdout}
     [Return]  ${stdout}
 
+
 Run Inband IPMI Standard Command
     [Documentation]  Run the standard IPMI command in-band.
-    [Arguments]  ${args}  ${fail_on_err}=${1}  ${os_host}=${OS_HOST}
+    [Arguments]  ${command}  ${fail_on_err}=${1}  ${os_host}=${OS_HOST}
     ...          ${os_username}=${OS_USERNAME}  ${os_password}=${OS_PASSWORD}
 
-    # Description of arguments:
-    # ${args}  parameters to IPMI command.
-    # ${os_host} IP address of the OS Host.
-    # ${os_username}  OS Host Login user name.
-    # ${os_password}  OS Host Login passwrd.
+    # Description of argument(s):
+    # command                       The IPMI command string to be executed
+    #                               (e.g. "power status").
+    # os_host                       The host name or IP address of the OS Host.
+    # os_username                   The OS host user name.
+    # os_password                   The OS host passwrd.
 
     Login To OS Host  ${os_host}  ${os_username}  ${os_password}
     Check If IPMI Tool Exist
 
-    ${inband_std_cmd}=  Catenate  ${IPMI_INBAND_CMD}  ${args}
-    ${stdout}  ${stderr}=  Execute Command  ${inband_std_cmd}  return_stderr=True
+    ${ipmi_cmd}=  Catenate  ${IPMI_INBAND_CMD}  ${command}
+    Qprint Issuing  ${ipmi_cmd}
+    ${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}
 
-Run External IPMI Raw Command
-    [Documentation]  Run the raw IPMI command externally.
-    [Arguments]    ${args}
-
-    ${ipmi_raw_cmd}=   Catenate  SEPARATOR=
-    ...    ${IPMI_EXT_CMD} -P${SPACE}${IPMI_PASSWORD}${SPACE}
-    ...    ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${RAW}${SPACE}${args}
-    ${rc}    ${output}=    Run and Return RC and Output    ${ipmi_raw_cmd}
-    Should Be Equal    ${rc}    ${0}    msg=${output}
-    [Return]    ${output}
 
 Run External IPMI Standard Command
-    [Documentation]  Run the standard IPMI command in-band.
-    [Arguments]  ${args}  ${fail_on_err}=${1}
+    [Documentation]  Run the external IPMI standard command.
+    [Arguments]  ${command}  ${fail_on_err}=${1}  &{options}
 
     # Description of argument(s):
-    # args         IPMI command to be executed.
-    # fail_on_err  Fail if keyword the IPMI command fails
+    # command                       The IPMI command string to be executed
+    #                               (e.g. "power status").  Note that if
+    #                               ${IPMI_USER_OPTIONS} has a value (e.g.
+    #                               "-vvv"), it will be pre-pended to this
+    #                               command string.
+    # fail_on_err                   Fail if the IPMI command execution fails.
+    # options                       Additional ipmitool command options (e.g.
+    #                               -C=3, -I=lanplus, etc.).
 
-    ${ipmi_cmd}=  Catenate  SEPARATOR=
-    ...  ${IPMI_EXT_CMD} ${IPMI_USER_OPTIONS} -P${SPACE}${IPMI_PASSWORD}
-    ...  ${SPACE}${HOST}${SPACE}${OPENBMC_HOST}${SPACE}${args}
+    ${command_string}=  Process IPMI User Options  ${command}
+    ${ipmi_cmd}=  Create IPMI Ext Command String  ${command_string}  &{options}
+    Qprint Issuing  ${ipmi_cmd}
     ${rc}  ${output}=  Run And Return RC and Output  ${ipmi_cmd}
     Return From Keyword If  ${fail_on_err} == ${0}  ${output}
     Should Be Equal  ${rc}  ${0}  msg=${output}
     [Return]  ${output}
 
+
+Run External IPMI Raw Command
+    [Documentation]  Run the external IPMI raw command.
+    [Arguments]  ${command}  ${fail_on_err}=${1}  &{options}
+
+    # This keyword is a wrapper for 'Run External IPMI Standard Command'. See
+    # that keyword's prolog for argument details.  This keyword will pre-pend
+    # the word "raw" plus a space to command prior to calling 'Run External
+    # IPMI Standard Command'.
+
+    ${output}=  Run External IPMI Standard Command
+    ...  raw ${command}  ${fail_on_err}  &{options}
+    [Return]  ${output}
+
+
 Check If IPMI Tool Exist
     [Documentation]  Check if IPMI Tool installed or not.
     ${output}=  Execute Command  which ipmitool
@@ -149,15 +181,15 @@
 Activate SOL Via IPMI
     [Documentation]  Start SOL using IPMI and route output to a file.
     [Arguments]  ${file_path}=/tmp/sol_${OPENBMC_HOST}
+
     # Description of argument(s):
-    # file_path  The file path on the local machine (vs OBMC) to collect SOL
-    #            output. By default SOL output is collected at
-    #            /tmp/sol_<BMC_IP> else user input location.
+    # file_path                     The file path on the local machine (vs.
+    #                               OBMC) to collect SOL output. By default
+    #                               SOL output is collected at
+    #                               /tmp/sol_<BMC_IP> else user input location.
 
-    ${ipmi_cmd}=  Catenate  SEPARATOR=
-    ...  ${IPMI_EXT_CMD} -P${SPACE}${IPMI_PASSWORD}${SPACE}${HOST}
-    ...  ${SPACE}${OPENBMC_HOST}${SPACE}sol activate usesolkeepalive
-
+    ${ipmi_cmd}=  Create IPMI Ext Command String  sol activate usesolkeepalive
+    Qprint Issuing  ${ipmi_cmd}
     Start Process  ${ipmi_cmd}  shell=True  stdout=${file_path}
     ...  alias=sol_proc
 
@@ -165,15 +197,15 @@
 Deactivate SOL Via IPMI
     [Documentation]  Stop SOL using IPMI and return SOL output.
     [Arguments]  ${file_path}=/tmp/sol_${OPENBMC_HOST}
+
     # Description of argument(s):
-    # file_path  The file path on the local machine to copy SOL output
-    #            collected by above "Activate SOL Via IPMI" keyword.
-    #            By default it copies log from /tmp/sol_<BMC_IP>.
+    # file_path                     The file path on the local machine to copy
+    #                               SOL output collected by above "Activate
+    #                               SOL Via IPMI" keyword.  By default it
+    #                               copies log from /tmp/sol_<BMC_IP>.
 
-    ${ipmi_cmd}=  Catenate  SEPARATOR=
-    ...  ${IPMI_EXT_CMD} -P${SPACE}${IPMI_PASSWORD}${SPACE}
-    ...  ${HOST}${SPACE}${OPENBMC_HOST}${SPACE}sol deactivate
-
+    ${ipmi_cmd}=  Create IPMI Ext Command String  sol deactivate
+    Qprint Issuing  ${ipmi_cmd}
     ${rc}  ${output}=  Run and Return RC and Output  ${ipmi_cmd}
     Run Keyword If  ${rc} > 0  Run Keywords
     ...  Run Keyword And Ignore Error  Terminate Process  sol_proc
@@ -222,13 +254,13 @@
     ${valueinBytesWithArray}=   Catenate  ${valueinBytesWithArray} ${arrayByte}
     ${valueinBytesWithoutArray}=   Catenate  byte:0x00 ${netfnByte}  byte:0x00
     ${valueinBytesWithoutArray}=   Catenate  ${valueinBytesWithoutArray} ${cmdByte}
-#   To Check scenario for smaller IPMI raw commands with only 2 arguments
-#   instead of usual 12 arguments.
-#   Sample small IPMI raw command: Run IPMI command 0x06 0x36
-#   If IPMI raw argument length is only 9 then return value in bytes without
-#   array population.
-#   Equivalent dbus-send argument for smaller IPMI raw command:
-#   byte:0x00 byte:0x06 byte:0x00 byte:0x36
+    #   To Check scenario for smaller IPMI raw commands with only 2 arguments
+    #   instead of usual 12 arguments.
+    #   Sample small IPMI raw command: Run IPMI command 0x06 0x36
+    #   If IPMI raw argument length is only 9 then return value in bytes without
+    #   array population.
+    #   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}
 
@@ -239,12 +271,14 @@
     ${netfnByteLocal}=  Catenate   byte:${word}
     Set Global Variable  ${netfnByte}  ${netfnByteLocal}
 
+
 Set Cmd Byte
     [Documentation]  Set the command byte.
     [Arguments]    ${word}
     ${cmdByteLocal}=  Catenate   byte:${word}
     Set Global Variable  ${cmdByte}  ${cmdByteLocal}
 
+
 Set Array Byte
     [Documentation]  Set the array byte.
     [Arguments]    ${word}
@@ -252,6 +286,7 @@
     ${arrayByteLocal}=   Catenate   SEPARATOR=  ${arrayByteLocal}   ,
     Set Global Variable  ${arrayByte}   ${arrayByteLocal}
 
+
 Copy ipmitool
     [Documentation]  Copy the ipmitool to the BMC.
     ${ipmitool_error}=  Catenate  The ipmitool program could not be found in the tools directory.
@@ -267,11 +302,14 @@
     Login   ${OPENBMC_USERNAME}    ${OPENBMC_PASSWORD}
     Execute Command     chmod +x /tmp/ipmitool
 
+
 Initiate Host Boot Via External IPMI
     [Documentation]  Initiate host power on using external IPMI.
     [Arguments]  ${wait}=${1}
+
     # Description of argument(s):
-    # wait  Indicates that this keyword should wait for host running state.
+    # wait                          Indicates that this keyword should wait
+    #                               for host running state.
 
     ${output}=  Run External IPMI Standard Command  chassis power on
     Should Not Contain  ${output}  Error
@@ -279,11 +317,14 @@
     Run Keyword If  '${wait}' == '${0}'  Return From Keyword
     Wait Until Keyword Succeeds  10 min  10 sec  Is Host Running
 
+
 Initiate Host PowerOff Via External IPMI
     [Documentation]  Initiate host power off using external IPMI.
     [Arguments]  ${wait}=${1}
+
     # Description of argument(s):
-    # wait  Indicates that this keyword should wait for host off state.
+    # wait                          Indicates that this keyword should wait
+    #                               for host off state.
 
     ${output}=  Run External IPMI Standard Command  chassis power off
     Should Not Contain  ${output}  Error
@@ -291,6 +332,7 @@
     Run Keyword If  '${wait}' == '${0}'  Return From Keyword
     Wait Until Keyword Succeeds  3 min  10 sec  Is Host Off
 
+
 Get Host State Via External IPMI
     [Documentation]  Returns host state using external IPMI.
 
@@ -306,7 +348,8 @@
     [Arguments]  ${nw_info}
 
     # Description of argument(s):
-    # nw_info    A dictionary containing the network information to apply.
+    # nw_info                       A dictionary containing the network
+    #                               information to apply.
 
     Run Inband IPMI Standard Command
     ...  lan set 1 ipaddr ${nw_info['IP Address']}
