diff --git a/openpower/package/hostboot/hostboot-0008-Sel-instead-of-eSel.patch b/openpower/package/hostboot/hostboot-0008-Sel-instead-of-eSel.patch
deleted file mode 100644
index 61f3548..0000000
--- a/openpower/package/hostboot/hostboot-0008-Sel-instead-of-eSel.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-From d38ee0ae88993dee7b2d703340cf374d107ddfba Mon Sep 17 00:00:00 2001
-From: Brian Horton <brianh@linux.ibm.com>
-Date: Mon, 2 Mar 2015 12:12:28 -0600
-Subject: [PATCH] send down SEL instead of eSEL for hostboot errorlogs
-
-Change-Id: I86ee9766e27548c3f7f72fbdbfd76c8a8be7da73
-RTC: 124971
----
- src/include/usr/ipmi/ipmisel.H |  2 ++
- src/usr/ipmi/ipmisel.C         | 49 +++++++++++++++++++++++++++++++++++-------
- 2 files changed, 43 insertions(+), 8 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmisel.H b/src/include/usr/ipmi/ipmisel.H
-index de2dd32..938cfdb 100644
---- a/src/include/usr/ipmi/ipmisel.H
-+++ b/src/include/usr/ipmi/ipmisel.H
-@@ -85,6 +85,7 @@ namespace IPMISEL
-         format_ipmi_version_2_0 = 0x04,
-     };
- 
-+    // event_type, per section 42.1 of the IPMI spec
-     enum sel_event_dir_type
-     {
-         event_unspecified       = 0x00,
-@@ -93,6 +94,7 @@ namespace IPMISEL
-         event_predictive        = 0x04,
-         event_limit             = 0x05,
-         event_permformance      = 0x06,
-+        event_OEM               = 0x70,
-     };
- 
-     enum sel_event_data
-diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C
-index c05c60f..4eec588 100644
---- a/src/usr/ipmi/ipmisel.C
-+++ b/src/usr/ipmi/ipmisel.C
-@@ -100,7 +100,12 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
- 
-     // create the sel record of information
-     selRecord l_sel;
-+#if 1
-+// TODO RTC: 124972 take this out and do the eSEL instead
-+    l_sel.record_type = record_type_system_event;
-+#else
-     l_sel.record_type = record_type_ami_esel;
-+#endif
-     l_sel.generator_id = generator_id_ami;
-     l_sel.evm_format_version = format_ipmi_version_2_0;
-     l_sel.sensor_type = i_sensorType;
-@@ -216,13 +221,40 @@ void send_esel(eselInitData * i_data,
- {
-     IPMI_TRAC(ENTER_MRK "send_esel");
-     uint8_t* data = NULL;
--    const size_t l_eSELlen = i_data->dataSize;
- 
-     size_t len = 0;
--    uint8_t reserveID[2] = {0,0};
--    uint8_t esel_recordID[2] = {0,0};
-+    uint8_t sel_recordID[2] = {0,0};
- 
-     do{
-+#if 1
-+// TODO RTC: 124972 take this out and do the eSEL instead
-+// do SEL instead
-+        delete [] data;
-+        len = sizeof(IPMISEL::selRecord);
-+        data = new uint8_t[len];
-+
-+        // copy in the SEL event record data
-+        memcpy(data, i_data->eSel, sizeof(IPMISEL::selRecord));
-+
-+        o_cc = IPMI::CC_UNKBAD;
-+        TRACFBIN( g_trac_ipmi, INFO_MRK"add_sel:", data, len);
-+        o_err = IPMI::sendrecv(IPMI::add_sel(),o_cc,len,data);
-+        if(o_err)
-+        {
-+            IPMI_TRAC(ERR_MRK "error from add_sel");
-+            break;
-+        }
-+        if (o_cc != IPMI::CC_OK)
-+        {
-+            IPMI_TRAC(ERR_MRK "failed add_sel, o_cc %02x", o_cc);
-+            break;
-+        }
-+        sel_recordID[0] = data[0];
-+        sel_recordID[1] = data[1];
-+#else
-+
-+        const size_t l_eSELlen = i_data->dataSize;
-+        uint8_t reserveID[2] = {0,0};
-         // we need to send down the extended sel data (eSEL), which is
-         // longer than the protocol buffer, so we need to do a reservation and
-         // call the AMI partial_add_esel command multiple times
-@@ -253,7 +285,7 @@ void send_esel(eselInitData * i_data,
-         data = new uint8_t[len];
- 
-         // fill in the partial_add_esel request (command) data
--        createPartialAddHeader(reserveID,esel_recordID,eSELindex,l_lastEntry,data);
-+        createPartialAddHeader(reserveID,sel_recordID,eSELindex,l_lastEntry,data);
- 
-         // copy in the SEL event record data
-         memcpy(&data[PARTIAL_ADD_ESEL_REQ], i_data->eSel,
-@@ -280,7 +312,7 @@ void send_esel(eselInitData * i_data,
-         }
-         // BMC returns the recordID, it's always the same (unless
-         // there's a major BMC bug...)
--        storeReserveRecord(esel_recordID,data);
-+        storeReserveRecord(sel_recordID,data);
- 
-         // now send down the eSEL data in chunks.
-         const size_t l_maxBuffer = IPMI::max_buffer();
-@@ -304,7 +336,7 @@ void send_esel(eselInitData * i_data,
-             data = new uint8_t[len];
- 
-             // fill in the partial_add_esel request (command) data
--            createPartialAddHeader(reserveID, esel_recordID,
-+            createPartialAddHeader(reserveID, sel_recordID,
-                     eSELindex + sizeof(selRecord),
-                     l_lastEntry, data);
- 
-@@ -337,8 +369,9 @@ void send_esel(eselInitData * i_data,
-             }
-             // BMC returns the recordID, it's always the same (unless
-             // there's a major BMC bug...)
--            storeReserveRecord(esel_recordID,data);
-+            storeReserveRecord(sel_recordID,data);
-         }
-+#endif
-         if(o_err || (o_cc != IPMI::CC_OK))
-         {
-             break;
-@@ -348,7 +381,7 @@ void send_esel(eselInitData * i_data,
-     delete[] data;
- 
-     IPMI_TRAC(EXIT_MRK "send_esel (o_err %.8X, o_cc x%.2x, recID=x%x%x)",
--        o_err ? o_err->plid() : NULL, o_cc, esel_recordID[1], esel_recordID[0]);
-+        o_err ? o_err->plid() : NULL, o_cc, sel_recordID[1], sel_recordID[0]);
- 
-     return;
- } // send_esel
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch b/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
new file mode 100644
index 0000000..6b4c82d
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
@@ -0,0 +1,201 @@
+From 03029acd024ac886296f8ed0cbc711d9b81b26da Mon Sep 17 00:00:00 2001
+From: Brian Horton <brianh@linux.ibm.com>
+Date: Mon, 2 Mar 2015 12:12:28 -0600
+Subject: [PATCH] change error log to SEL processing
+
+for hostboot runtime, do not send eSEL (AMI bug)
+for hostboot ipl, send down SEL following eSEL
+
+Change-Id: I86ee9766e27548c3f7f72fbdbfd76c8a8be7da73
+RTC: 124971
+---
+ src/include/usr/ipmi/ipmisel.H    | 18 ++++++++++--
+ src/usr/errl/errlmanager_common.C |  4 ++-
+ src/usr/ipmi/ipmisel.C            | 61 ++++++++++++++++++++++++++++++++-------
+ 3 files changed, 70 insertions(+), 13 deletions(-)
+
+diff --git a/src/include/usr/ipmi/ipmisel.H b/src/include/usr/ipmi/ipmisel.H
+index de2dd32..91e3651 100644
+--- a/src/include/usr/ipmi/ipmisel.H
++++ b/src/include/usr/ipmi/ipmisel.H
+@@ -65,11 +65,13 @@ namespace IPMISEL
+      * @param[in] size of eSEL data
+      * @param[in] eid of errorlog for this eSEL (for ack)
+      * @param[in] event_dir_type for this eSEL
++     * @param[in] event_offset for this eSEL
+      * @param[in] sensorType that caused the error/eSEL
+      * @param[in] sensorNumber that caused the error/eSEL
+      */
+     void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
+-                  uint32_t i_eid, uint8_t i_eventDirType,
++                  uint32_t i_eid,
++                  uint8_t i_eventDirType, uint8_t i_eventOffset,
+                   uint8_t i_sensorType, uint8_t i_sensorNumber);
+ 
+     // per IPMI Spec, section 32.1 SEL Event Records
+@@ -85,6 +87,7 @@ namespace IPMISEL
+         format_ipmi_version_2_0 = 0x04,
+     };
+ 
++    // event_type, per section 42.1 of the IPMI spec
+     enum sel_event_dir_type
+     {
+         event_unspecified       = 0x00,
+@@ -93,11 +96,22 @@ namespace IPMISEL
+         event_predictive        = 0x04,
+         event_limit             = 0x05,
+         event_permformance      = 0x06,
++        event_transition        = 0x07,
++        event_OEM               = 0x70,
+     };
+ 
+     enum sel_event_data
+     {
+-        event_data1_ami         = 0xAA,
++        event_data1_ami                         = 0xAA,
++        event_data1_trans_to_ok                 = 0x00,
++        event_data1_trans_to_noncrit_from_ok    = 0x01,
++        event_data1_trans_to_crit_from_less     = 0x02,
++        event_data1_trans_to_non_recv_from_less = 0x03,
++        event_data1_trans_to_non_crit_from_more = 0x04,
++        event_data1_trans_to_crit_from_non_r    = 0x05,
++        event_data1_trans_to_non_recoverable    = 0x06,
++        event_data1_trans_monitor               = 0x07,
++        event_data1_trans_informational         = 0x08,
+     };
+ 
+     enum sel_generator_id
+diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C
+index a64ed3b..6c68818 100644
+--- a/src/usr/errl/errlmanager_common.C
++++ b/src/usr/errl/errlmanager_common.C
+@@ -135,7 +135,9 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
+                 "sendErrLogToBmc: sensor %.2x/%.2x, size %d",
+                 l_sensorType, l_sensorNumber, l_pelSize);
+         IPMISEL::sendESEL(l_pelData, l_pelSize,
+-                            io_err->eid(), IPMISEL::event_unspecified,
++                            io_err->eid(),
++                            IPMISEL::event_transition,
++                            IPMISEL::event_data1_trans_to_non_recoverable,
+                             l_sensorType, l_sensorNumber);
+ 
+         // free the buffer
+diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C
+index c05c60f..49dcee6 100644
+--- a/src/usr/ipmi/ipmisel.C
++++ b/src/usr/ipmi/ipmisel.C
+@@ -82,7 +82,8 @@ enum esel_retry
+ namespace IPMISEL
+ {
+ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
+-              uint32_t i_eid, uint8_t i_eventDirType,
++              uint32_t i_eid,
++              uint8_t i_eventDirType, uint8_t i_eventOffset,
+               uint8_t i_sensorType, uint8_t i_sensorNumber)
+ {
+     IPMI_TRAC(ENTER_MRK "sendESEL()");
+@@ -100,13 +101,13 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
+ 
+     // create the sel record of information
+     selRecord l_sel;
+-    l_sel.record_type = record_type_ami_esel;
++    l_sel.record_type = record_type_system_event;
+     l_sel.generator_id = generator_id_ami;
+     l_sel.evm_format_version = format_ipmi_version_2_0;
+     l_sel.sensor_type = i_sensorType;
+     l_sel.sensor_number = i_sensorNumber;
+     l_sel.event_dir_type = i_eventDirType;
+-    l_sel.event_data1 = event_data1_ami;
++    l_sel.event_data1 = i_eventOffset;
+ 
+     eselInitData *eselData =
+         new eselInitData(&l_sel, i_eselData, i_dataSize);
+@@ -216,13 +217,16 @@ void send_esel(eselInitData * i_data,
+ {
+     IPMI_TRAC(ENTER_MRK "send_esel");
+     uint8_t* data = NULL;
+-    const size_t l_eSELlen = i_data->dataSize;
+ 
+     size_t len = 0;
+-    uint8_t reserveID[2] = {0,0};
+     uint8_t esel_recordID[2] = {0,0};
++    uint8_t sel_recordID[2] = {0,0};
+ 
++#ifndef __HOSTBOOT_RUNTIME
++// TODO RTC: 124972 take this out when runtime supports the eSEL
+     do{
++        const size_t l_eSELlen = i_data->dataSize;
++        uint8_t reserveID[2] = {0,0};
+         // we need to send down the extended sel data (eSEL), which is
+         // longer than the protocol buffer, so we need to do a reservation and
+         // call the AMI partial_add_esel command multiple times
+@@ -258,6 +262,9 @@ void send_esel(eselInitData * i_data,
+         // copy in the SEL event record data
+         memcpy(&data[PARTIAL_ADD_ESEL_REQ], i_data->eSel,
+                 sizeof(selRecord));
++        // update to make this what AMI eSEL wants
++        data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,record_type)] = record_type_ami_esel;
++        data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,event_data1)] = event_data1_ami;
+ 
+         o_cc = IPMI::CC_UNKBAD;
+         TRACFBIN( g_trac_ipmi, INFO_MRK"1st partial_add_esel:", data, len);
+@@ -338,17 +345,51 @@ void send_esel(eselInitData * i_data,
+             // BMC returns the recordID, it's always the same (unless
+             // there's a major BMC bug...)
+             storeReserveRecord(esel_recordID,data);
++        } // while eSELindex
++    }while(0);
++#endif
++
++    // if eSEL wasn't created due to an error, we don't want to continue
++    if(o_err == NULL)
++    {
++        // if the eSEL wasn't created due to a bad completion code, we will
++        // still try to send down a SEL that we create, which will contain
++        // the eSEL recordID (if it was successful)
++        delete [] data;
++        len = sizeof(IPMISEL::selRecord);
++        data = new uint8_t[len];
++
++        // copy in the SEL event record data
++        memcpy(data, i_data->eSel, sizeof(IPMISEL::selRecord));
++        // copy the eSEL recordID (if it was created) into the extra data area
++        data[offsetof(selRecord,event_data2)] = esel_recordID[1];
++        data[offsetof(selRecord,event_data3)] = esel_recordID[0];
++
++        // use local cc so that we don't corrupt the esel from above
++        IPMI::completion_code l_cc = IPMI::CC_UNKBAD;
++        TRACFBIN( g_trac_ipmi, INFO_MRK"add_sel:", data, len);
++        o_err = IPMI::sendrecv(IPMI::add_sel(),l_cc,len,data);
++        if(o_err)
++        {
++            IPMI_TRAC(ERR_MRK "error from add_sel");
+         }
+-        if(o_err || (o_cc != IPMI::CC_OK))
++        else if (l_cc != IPMI::CC_OK)
+         {
+-            break;
++            IPMI_TRAC(ERR_MRK "failed add_sel, l_cc %02x", l_cc);
+         }
+-    }while(0);
++        else
++        {
++            // if CC_OK, then len = 2 and data contains the recordID of the new SEL
++            storeReserveRecord(sel_recordID,data);
++        }
++    }
+ 
+     delete[] data;
+ 
+-    IPMI_TRAC(EXIT_MRK "send_esel (o_err %.8X, o_cc x%.2x, recID=x%x%x)",
+-        o_err ? o_err->plid() : NULL, o_cc, esel_recordID[1], esel_recordID[0]);
++    IPMI_TRAC(EXIT_MRK
++        "send_esel o_err=%.8X, o_cc=x%.2x, sel recID=x%x%x, esel recID=x%x%x",
++        o_err ? o_err->plid() : NULL, o_cc, sel_recordID[1], sel_recordID[0],
++        esel_recordID[1], esel_recordID[0]);
+ 
+     return;
+ } // send_esel
+-- 
+1.8.2.2
+
