diff --git a/lib/ipmi_client.py b/lib/ipmi_client.py
new file mode 100644
index 0000000..6ed5a51
--- /dev/null
+++ b/lib/ipmi_client.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+
+r"""
+A python companion file for ipmi_client.robot.
+"""
+
+import gen_print as gp
+import gen_cmd as gc
+from robot.libraries.BuiltIn import BuiltIn
+
+
+def build_ipmi_ext_cmd(quiet=None):
+    r"""
+    Build the global IPMI_EXT_CMD variable.
+
+    If global variable IPMI_EXT_CMD already has a value, this keyword will
+    simply return without taking any action.
+
+    This keyword is designed for use by keywords which use the IPMI_EXT_CMD
+    variable (e.g. 'Run External IPMI Raw Command').  This keyword is
+    warranted because the ipmitool program may or may not accept the -U (i.e.
+    username) parameter depending on the version of code loaded on the BMC.
+    This keyword will determine whether the "-U" parameter should be used and
+    create IPMI_EXT_CMD accordingly.
+
+    Furthermore, this keyword will run the command to create the 'root' IPMI
+    username.
+
+    Description of argument(s):
+    # quiet                         Indicates whether this keyword should run
+    #                               without any output to the console.
+    """
+
+    ipmi_ext_cmd = BuiltIn().get_variable_value("${IPMI_EXT_CMD}", "")
+    if ipmi_ext_cmd != "":
+        return
+
+    quiet = int(gp.get_var_value(quiet, 0))
+    openbmc_host = BuiltIn().get_variable_value("${OPENBMC_HOST}")
+    ipmi_username = BuiltIn().get_variable_value("${IPMI_USERNAME}", "root")
+    ipmi_password = BuiltIn().get_variable_value("${IPMI_PASSWORD}",
+                                                 "0penBmc")
+    ipmi_cipher_level = BuiltIn().get_variable_value("${IPMI_CIPHER_LEVEL}",
+                                                     "3")
+
+    old_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\
+        + " -P " + ipmi_password
+    new_ipmi_ext_cmd = "ipmitool -I lanplus -C " + str(ipmi_cipher_level)\
+        + " -U " + ipmi_username + " -P " + ipmi_password
+    # Use a basic ipmitool command to help us determine whether the BMC will
+    # accept the -U parm.
+    ipmi_cmd = "power status"
+    ipmi_cmd_suffix = " -H " + openbmc_host + " " + ipmi_cmd
+    print_output = 0
+    cmd_buf = new_ipmi_ext_cmd + ipmi_cmd_suffix
+    new_rc, stdout = gc.shell_cmd(cmd_buf,
+                                  print_output=print_output,
+                                  show_err=0,
+                                  ignore_err=1)
+    gp.qprint_varx("rc", new_rc, 1)
+    if new_rc == 0:
+        ipmi_ext_cmd = new_ipmi_ext_cmd
+        BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd)
+        return
+
+    cmd_buf = old_ipmi_ext_cmd + ipmi_cmd_suffix
+    old_rc, stdout = gc.shell_cmd(cmd_buf,
+                                  print_output=print_output,
+                                  show_err=0,
+                                  ignore_err=1)
+    gp.qprint_varx("rc", old_rc, 1)
+
+    if old_rc == 0:
+        ipmi_ext_cmd = old_ipmi_ext_cmd
+        BuiltIn().set_global_variable("${IPMI_EXT_CMD}", ipmi_ext_cmd)
+        return
+
+    message = "Unable to run ipmitool, (with or without the '-U' parm)."
+    BuiltIn().fail(message)
+
+
+build_ipmi_ext_cmd()
diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index 4f6e0f2..030712f 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -8,6 +8,7 @@
 Resource        ../lib/state_manager.robot
 
 Library         String
+Library         ipmi_client.py
 
 *** Variables ***
 ${dbusHostIpmicmd1}=   dbus-send --system  ${OPENBMC_BASE_URI}HostIpmi/1
@@ -15,7 +16,7 @@
 ${netfnByte}=          ${EMPTY}
 ${cmdByte}=            ${EMPTY}
 ${arrayByte}=          array:byte:
-${IPMI_EXT_CMD}=       ipmitool -I lanplus -C ${IPMI_CIPHER_LEVEL}
+${IPMI_EXT_CMD}        ${EMPTY}
 ${IPMI_USER_OPTIONS}   ${EMPTY}
 ${IPMI_INBAND_CMD}=    ipmitool -C ${IPMI_CIPHER_LEVEL}
 ${HOST}=               -H
@@ -109,6 +110,7 @@
 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}
