diff --git a/data/variables.py b/data/variables.py
index a80bff1..96058b6 100644
--- a/data/variables.py
+++ b/data/variables.py
@@ -61,6 +61,9 @@
 VERSION_PURPOSE_BMC = SOFTWARE_PURPOSE + '.BMC'
 VERSION_PURPOSE_SYSTEM = SOFTWARE_PURPOSE + '.System'
 
+# Image Upload Directory Path
+IMAGE_UPLOAD_DIR_PATH = '/tmp/images/'
+
 # Inventory URI
 HOST_INVENTORY_URI = '/xyz/openbmc_project/inventory/'
 
diff --git a/extended/code_update/bmc_code_update.robot b/extended/code_update/bmc_code_update.robot
new file mode 100644
index 0000000..1fd6479
--- /dev/null
+++ b/extended/code_update/bmc_code_update.robot
@@ -0,0 +1,36 @@
+*** Settings ***
+Documentation     Update the BMC code on a target BMC.
+...               Execution Method:
+...               python -m robot -v OPENBMC_HOST:<hostname>
+...               -v IMAGE_FILE_PATH:<path/*.tar>  bmc_code_update.robot
+
+Library           ../../lib/code_update_utils.py
+Variables         ../../data/variables.py
+Resource          ../../lib/boot_utils.robot
+Resource          code_update_utils.robot
+Resource          ../../lib/code_update_utils.robot
+Resource          ../lib/openbmc_ffdc.robot
+
+Test Teardown     FFDC On Test Case Fail
+
+*** Variables ***
+
+${QUIET}                          ${1}
+${IMAGE_FILE_PATH}                ${EMPTY}
+
+*** Test Cases ***
+
+REST BMC Code Update
+    [Documentation]  Do a BMC code update by uploading image on BMC via REST.
+    [Tags]  REST_BMC_Code_Update
+
+    Upload And Activate Image  ${IMAGE_FILE_PATH}
+    OBMC Reboot (off)
+
+
+Delete BMC Image
+    [Documentation]  Delete a BMC image from the BMC flash chip.
+    [Tags]  Delete_BMC_Image
+
+    ${software_object}=  Get Non Running BMC Software Object
+    Delete Image And Verify  ${software_object}  ${VERSION_PURPOSE_BMC}
diff --git a/extended/code_update/code_update.robot b/extended/code_update/code_update.robot
deleted file mode 100644
index 6b6f058..0000000
--- a/extended/code_update/code_update.robot
+++ /dev/null
@@ -1,164 +0,0 @@
-*** Settings ***
-Documentation     Code update to a target BMC.
-...               Execution Method:
-...               python -m robot -v OPENBMC_HOST:<hostname>
-...               -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
-...               -v IMAGE_FILE_PATH:<path/*.tar>  code_update.robot
-...
-...               Code update method BMC
-...               Update work flow sequence:
-...                 - Upload image via REST
-...                 - Verify that the file exists on the BMC
-...                 - Check software "Activation" status to be "Ready"
-...                 - Set "Requested Activation" to "Active"
-...                 - Wait for code update to complete
-...                 - Verify the new version
-
-Library           ../../lib/code_update_utils.py
-Variables         ../../data/variables.py
-Resource          ../lib/openbmc_ffdc.robot
-Resource          ../../lib/code_update_utils.robot
-Resource          ../../lib/boot_utils.robot
-Resource          ../../lib/utils.robot
-Resource          code_update_utils.robot
-Resource          ../../lib/state_manager.robot
-
-Test Teardown     FFDC On Test Case Fail
-
-*** Variables ***
-
-${QUIET}                          ${1}
-${upload_dir_path}                /tmp/images/
-${IMAGE_FILE_PATH}                ${EMPTY}
-${DELETE_OLD_PNOR_IMAGES}         false
-
-*** Test Cases ***
-
-REST Host Code Update
-    [Documentation]  Do a PNOR code update by uploading image on BMC via REST.
-    [Tags]  REST_Host_Code_Update
-    [Setup]  Code Update Setup
-
-    Upload And Activate Image  ${IMAGE_FILE_PATH}
-
-    OBMC Reboot (off)
-
-
-Post Update Boot To OS
-    [Documentation]  Boot the host OS
-    [Tags]  Post_Update_Boot_To_OS
-    [Teardown]  Stop SOL Console Logging
-
-    Run Keyword Unless  '${PREV_TEST_STATUS}' == 'PASS'
-    ...  Fail  Code update failed. No need to boot to OS.
-    Start SOL Console Logging
-    REST Power On
-
-
-Host Image Priority Attribute Test
-    [Documentation]  Set "Priority" attribute.
-    [Tags]  Host_Image_Priority_Attribute_Test
-    [Template]  Set PNOR Attribute
-
-    # Property        Value
-    Priority          ${0}
-    Priority          ${1}
-    Priority          ${127}
-
-
-Set RequestedActivation To None
-    [Documentation]  Set the RequestedActivation of the image to None and
-    ...              verify that it is in fact set to None.
-    [Tags]  Set_RequestedActivation_To_None
-
-    ${sw_objs}=  Get Software Objects
-    Set Host Software Property  @{sw_objs}[0]  RequestedActivation
-    ...  ${REQUESTED_NONE}
-    ${sw_props}=  Get Host Software Property  @{sw_objs}[0]
-    Should Be Equal As Strings  &{sw_props}[RequestedActivation]
-    ...  ${REQUESTED_NONE}
-
-
-Set RequestedActivation To Invalid Value
-    [Documentation]  Set the RequestedActivation proprety of the image to an
-    ...              invalid value and verify that it was not changed.
-    [Template]  Set Property To Invalid Value And Verify No Change
-    [Tags]  Set_RequestedActivation_To_Invalid_Value
-
-    # Property
-    RequestedActivation
-
-
-Set Activation To Invalid Value
-    [Documentation]  Set the Activation proprety of the image to an invalid
-    ...              value and verify that it was not changed.
-    [Template]  Set Property To Invalid Value And Verify No Change
-    [Tags]  Set_Activation_To_Invalid_Value
-
-    # Property
-    Activation
-
-
-Delete Host Image
-    [Documentation]  Delete a PNOR image from the BMC and PNOR flash chip.
-    [Tags]  Delete_Host_Image
-    [Setup]  Initiate Host PowerOff
-
-    ${software_objects}=  Get Software Objects
-    ...  version_type=${VERSION_PURPOSE_HOST}
-    ${num_images}=  Get Length  ${software_objects}
-    Should Be True  0 < ${num_images}
-    ...  msg=There are no PNOR images on the BMC to delete.
-    Delete Image And Verify  @{software_objects}[0]  ${VERSION_PURPOSE_HOST}
-
-
-Delete BMC Image
-    [Documentation]  Delete a BMC image from the BMC flash chip.
-    [Tags]  Delete_BMC_Image
-
-    ${software_object}=  Get Non Running BMC Software Object
-    Delete Image And Verify  ${software_object}  ${VERSION_PURPOSE_BMC}
-
-
-*** Keywords ***
-
-Set PNOR Attribute
-    [Documentation]  Update the attribute value.
-    [Arguments]  ${attribute_name}  ${value}
-
-    # Description of argument(s):
-    # attribute_name   Host software attribute name (e.g. "Priority").
-    # value            Value to be written.
-
-    ${image_ids}=  Get Software Objects
-    ${resp}=  Get Host Software Property  ${image_ids[0]}
-    ${initial_value}=  Set Variable  ${resp["Priority"]}
-
-    Set Host Software Property  ${image_ids[0]}  ${attribute_name}  ${value}
-
-    ${resp}=  Get Host Software Property  ${image_ids[0]}
-    Should Be Equal As Integers  ${resp["Priority"]}  ${value}
-
-    # Revert to to initial value.
-    Set Host Software Property
-    ...  ${image_ids[0]}  ${attribute_name}  ${initial_value}
-
-
-Code Update Setup
-    [Documentation]  Do code update test case setup.
-
-    Run Keyword If  'true' == '${DELETE_OLD_PNOR_IMAGES}'
-    ...  Delete All PNOR Images
-
-
-Get PNOR Extended Version
-    [Documentation]  Return the PNOR extended version.
-    [Arguments]  ${path}
-
-    # Description of argument(s):
-    # path  Path of the MANIFEST file.
-
-    Open Connection And Log In
-    ${version}= Execute Command On BMC
-    ...  "grep \"extended_version=\" " + ${path}
-    [return] ${version.split(",")}
diff --git a/extended/code_update/host_code_update.robot b/extended/code_update/host_code_update.robot
new file mode 100644
index 0000000..eec0ddc
--- /dev/null
+++ b/extended/code_update/host_code_update.robot
@@ -0,0 +1,148 @@
+*** Settings ***
+Documentation     Update the PNOR code on a target BMC.
+...               Execution Method:
+...               python -m robot -v OPENBMC_HOST:<hostname>
+...               -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
+...               -v IMAGE_FILE_PATH:<path/*.tar>  host_code_update.robot
+...
+...               Code update method BMC
+...               Update work flow sequence:
+...                 - Upload image via REST
+...                 - Verify that the file exists on the BMC
+...                 - Check that software "Activation" is set to "Ready"
+...                 - Set "Requested Activation" to "Active"
+...                 - Wait for code update to complete
+...                 - Verify the new version
+
+Library           ../../lib/bmc_ssh_utils.py
+Library           ../../lib/code_update_utils.py
+Variables         ../../data/variables.py
+Resource          ../../lib/boot_utils.robot
+Resource          code_update_utils.robot
+Resource          ../../lib/code_update_utils.robot
+Resource          ../lib/openbmc_ffdc.robot
+Resource          ../../lib/state_manager.robot
+
+Test Teardown     FFDC On Test Case Fail
+
+*** Variables ***
+
+${QUIET}                          ${1}
+${IMAGE_FILE_PATH}                ${EMPTY}
+${DELETE_OLD_PNOR_IMAGES}         false
+
+*** Test Cases ***
+
+REST Host Code Update
+    [Documentation]  Do a PNOR code update by uploading image on BMC via REST.
+    [Tags]  REST_Host_Code_Update
+    [Setup]  Code Update Setup
+
+    Upload And Activate Image  ${IMAGE_FILE_PATH}
+    OBMC Reboot (off)
+
+
+Post Update Boot To OS
+    [Documentation]  Boot the host OS
+    [Tags]  Post_Update_Boot_To_OS
+    [Teardown]  Stop SOL Console Logging
+
+    Run Keyword If  '${PREV_TEST_STATUS}' == 'FAIL'
+    ...  Fail  Code update failed. No need to boot to OS.
+    Start SOL Console Logging
+    REST Power On
+
+
+Host Image Priority Attribute Test
+    [Documentation]  Set "Priority" attribute.
+    [Tags]  Host_Image_Priority_Attribute_Test
+    [Template]  Temporarily Set PNOR Attribute
+
+    # Property        Value
+    Priority          ${0}
+    Priority          ${1}
+    Priority          ${127}
+
+
+Set RequestedActivation To None
+    [Documentation]  Set the RequestedActivation of the image to None and
+    ...              verify that it is in fact set to None.
+    [Tags]  Set_RequestedActivation_To_None
+
+    ${software_objects}=  Get Software Objects
+    Set Host Software Property  @{software_objects}[0]  RequestedActivation
+    ...  ${REQUESTED_NONE}
+    ${software_properties}=  Get Host Software Property  @{software_objects}[0]
+    Should Be Equal As Strings  &{software_properties}[RequestedActivation]
+    ...  ${REQUESTED_NONE}
+
+
+Set RequestedActivation And Activation To Invalid Value
+    [Documentation]  Set the RequestedActivation and Activation propreties of
+    ...              the image to an invalid value and verify that it was not
+    ...              changed.
+    [Template]  Set Property To Invalid Value And Verify No Change
+    [Tags]  Set_RequestedActivation_And_Activation_To_Invalid_Value
+
+    # Property              Version Type
+    RequestedActivation     ${VERSION_PURPOSE_HOST}
+    Activation              ${VERSION_PURPOSE_HOST}
+
+
+Delete Host Image
+    [Documentation]  Delete a PNOR image from the BMC and PNOR flash chip.
+    [Tags]  Delete_Host_Image
+    [Setup]  Initiate Host PowerOff
+
+    ${software_objects}=  Get Software Objects
+    ...  version_type=${VERSION_PURPOSE_HOST}
+    ${num_images}=  Get Length  ${software_objects}
+    Should Be True  0 < ${num_images}
+    ...  msg=There are no PNOR images on the BMC to delete.
+    Delete Image And Verify  @{software_objects}[0]  ${VERSION_PURPOSE_HOST}
+
+
+*** Keywords ***
+
+Temporarily Set PNOR Attribute
+    [Documentation]  Update the PNOR attribute value.
+    [Arguments]  ${attribute_name}  ${attribute_value}
+
+    # Description of argument(s):
+    # attribute_name    Host software attribute name (e.g. "Priority").
+    # attribute_value   Value to be written.
+
+    ${image_ids}=  Get Software Objects
+    ${init_host_properties}=  Get Host Software Property  ${image_ids[0]}
+    ${initial_priority}=  Set Variable  ${init_host_properties["Priority"]}
+
+    Set Host Software Property  ${image_ids[0]}  ${attribute_name}
+    ...  ${attribute_value}
+
+    ${cur_host_properties}=  Get Host Software Property  ${image_ids[0]}
+    Should Be Equal As Integers  ${cur_host_properties["Priority"]}
+    ...  ${attribute_value}
+
+    # Revert to to initial value.
+    Set Host Software Property
+    ...  ${image_ids[0]}  ${attribute_name}  ${initial_priority}
+
+
+Code Update Setup
+    [Documentation]  Do code update test case setup.
+
+    Run Keyword If  'true' == '${DELETE_OLD_PNOR_IMAGES}'
+    ...  Delete All PNOR Images
+
+
+Get PNOR Extended Version
+    [Documentation]  Return the PNOR extended version.
+    [Arguments]  ${manifest_path}
+
+    # Description of argument(s):
+    # manifest_path  Path of the MANIFEST file
+    #                (e.g. "/tmp/images/abc123/MANIFEST").
+
+    ${version}= BMC Execute Command
+    ...  grep extended_version= ${manifest_path}
+    [return] ${version.split(",")}
diff --git a/extended/test_uploadimage.robot b/extended/test_uploadimage.robot
index ade0b0b..17a83f0 100644
--- a/extended/test_uploadimage.robot
+++ b/extended/test_uploadimage.robot
@@ -27,7 +27,6 @@
 
 *** Variables ***
 ${timeout}            10
-${upload_dir_path}    /tmp/images/
 ${QUIET}              ${1}
 
 *** Test Cases ***
diff --git a/lib/code_update_utils.py b/lib/code_update_utils.py
index c33d360..5026878 100644
--- a/lib/code_update_utils.py
+++ b/lib/code_update_utils.py
@@ -37,7 +37,8 @@
     for image_name in images:
         _, image_properties = keyword.run_key(
                 "Get Host Software Property  " + image_name)
-        if image_properties['Version'] != cur_img_version:
+        if image_properties['Purpose'] != var.VERSION_PURPOSE_HOST \
+                and image_properties['Version'] != cur_img_version:
             return image_name
     BuiltIn().fail("Did not find any non-running BMC images.")
 
@@ -193,11 +194,10 @@
                      of the images in the upload dir.
     """
 
-    upload_dir = BuiltIn().get_variable_value("${upload_dir_path}")
     keyword.run_key_u("Open Connection And Log In")
     status, image_list =\
-            keyword.run_key("Execute Command On BMC  ls -d " + upload_dir
-            + "*/")
+            keyword.run_key("Execute Command On BMC  ls -d "
+                            + var.IMAGE_UPLOAD_DIR_PATH + "*/")
 
     image_list = image_list.split("\n")
     retry = 0
@@ -213,7 +213,8 @@
 
 
 ###############################################################################
-def verify_image_upload(image_version, timeout=3):
+def verify_image_upload(image_version,
+                        timeout=3):
 
     r"""
     Verify the image was uploaded correctly and that it created
@@ -221,9 +222,10 @@
     fails, try again until we reach the timeout.
 
     Description of argument(s):
-    image_version  The version from the image's manifest file.
-    timeout  How long, in minutes, to keep trying to find the
-             image on the BMC. Default is 3 minutes.
+    image_version  The version from the image's manifest file
+                   (e.g. "IBM-witherspoon-redbud-ibm-OP9_v1.17_1.68").
+    timeout        How long, in minutes, to keep trying to find the
+                   image on the BMC. Default is 3 minutes.
     """
 
     image_path = get_image_path(image_version)
@@ -271,10 +273,9 @@
     """
 
     keyword.run_key('Open Connection And Log In')
-    upload_dir_path = BuiltIn().get_variable_value("${upload_dir_path}")
     for i in range(timeout * 2):
         stat, grep_res = keyword.run_key('Execute Command On BMC  '
-                + 'ls ' + upload_dir_path + '*/MANIFEST 2>/dev/null '
+                + 'ls ' + var.IMAGE_UPLOAD_DIR_PATH + '*/MANIFEST 2>/dev/null '
                 + '| xargs grep -rl "version=' + image_version + '"')
         image_dir = os.path.dirname(grep_res.split('\n')[0])
         if '' != image_dir:
diff --git a/lib/code_update_utils.robot b/lib/code_update_utils.robot
index d336888..a73a6a9 100644
--- a/lib/code_update_utils.robot
+++ b/lib/code_update_utils.robot
@@ -66,22 +66,26 @@
 Set Property To Invalid Value And Verify No Change
     [Documentation]  Attempt to set a property and check that the value didn't
     ...              change.
-    [Arguments]  ${property}
+    [Arguments]  ${property}  ${version_type}
 
     # Description of argument(s):
-    # property  The property to attempt to set.
+    # property      The property to attempt to set.
+    # version_type  Either BMC or host version purpose.
+    #               By default host version purpose string.
+    #  (e.g. "xyz.openbmc_project.Software.Version.VersionPurpose.BMC"
+    #        "xyz.openbmc_project.Software.Version.VersionPurpose.Host").
 
-    ${sw_objs}=  Get Software Objects
-    ${prev_props}=  Get Host Software Property  @{sw_objs}[0]
+    ${software_objects}=  Get Software Objects  version_type=${version_type}
+    ${prev_properties}=  Get Host Software Property  @{software_objects}[0]
     Run Keyword And Expect Error  500 != 200
-    ...  Set Host Software Property  @{sw_objs}[0]  ${property}  foo
-    ${cur_props}=  Get Host Software Property  @{sw_objs}[0]
-    Should Be Equal As Strings  &{prev_props}[${property}]
-    ...  &{cur_props}[${property}]
+    ...  Set Host Software Property  @{software_objects}[0]  ${property}  foo
+    ${cur_properties}=  Get Host Software Property  @{software_objects}[0]
+    Should Be Equal As Strings  &{prev_properties}[${property}]
+    ...  &{cur_properties}[${property}]
 
 
 Upload And Activate Image
-    [Documentation]  Uploads an image to the BMC and activates it with REST.
+    [Documentation]  Upload an image to the BMC and activate it with REST.
     [Arguments]  ${image_file_path}
 
     # Description of argument(s):
@@ -138,6 +142,8 @@
     #               xyz.openbmc_project.Software.Version.VersionPurpose.Host
     #               or xyz.openbmc_project.Software.Version.VersionPurpose.BMC.
 
+    Log To Console  Deleteing ${software_object}
+
     # Delete the image.
     Delete Software Object  ${software_object}
     # TODO: If/when we don't have to delete twice anymore, take this out
