diff --git a/lib/dvt/obmc_call_points.robot b/lib/dvt/obmc_call_points.robot
deleted file mode 100644
index 1d8db7c..0000000
--- a/lib/dvt/obmc_call_points.robot
+++ /dev/null
@@ -1,36 +0,0 @@
-*** Settings ***
-Documentation  This module contains keywords within tests/obmc_boot_test that
-...  are points at which to call plug-ins.
-
-Resource  obmc_driver_vars.txt
-
-*** Keywords ***
-Call Point Setup
-    [Documentation]  Call any plugins that have a cp_setup program
-    [Teardown]  Log to Console  **Plugin** end call point: cp_setup${\n}
-
-    Log to Console  ${\n}**Plugin** start call point: cp_setup
-
-Call Point Pre Boot
-    [Documentation]  Call any plugins that have a cp_pre_boot program
-    [Teardown]  Log to Console  **Plugin** end call point: cp_pre_boot${\n}
-
-    Log to Console  ${\n}**Plugin** start call point: cp_pre_boot
-
-Call Point Post Boot
-    [Documentation]  Call any plugins that have a cp_post_boot program
-    [Teardown]  Log to Console  **Plugin** end call point: cp_post_boot${\n}
-
-    Log to Console  ${\n}**Plugin** start call point: cp_post_boot
-
-Call Point FFDC
-    [Documentation]  Call any plugins that have a cp_ffdc program
-    [Teardown]  Log to Console  **Plugin** end call point: cp_ffdc${\n}
-
-    Log to Console  ${\n}**Plugin** start call point: cp_ffdc
-
-Call Point Stop Check
-    [Documentation]  Call any plugins that have a cp_stop_check program
-    [Teardown]  Log to Console  **Plugin** end call point: cp_stop_check${\n}
-
-    Log to Console  ${\n}**Plugin** start call point: cp_stop_check
diff --git a/lib/dvt/obmc_driver_vars.txt b/lib/dvt/obmc_driver_vars.txt
index 41bc6eb..0ce4bee 100644
--- a/lib/dvt/obmc_driver_vars.txt
+++ b/lib/dvt/obmc_driver_vars.txt
@@ -5,31 +5,24 @@
 # Alias of the master connection to the BMC
 ${master_alias}  master
 
-# The count of the IPL we're currently doing - used in the FOR loop
-${IPL_COUNT}  ${0}
+# The count of the boot we're currently doing - used in the FOR loop.
+${BOOT_COUNT}  ${0}
 
-# The total number of IPLs we plan on doing
-${IPL_TOTAL}  ${3}
+# The status of the last boots that finished
+${BOOT_STATUS}  ${EMPTY}
 
-# The total number of IPLs that have passed and failed
-${IPL_PASSED}  ${0}
-${IPL_FAILED}  ${0}
-
-# The status of the last IPL that finished
-${IPL_STATUS}  ${EMPTY}
-
-# A list of the last 10 IPLs that have been performed (see Log Last Ten)
+# A list of the last 10 boots that have been performed (see Log Last Ten)
 @{LAST_TEN}
 
-# A list of keywords of valid IPLs that can be performed
+# A list of keywords of valid boots that can be performed
 @{VALID_POWER_ON}  BMC Power On
 @{VALID_POWER_OFF}  BMC Power Off
 #@{VALID_ACCYCLE}
 #@{VALID_REBOOT}
 
-# The master list of all IPLs possible, for reference. (Currently not in use).
-@{MASTER_IPL_LIST}  BMC Power On  BMC Power Off
+# The master list of all boots possible, for reference. (Currently not in use).
+@{MASTER_BOOT_LIST}  BMC Power On  BMC Power Off
 
-# The list of available IPLs - Modifying this will limit what IPLs can be done.
+# The list of available boots - Modifying this will limit what boots can be done.
 # This list is also used by: Setup Run Table, Log Run Table
-@{AVAIL_IPLS}  BMC Power On  BMC Power Off
+@{AVAIL_BOOTS}  BMC Power On  BMC Power Off
diff --git a/lib/gen_print.py b/lib/gen_print.py
index 996a289..6b405d7 100755
--- a/lib/gen_print.py
+++ b/lib/gen_print.py
@@ -17,11 +17,10 @@
 import logging
 import collections
 
-running_from_robot = 1
 try:
     from robot.utils import DotDict
 except ImportError:
-    running_from_robot = 0
+    pass
 
 import gen_arg as ga
 
@@ -70,7 +69,7 @@
 try:
     # The user can set environment variable "GEN_PRINT_DEBUG" to get debug
     # output from this module.
-    gen_print_debug = os.environ['GEN_PRINT_DEBUG']
+    gen_print_debug = int(os.environ['GEN_PRINT_DEBUG'])
 except KeyError:
     gen_print_debug = 0
 
@@ -527,10 +526,11 @@
             if type(var_value) in (dict, collections.OrderedDict):
                 type_is_dict = 1
         except AttributeError:
-                type_is_dict = 0
-        if running_from_robot:
-            if type(var_value) is DotDict:
-                type_is_dict = 1
+            try:
+                if type(var_value) is DotDict:
+                    type_is_dict = 1
+            except NameError:
+                pass
         if type_is_dict:
             for key, value in var_value.iteritems():
                 ix += 1
diff --git a/lib/gen_robot_print.py b/lib/gen_robot_print.py
index 8fdd7d0..7c48912 100755
--- a/lib/gen_robot_print.py
+++ b/lib/gen_robot_print.py
@@ -8,6 +8,11 @@
 import re
 import os
 
+try:
+    from robot.utils import DotDict as my_ord_dict
+except ImportError:
+    from collections import OrderedDict as my_ord_dict
+
 import gen_print as gp
 
 from robot.libraries.BuiltIn import BuiltIn
@@ -17,7 +22,7 @@
 try:
     # The user can set environment variable "GEN_ROBOT_PRINT_DEBUG" to get
     # debug output from this module.
-    gen_robot_print_debug = os.environ['GEN_ROBOT_PRINT_DEBUG']
+    gen_robot_print_debug = int(os.environ['GEN_ROBOT_PRINT_DEBUG'])
 except KeyError:
     gen_robot_print_debug = 0
 
@@ -180,6 +185,9 @@
     buffer += sprint_vars(str(indent), str(loc_col1_width), *parm_list)
     buffer += "\n"
 
+    # Setting global program_pid.
+    BuiltIn().set_global_variable("${program_pid}", os.getpid())
+
     return buffer
 
 ###############################################################################
@@ -309,6 +317,14 @@
         'print_issuing_keyword', 'print_vars', 'print_auto_vars'
     ]
 func_names = gp.func_names + robot_func_names
+
+func_names = list(my_ord_dict.fromkeys(func_names))
+
+if gen_robot_print_debug:
+    rprintn()
+    BuiltIn().log_to_console(gp.sprint_var(func_names), no_newline=True)
+    rprintn()
+
 for func_name in func_names:
     # The print_var function's job is to figure out the name of arg 1 and
     # then call print_varx.  This is not currently supported for robot
@@ -332,6 +348,7 @@
 
     pgm_definition_string = '\n'.join(func_def)
     if gen_robot_print_debug:
+        rprintn()
         rprintn(pgm_definition_string)
     exec(pgm_definition_string)
 
@@ -375,17 +392,20 @@
         rprintn(pgm_definition_string)
     exec(pgm_definition_string)
 
-    # Create abbreviated aliases (e.g. rpvarx is an alias for rprint_varx).
+    prefixes = ["", "q", "d"]
     alias = re.sub("print_", "p", func_name)
-    cmd_buf = robot_prefix + alias + " = " + robot_prefix + func_name
-    if gen_robot_print_debug:
-        rprintn(cmd_buf)
-    exec(cmd_buf)
+    for prefix2 in prefixes:
+        cmd_buf = robot_prefix + prefix2 + alias + " = " + robot_prefix +\
+            prefix2 + func_name
+        if gen_robot_print_debug:
+            rprintn(cmd_buf)
+        exec(cmd_buf)
 
 # Define an alias.  rpvar is just a special case of rpvars where the args
 # list contains only one element.
 cmd_buf = "rpvar = rpvars"
 if gen_robot_print_debug:
+    rprintn()
     rprintn(cmd_buf)
 exec(cmd_buf)
 
diff --git a/lib/rest_client.robot b/lib/rest_client.robot
index eb1a28a..6bbe21a 100644
--- a/lib/rest_client.robot
+++ b/lib/rest_client.robot
@@ -57,26 +57,31 @@
 ${HTTP_HTTP_VERSION_NOT_SUPPORTED}    505
 ${HTTP_INSUFFICIENT_STORAGE}    507
 ${HTTP_NOT_EXTENDED}    510
+# Assign default value to QUIET for programs which may not define it.
+${QUIET}  ${0}
 
 *** Keywords ***
 OpenBMC Get Request
-    [Arguments]    ${uri}    ${timeout}=10    &{kwargs}
+    [Arguments]    ${uri}    ${timeout}=10  ${quiet}=${QUIET}  &{kwargs}
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
-    Log Request    method=Get    base_uri=${base_uri}    args=&{kwargs}
+    Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Get
+    ...  base_uri=${base_uri}  args=&{kwargs}
     Initialize OpenBMC    ${timeout}
-    ${ret}=    Get Request    openbmc    ${base_uri}    &{kwargs}  timeout=${timeout}
-    Log Response    ${ret}
+    ${ret}=  Get Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
+    Run Keyword If  '${quiet}' == '${0}'  Log Response  ${ret}
     [Return]    ${ret}
 
 OpenBMC Post Request
-    [Arguments]    ${uri}    ${timeout}=10    &{kwargs}
+    [Arguments]    ${uri}    ${timeout}=10  ${quiet}=${QUIET}  &{kwargs}
+
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
     ${headers}=     Create Dictionary   Content-Type=application/json
     set to dictionary   ${kwargs}       headers     ${headers}
-    Log Request    method=Post    base_uri=${base_uri}    args=&{kwargs}
+    Run Keyword If  '${quiet}' == '${0}'  Log Request  method=Post
+    ...  base_uri=${base_uri}  args=&{kwargs}
     Initialize OpenBMC    ${timeout}
-    ${ret}=    Post Request    openbmc    ${base_uri}    &{kwargs}  timeout=${timeout}
-    Log Response    ${ret}
+    ${ret}=  Post Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
+    Run Keyword If  '${quiet}' == '${0}'  Log Response  ${ret}
     [Return]    ${ret}
 
 OpenBMC Put Request
@@ -86,7 +91,7 @@
     set to dictionary   ${kwargs}       headers     ${headers}
     Log Request    method=Put    base_uri=${base_uri}    args=&{kwargs}
     Initialize OpenBMC    ${timeout}
-    ${ret}=    Put Request    openbmc    ${base_uri}    &{kwargs}  timeout=${timeout}
+    ${ret}=  Put Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
     Log Response    ${ret}
     [Return]    ${ret}
 
@@ -95,28 +100,29 @@
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
     Log Request    method=Delete    base_uri=${base_uri}    args=&{kwargs}
     Initialize OpenBMC    ${timeout}
-    ${ret}=    Put Request    openbmc    ${base_uri}    &{kwargs}  timeout=${timeout}
+    ${ret}=  Put Request  openbmc  ${base_uri}  &{kwargs}  timeout=${timeout}
     Log Response    ${ret}
     [Return]    ${ret}
 
 Initialize OpenBMC
     [Arguments]    ${timeout}=10
-    Create Session    openbmc    ${AUTH_URI}  timeout=${timeout}   max_retries=3
-    ${headers}=     Create Dictionary   Content-Type=application/json
-    @{credentials} =   Create List     ${OPENBMC_USERNAME}      ${OPENBMC_PASSWORD}
-    ${data} =   create dictionary   data=@{credentials}
-    ${resp} =   Post Request    openbmc    /login    data=${data}   headers=${headers}
+    Create Session  openbmc  ${AUTH_URI}  timeout=${timeout}   max_retries=3
+    ${headers}=  Create Dictionary  Content-Type=application/json
+    @{credentials}=  Create List  ${OPENBMC_USERNAME}  ${OPENBMC_PASSWORD}
+    ${data}=  create dictionary   data=@{credentials}
+    ${resp}=  Post Request  openbmc  /login  data=${data}  headers=${headers}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
 
 Log Request
     [Arguments]    &{kwargs}
-    ${msg}=    Catenate    SEPARATOR=    URI:    ${AUTH_URI}    ${kwargs["base_uri"]}    , method:
-    ...    ${kwargs["method"]}    , args:    ${kwargs["args"]}
+    ${msg}=  Catenate  SEPARATOR=  URI:  ${AUTH_URI}  ${kwargs["base_uri"]}
+    ...  , method:  ${kwargs["method"]}  , args:  ${kwargs["args"]}
     Logging    ${msg}    console=True
 
 Log Response
     [Arguments]    ${resp}
-    ${msg}=    Catenate    SEPARATOR=    Response code:    ${resp.status_code}    , Content:    ${resp.content}
+    ${msg}=  Catenate  SEPARATOR=  Response code:  ${resp.status_code}
+    ...  , Content:  ${resp.content}
     Logging    ${msg}    console=True
 
 Logging
@@ -124,27 +130,31 @@
     Log    ${msg}    console=True
 
 Read Attribute
-    [arguments]    ${uri}    ${attr}    ${timeout}=10
-    ${resp} =   OpenBMC Get Request    ${uri}/attr/${attr}    timeout=${timeout}
+    [arguments]    ${uri}    ${attr}    ${timeout}=10  ${quiet}=${QUIET}
+    ${resp}=  OpenBMC Get Request  ${uri}/attr/${attr}  timeout=${timeout}
+    ...  quiet=${quiet}
     ${content}=     To Json    ${resp.content}
     [return]    ${content["data"]}
 
 Write Attribute
     [Arguments]    ${uri}      ${attr}    ${timeout}=10    &{kwargs}
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
-    ${resp} =       openbmc put request    ${base_uri}/attr/${attr}    timeout=${timeout}    &{kwargs}
+    ${resp}=  openbmc put request  ${base_uri}/attr/${attr}
+    ...  timeout=${timeout}  &{kwargs}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
-    ${json} =   to json         ${resp.content}
+    ${json}=   to json         ${resp.content}
 
 Read Properties
     [arguments]    ${uri}    ${timeout}=10
-    ${resp} =   OpenBMC Get Request    ${uri}    timeout=${timeout}
+    ${resp}=   OpenBMC Get Request    ${uri}    timeout=${timeout}
     Should Be Equal As Strings    ${resp.status_code}    ${HTTP_OK}
     ${content}=     To Json    ${resp.content}
     [return]    ${content["data"]}
 
 Call Method
-    [arguments]    ${uri}    ${method}    ${timeout}=10    &{kwargs}
+    [arguments]  ${uri}  ${method}  ${timeout}=10  ${quiet}=${QUIET}  &{kwargs}
+
     ${base_uri}=    Catenate    SEPARATOR=    ${DBUS_PREFIX}    ${uri}
-    ${resp} =       openbmc post request    ${base_uri}/action/${method}    timeout=${timeout}    &{kwargs}
+    ${resp}=  OpenBmc Post Request  ${base_uri}/action/${method}
+    ...  timeout=${timeout}  quiet=${quiet}  &{kwargs}
     [return]     ${resp}
diff --git a/lib/utils.robot b/lib/utils.robot
index 5590e9b..82fcdbd 100644
--- a/lib/utils.robot
+++ b/lib/utils.robot
@@ -5,12 +5,19 @@
 Library                 DateTime
 Library                 Process
 Library                 OperatingSystem
+Library                 gen_print.py
+Library                 gen_robot_print.py
 
 *** Variables ***
 ${SYSTEM_SHUTDOWN_TIME}       ${5}
-${dbuscmdBase} =    dbus-send --system --print-reply --dest=org.openbmc.settings.Host
-${dbuscmdGet} =   /org/openbmc/settings/host0  org.freedesktop.DBus.Properties.Get
-${dbuscmdString} =   string:"org.openbmc.settings.Host" string:
+${dbuscmdBase}
+...  dbus-send --system --print-reply --dest=org.openbmc.settings.Host
+${dbuscmdGet}
+...  /org/openbmc/settings/host0  org.freedesktop.DBus.Properties.Get
+${dbuscmdString}=   string:"org.openbmc.settings.Host" string:
+
+# Assign default value to QUIET for programs which may not define it.
+${QUIET}  ${0}
 
 *** Keywords ***
 Wait For Host To Ping
@@ -26,12 +33,15 @@
 Ping Host
     [Arguments]     ${host}
     Should Not Be Empty    ${host}   msg=No host provided
-    ${RC}   ${output} =     Run and return RC and Output    ping -c 4 ${host}
+    ${RC}   ${output}=     Run and return RC and Output    ping -c 4 ${host}
     Log     RC: ${RC}\nOutput:\n${output}
     Should be equal     ${RC}   ${0}
 
 Get Boot Progress
-    ${state} =     Read Attribute    /org/openbmc/sensors/host/BootProgress    value
+    [Arguments]  ${quiet}=${QUIET}
+
+    ${state}=  Read Attribute  /org/openbmc/sensors/host/BootProgress
+    ...  value  quiet=${quiet}
     [return]  ${state}
 
 Is Power On
@@ -45,26 +55,33 @@
 Initiate Power On
     [Documentation]  Initiates the power on and waits until the Is Power On
     ...  keyword returns that the power state has switched to on.
+    [Arguments]  ${wait}=${1}
+
     @{arglist}=   Create List
     ${args}=     Create Dictionary    data=@{arglist}
-    ${resp}=   Call Method    /org/openbmc/control/chassis0/    powerOn    data=${args}
+    ${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
 
+    # Does caller want to wait for power on status?
+    Run Keyword If  '${wait}' == '${0}'  Return From Keyword
+    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
     ...  keyword returns that the power state has switched to off.
     @{arglist}=   Create List
     ${args}=     Create Dictionary    data=@{arglist}
-    ${resp}=   Call Method    /org/openbmc/control/chassis0/    powerOff   data=${args}
+    ${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"
-    ${data} =   create dictionary   data=@{EMPTY}
-    ${resp} =   openbmc post request    /org/openbmc/control/bmc0/action/warmReset     data=${data}
+    ${data}=   create dictionary   data=@{EMPTY}
+    ${resp}=  openbmc post request  /org/openbmc/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}'
@@ -78,35 +95,55 @@
     ...              OS is up by running an SSH command.
 
     [Arguments]  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
-    ...          ${os_password}=${OS_PASSWORD}
+    ...          ${os_password}=${OS_PASSWORD}  ${quiet}=${QUIET}
+    ...          ${print_string}=${EMPTY}
     [Teardown]  Close Connection
 
     # os_host           The DNS name/IP of the OS host associated with our BMC.
     # os_username       The username to be used to sign on to the OS host.
     # os_password       The password to be used to sign on to the OS host.
+    # quiet             Indicates whether this keyword should write to console.
+    # print_string      A string to be printed before checking the OS.
+
+    rprint  ${print_string}
 
     # Attempt to ping the OS. Store the return code to check later.
     ${ping_rc}=  Run Keyword and Return Status  Ping Host  ${os_host}
 
     Open connection  ${os_host}
-    Login  ${os_username}  ${os_password}
 
+    ${status}  ${msg}=  Run Keyword And Ignore Error  Login  ${os_username}
+    ...  ${os_password}
+    ${err_msg1}=  Sprint Error  ${msg}
+    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
+    Run Keyword If  '${status}' == 'FAIL'  Fail  msg=${err_msg}
     ${output}  ${stderr}  ${rc}=  Execute Command  uptime  return_stderr=True
     ...        return_rc=True
 
-    # If the return code returned by "Execute Command" is non-zero, this keyword
-    # will fail.
-    Should Be Equal  ${rc}      ${0}
+    ${temp_msg}=  Catenate  Could not execute a command on the operating
+    ...  system.\n
+    ${err_msg1}=  Sprint Error  ${temp_msg}
+    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
+
+    # If the return code returned by "Execute Command" is non-zero, this
+    # keyword will fail.
+    Should Be Equal  ${rc}  ${0}  msg=${err_msg}
     # We will likewise fail if there is any stderr data.
     Should Be Empty  ${stderr}
 
-    # We will likewise fail if the OS did not ping, as we could SSH but not ping
-    Should Be Equal As Strings  ${ping_rc}  ${TRUE}
+    ${temp_msg}=  Set Variable  Could not ping the operating system.\n
+    ${err_msg1}=  Sprint Error  ${temp_msg}
+    ${err_msg}=  Catenate  SEPARATOR=  \n  ${err_msg1}
+    # We will likewise fail if the OS did not ping, as we could SSH but not
+    # ping
+    Should Be Equal As Strings  ${ping_rc}  ${TRUE}  msg=${err_msg}
 
 Wait for OS
     [Documentation]  Waits for the host OS to come up via calls to "Check OS".
     [Arguments]  ${os_host}=${OS_HOST}  ${os_username}=${OS_USERNAME}
     ...          ${os_password}=${OS_PASSWORD}  ${timeout}=${OS_WAIT_TIMEOUT}
+    ...          ${quiet}=${0}
+    [Teardown]  rprintn
 
     # os_host           The DNS name or IP of the OS host associated with our
     #                   BMC.
@@ -114,29 +151,44 @@
     # os_password       The password to be used to sign on to the OS host.
     # timeout           The timeout in seconds indicating how long you're
     #                   willing to wait for the OS to respond.
+    # quiet             Indicates whether this keyword should write to console.
 
     # The interval to be used between calls to "Check OS".
     ${interval}=  Set Variable  5
 
+    ${message}=  Catenate  Checking every ${interval} seconds for up to
+    ...  ${timeout} seconds for the operating system to communicate.
+    rqprint_timen  ${message}
+
     Wait Until Keyword Succeeds  ${timeout} sec  ${interval}  Check OS
     ...                          ${os_host}  ${os_username}  ${os_password}
+    ...                          print_string=\#
+
+    rqprintn
+
+    rqprint_timen  The operating system is now communicating.
 
 Get BMC State
     [Documentation]  Returns the state of the BMC as a string. (i.e: BMC_READY)
+    [Arguments]  ${quiet}=${QUIET}
+
     @{arglist}=  Create List
     ${args}=  Create Dictionary  data=@{arglist}
     ${resp}=  Call Method  /org/openbmc/managers/System/  getSystemState
-    ...        data=${args}
+    ...        data=${args}  quiet=${quiet}
     Should be equal as strings  ${resp.status_code}  ${HTTP_OK}
     ${content}=  to json  ${resp.content}
     [return]  ${content["data"]}
 
 Get Power State
     [Documentation]  Returns the power state as an integer. Either 0 or 1.
+    [Arguments]  ${quiet}=${QUIET}
+
     @{arglist}=  Create List
     ${args}=  Create Dictionary  data=@{arglist}
+
     ${resp}=  Call Method  /org/openbmc/control/chassis0/  getPowerState
-    ...        data=${args}
+    ...        data=${args}  quiet=${quiet}
     Should be equal as strings  ${resp.status_code}  ${HTTP_OK}
     ${content}=  to json  ${resp.content}
     [return]  ${content["data"]}
@@ -146,7 +198,7 @@
     ...              equivalent to ipmitool sel clear.
     @{arglist}=   Create List
     ${args}=     Create Dictionary    data=@{arglist}
-    ${resp}=   Call Method    /org/openbmc/records/events/    clear  data=${args}
+    ${resp}=  Call Method  /org/openbmc/records/events/  clear  data=${args}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
 
 Copy PNOR to BMC
@@ -160,7 +212,8 @@
     [arguments]    ${pnor_image}
     @{arglist}=   Create List    ${pnor_image}
     ${args}=     Create Dictionary    data=@{arglist}
-    ${resp}=   Call Method    /org/openbmc/control/flash/bios/    update  data=${args}
+    ${resp}=  Call Method  /org/openbmc/control/flash/bios/  update
+    ...  data=${args}
     should be equal as strings      ${resp.status_code}     ${HTTP_OK}
     Wait Until Keyword Succeeds    2 min   10 sec    Is PNOR Flashing
 
@@ -188,12 +241,12 @@
     should be equal as strings     ${state}     HOST_BOOTED
 
 Verify Ping and REST Authentication
-    ${l_ping} =   Run Keyword And Return Status
+    ${l_ping}=   Run Keyword And Return Status
     ...    Ping Host  ${OPENBMC_HOST}
     Run Keyword If  '${l_ping}' == '${False}'
     ...    Fail   msg=Ping Failed
 
-    ${l_rest} =   Run Keyword And Return Status
+    ${l_rest}=   Run Keyword And Return Status
     ...    Initialize OpenBMC
     Run Keyword If  '${l_rest}' == '${False}'
     ...    Fail   msg=REST Authentication Failed
@@ -203,7 +256,6 @@
     ${system}   ${stderr}=    Execute Command   hostname   return_stderr=True
     Should Be Empty     ${stderr}
 
-
 Check If BMC is Up
     [Documentation]  Wait for Host to be online. Checks every X seconds
     ...              interval for Y minutes and fails if timed out.
@@ -231,8 +283,8 @@
 Initialize DBUS cmd
     [Documentation]  Initialize dbus string with property string to extract
     [arguments]   ${boot_property}
-    ${cmd} =     Catenate  ${dbuscmdBase} ${dbuscmdGet} ${dbuscmdString}
-    ${cmd} =     Catenate  ${cmd}${boot_property}
+    ${cmd}=     Catenate  ${dbuscmdBase} ${dbuscmdGet} ${dbuscmdString}
+    ${cmd}=     Catenate  ${cmd}${boot_property}
     Set Global Variable   ${dbuscmd}     ${cmd}
 
 
@@ -266,7 +318,7 @@
 
     Open Connection And Log In
 
-    ${pid}  ${stderr} =
+    ${pid}  ${stderr}=
     ...  Execute Command
     ...  ls ${file_path}-${LOG_TIME}_* | cut -d'_' -f 2
     ...  return_stderr=True
@@ -356,4 +408,3 @@
     Execute Command    rm ${file_path}-${LOG_TIME}
 
     [Return]    ${journal_log}
-
