diff --git a/occ_manager.cpp b/occ_manager.cpp
index 6b0282c..f89c530 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -457,7 +457,7 @@
         if (resetInProgress)
         {
             lg2::info(
-                "statusCallBack: Ignoring OCC{INST} activate because a reset has been initiated due to OCC{INST}",
+                "statusCallBack: Ignoring OCC{INST} activate because a reset has been initiated due to OCC{RINST}",
                 "INST", instance, "RINST", resetInstance);
             return;
         }
@@ -628,6 +628,9 @@
         setSBEState(instance, SBE_STATE_NOT_USABLE);
 #endif
 
+        // Stop communication with this OCC
+        (*obj)->occActive(false);
+
         pldmHandle->sendHRESET(instance);
     }
 }
@@ -723,6 +726,16 @@
         setSBEState(instance, SBE_STATE_BOOTED);
 #endif
 
+        // Re-enable communication with this OCC
+        auto obj = std::find_if(statusObjects.begin(), statusObjects.end(),
+                                [instance](const auto& obj) {
+                                    return instance == obj->getOccInstanceID();
+                                });
+        if (obj != statusObjects.end() && (!(*obj)->occActive()))
+        {
+            (*obj)->occActive(true);
+        }
+
         return;
     }
 
diff --git a/pldm.cpp b/pldm.cpp
index 6893845..4b1582d 100644
--- a/pldm.cpp
+++ b/pldm.cpp
@@ -216,42 +216,45 @@
                                    outstandingHResets.end(), instance);
             if (match != outstandingHResets.end())
             {
-                outstandingHResets.erase(match);
                 if (eventState == static_cast<EventState>(SBE_HRESET_NOT_READY))
                 {
-                    lg2::error("pldm: HRESET is NOT READY (OCC{INST})", "INST",
-                               instance);
-                    // Stop OCC comm - OCC not usable until it becomes READY
-                    occActiveCallBack(instance, false);
-                    // Collect SBE FFDC
-                    sbeCallBack(instance, false);
-                    // Try PM Complex reset
-                    lg2::error(
-                        "sensorEvent: Requesting OCC reset for OCC{INST}",
-                        "INST", instance);
-                    resetOCC(resetInstance);
+                    lg2::warning("pldm: HRESET is NOT READY (OCC{INST})",
+                                 "INST", instance);
+                    // Keep waiting for status from HRESET
                 }
                 else if (eventState ==
                          static_cast<EventState>(SBE_HRESET_READY))
                 {
+                    // Reset success, clear reset request
+                    outstandingHResets.erase(match);
                     sbeCallBack(instance, true);
                 }
                 else if (eventState ==
                          static_cast<EventState>(SBE_HRESET_FAILED))
                 {
+                    // Reset failed, clear reset request and collect SBE dump
+                    outstandingHResets.erase(match);
                     sbeCallBack(instance, false);
                 }
                 else
                 {
-                    if (eventState ==
-                        static_cast<EventState>(SBE_HRESET_FAILED))
-                        lg2::error(
-                            "pldm: Unexpected HRESET state {STATE} (OCC{INST})",
-                            "STATE", eventState, "INST", instance);
-                    sbeCallBack(instance, false);
+                    lg2::warning(
+                        "pldm: Unexpected HRESET state {STATE} (OCC{INST})",
+                        "STATE", eventState, "INST", instance);
                 }
             }
-            // else request was not from us
+            else // request was not due to our HRESET request
+            {
+                if (eventState == static_cast<EventState>(SBE_HRESET_FAILED))
+                {
+                    lg2::error(
+                        "pldm: Unexpected HRESET state {FAILED} (OCC{INST}) when HRESET not outstanding",
+                        "INST", instance);
+
+                    // No recovery from failed state, so ensure comm was stopped
+                    occActiveCallBack(instance, false);
+                }
+            }
         }
     }
 }
@@ -891,8 +894,7 @@
         pldmIface->pldmRspTimer.setEnabled(false);
     }
 
-    // instance ID should be freed
-    pldmIface->pldmInstanceID = std::nullopt;
+    // instance ID will get freed on pldmClose()
 
     // Set pointer to autodelete
     std::unique_ptr<uint8_t, decltype(std::free)*> responseMsgPtr{
@@ -1031,8 +1033,7 @@
         pldmIface->pldmRspTimer.setEnabled(false);
     }
 
-    // instance ID should be freed
-    pldmIface->pldmInstanceID = std::nullopt;
+    // instance ID will get freed on pldmClose()
 
     // Set pointer to autodelete
     std::unique_ptr<uint8_t, decltype(std::free)*> responseMsgPtr{
