diff --git a/lib/obmc_boot_test.py b/lib/obmc_boot_test.py
new file mode 100755
index 0000000..e8f44fe
--- /dev/null
+++ b/lib/obmc_boot_test.py
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+
+r"""
+This module is the python counterpart to obmc_boot_test.
+"""
+
+from tally_sheet import *
+import gen_robot_print as grp
+
+import os
+import time
+import subprocess
+
+from robot.utils import DotDict
+from robot.libraries.BuiltIn import BuiltIn
+from robot.libraries.OperatingSystem import OperatingSystem
+
+# Create boot_results_fields for use in creating boot_results.
+boot_results_fields = DotDict([('total', 0), ('pass', 0), ('fail', 0)])
+# Create boot_results which is global to this module.
+boot_results = tally_sheet('boot type',
+                           boot_results_fields,
+                           'boot_test_results')
+
+boot_results.set_sum_fields(['total', 'pass', 'fail'])
+boot_results.set_calc_fields(['total=pass+fail'])
+
+
+###############################################################################
+def add_trailing_slash(path):
+
+    r"""
+    Add a trailing slash to path if it doesn't already have one and return it.
+
+    """
+
+    return os.path.normpath(path) + os.path.sep
+
+###############################################################################
+
+
+###############################################################################
+def plug_in_setup():
+
+    r"""
+    Initialize all plug-in environment variables for use by the plug-in
+    programs.
+    """
+
+    boot_pass = int(BuiltIn().get_variable_value("${boot_pass}"))
+    if boot_pass > 1:
+        test_really_running = 1
+    else:
+        test_really_running = 0
+
+    BuiltIn().set_global_variable("${test_really_running}",
+                                  test_really_running)
+
+    next_boot = BuiltIn().get_variable_value("${next_boot}")
+    BuiltIn().set_global_variable("${boot_type_desc}", next_boot)
+
+    # Setting master_pid correctly influences the behavior of plug-ins like
+    # DB_Logging
+    program_pid = BuiltIn().get_variable_value("${program_pid}")
+    try:
+        master_pid = OperatingSystem().get_environment_variable(
+            "AUTOBOOT_MASTER_PID")
+    except RuntimeError:
+        master_pid = program_pid
+    if master_pid == "":
+        master_pid = program_pid
+
+    BuiltIn().set_global_variable("${master_pid}", master_pid)
+
+    seconds = time.time()
+    loc_time = time.localtime(seconds)
+    time_string = time.strftime("%y%m%d.%H%M%S.", loc_time)
+
+    openbmc_nickname = BuiltIn().get_variable_value("${openbmc_nickname}")
+    if openbmc_nickname == "":
+        openbmc_host = BuiltIn().get_variable_value("${openbmc_host}")
+        ffdc_prefix = openbmc_host
+    else:
+        ffdc_prefix = openbmc_nickname
+
+    ffdc_prefix += "." + time_string
+
+    ffdc_dir_path = OperatingSystem().get_environment_variable(
+        "FFDC_DIR_PATH")
+    # Add trailing slash.
+    ffdc_dir_path = os.path.normpath(ffdc_dir_path) + os.sep
+    BuiltIn().set_global_variable("${FFDC_DIR_PATH}", ffdc_dir_path)
+
+    # For each program parameter, set the corresponding AUTOBOOT_ environment
+    # variable value.  Also, set an AUTOBOOT_ environment variable for every
+    # element in additional_values.
+    additional_values = ["boot_type_desc", "boot_success", "boot_pass",
+                         "boot_fail", "test_really_running", "program_pid",
+                         "master_pid", "ffdc_prefix", "ffdc_dir_path"]
+    BuiltIn().set_global_variable("${ffdc_prefix}", ffdc_prefix)
+
+    parm_list = BuiltIn().get_variable_value("@{parm_list}")
+
+    plug_in_vars = parm_list + additional_values
+
+    for var_name in plug_in_vars:
+        var_value = BuiltIn().get_variable_value("${" + var_name + "}")
+        var_name = var_name.upper()
+        if var_value is None:
+            var_value = ""
+        OperatingSystem().set_environment_variable(
+            "AUTOBOOT_" + var_name, var_value)
+
+    debug = int(BuiltIn().get_variable_value("${debug}"))
+    if debug:
+        cmd_buf = "printenv | egrep AUTOBOOT_ | sort -u"
+        grp.rpissuing(cmd_buf)
+        sub_proc = subprocess.Popen(cmd_buf, shell=True,
+                                    stdout=subprocess.PIPE,
+                                    stderr=subprocess.STDOUT)
+        out_buf, err_buf = sub_proc.communicate()
+        shell_rc = sub_proc.returncode
+        grp.rprint(out_buf)
+
+###############################################################################
+
+
+###############################################################################
+def create_boot_results_table():
+
+    r"""
+    Create our boot_results_table.
+    """
+
+    # At some point we'll want to change to reading in our boot types from
+    # some external source (e.g. file).
+
+    boot_results.add_row('BMC Power On')
+    boot_results.add_row('BMC Power Off')
+
+###############################################################################
+
+
+###############################################################################
+def update_boot_results_table(boot_type,
+                              boot_status):
+
+    r"""
+    Update our boot_results_table.  This includes:
+    - Updating the record for the given boot_type by incrementing the pass or
+      fail field.
+    - Calling the calc method to have the totals, etc. calculated.
+    - Updating global variables boot_pass/boot_fail.
+
+    Description of arguments:
+    boot_type    The type of boot just done (e.g. "BMC Power On").
+    boot_status  The status of the boot just done.  This should be equal to
+                 either "pass" or "fail" (case-insensitive).
+    """
+
+    boot_results.inc_row_field(boot_type, boot_status.lower())
+    totals_line = boot_results.calc()
+
+    # The caller of obmc_boot_test can pass boot_pass/boot_fail values because
+    # the caller may have already done some testing (e.g. "BMC OOB").  For the
+    # sake of DB logging done by plug-ins, we want to include these in our
+    # overall totals.
+    initial_boot_pass = int(BuiltIn().get_variable_value(
+        "${initial_boot_pass}"))
+    initial_boot_fail = int(BuiltIn().get_variable_value(
+        "${initial_boot_fail}"))
+
+    BuiltIn().set_global_variable("${boot_pass}",
+                                  totals_line['pass'] + initial_boot_pass)
+    BuiltIn().set_global_variable("${boot_fail}",
+                                  totals_line['fail'] + initial_boot_fail)
+
+###############################################################################
+
+
+###############################################################################
+def print_boot_results_table(header_footer="\n"):
+
+    r"""
+    Print the formatted boot_resuls_table to the console.
+    """
+
+    grp.rprint(header_footer)
+    grp.rprint(boot_results.sprint_report())
+    grp.rprint(header_footer)
+
+###############################################################################
