diff --git a/occ_manager.cpp b/occ_manager.cpp
index 63d5f2e..eede8d1 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -56,6 +56,14 @@
     return data;
 }
 
+// findAndCreateObjects():
+// Takes care of getting the required objects created and
+// finds the available devices/processors.
+// (function is called everytime the discoverTimer expires)
+// - create the PowerMode object to control OCC modes
+// - create statusObjects for each OCC device found
+// - waits for OCC Active sensors PDRs to become available
+// - restart discoverTimer if all data is not available yet
 void Manager::findAndCreateObjects()
 {
 #ifndef POWER10
@@ -147,13 +155,13 @@
                 }
                 discoverTimer->restartOnce(30s);
 #ifdef PLDM
-                if (throttleTraceTimer->isEnabled())
+                if (throttlePldmTraceTimer->isEnabled())
                 {
                     // Host is no longer running, disable throttle timer and
                     // make sure traces are not throttled
                     log<level::INFO>(
                         "findAndCreateObjects(): disabling sensor timer");
-                    throttleTraceTimer->setEnabled(false);
+                    throttlePldmTraceTimer->setEnabled(false);
                     pldmHandle->setTraceThrottle(false);
                 }
 #endif
@@ -219,11 +227,12 @@
                                 .c_str());
                         tracedSensorWait = true;
 #ifdef PLDM
-                        // Make sure traces are not throttled
+                        // Make sure PLDM traces are not throttled
                         pldmHandle->setTraceThrottle(false);
-                        // Start timer to throttle pldm traces when timer
+                        // Start timer to throttle PLDM traces when timer
                         // expires
-                        throttleTraceTimer->restartOnce(40min);
+                        onPldmTimeoutCreatePel = false;
+                        throttlePldmTraceTimer->restartOnce(5min);
 #endif
                     }
 #ifdef PLDM
@@ -242,13 +251,13 @@
             log<level::INFO>(
                 "checkAllActiveSensors(): Waiting for host to start");
 #ifdef PLDM
-            if (throttleTraceTimer->isEnabled())
+            if (throttlePldmTraceTimer->isEnabled())
             {
                 // Host is no longer running, disable throttle timer and
                 // make sure traces are not throttled
                 log<level::INFO>(
                     "checkAllActiveSensors(): disabling sensor timer");
-                throttleTraceTimer->setEnabled(false);
+                throttlePldmTraceTimer->setEnabled(false);
                 pldmHandle->setTraceThrottle(false);
             }
 #endif
@@ -263,14 +272,13 @@
             discoverTimer->setEnabled(false);
         }
 #ifdef PLDM
-        if (throttleTraceTimer->isEnabled())
+        if (throttlePldmTraceTimer->isEnabled())
         {
             // Disable throttle timer and make sure traces are not throttled
-            throttleTraceTimer->setEnabled(false);
+            throttlePldmTraceTimer->setEnabled(false);
             pldmHandle->setTraceThrottle(false);
         }
 #endif
-
         if (waitingForAllOccActiveSensors)
         {
             log<level::INFO>(
@@ -1367,24 +1375,36 @@
 }
 
 #ifdef PLDM
-// Called when throttleTraceTimer expires.
+// Called when throttlePldmTraceTimer expires.
 // If this timer expires, that indicates there are no OCC active sensor PDRs
-// found which will trigger pldm traces to be throttled and PEL to be created
-void Manager::throttleTraceExpired()
+// found which will trigger pldm traces to be throttled.
+// The second time this timer expires, a PEL will get created.
+void Manager::throttlePldmTraceExpired()
 {
     if (utils::isHostRunning())
     {
-        // Throttle traces
-        pldmHandle->setTraceThrottle(true);
-        // Create PEL
-        createPldmSensorPEL();
+        if (!onPldmTimeoutCreatePel)
+        {
+            // Throttle traces
+            pldmHandle->setTraceThrottle(true);
+            // Restart timer to log a PEL when timer expires
+            onPldmTimeoutCreatePel = true;
+            throttlePldmTraceTimer->restartOnce(40min);
+        }
+        else
+        {
+            log<level::ERR>(
+                "throttlePldmTraceExpired(): OCC active sensors still not available!");
+            // Create PEL
+            createPldmSensorPEL();
+        }
     }
     else
     {
         // Make sure traces are not throttled
         pldmHandle->setTraceThrottle(false);
         log<level::INFO>(
-            "throttleTraceExpired(): host it not running ignoring sensor timer");
+            "throttlePldmTraceExpired(): host it not running ignoring sensor timer");
     }
 }
 
diff --git a/occ_manager.hpp b/occ_manager.hpp
index b3034f1..9745682 100644
--- a/occ_manager.hpp
+++ b/occ_manager.hpp
@@ -111,10 +111,10 @@
                 sdpEvent, std::bind(&Manager::occsNotAllRunning, this)))
 #ifdef PLDM
         ,
-        throttleTraceTimer(
+        throttlePldmTraceTimer(
             std::make_unique<
                 sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>(
-                sdpEvent, std::bind(&Manager::throttleTraceExpired, this)))
+                sdpEvent, std::bind(&Manager::throttlePldmTraceExpired, this)))
 #endif
 #endif // POWER10
     {
@@ -350,15 +350,23 @@
      */
     std::unique_ptr<
         sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>>
-        throttleTraceTimer;
+        throttlePldmTraceTimer;
+    /**
+     * @brief onPldmTimeoutCreatePel flag will be used to indicate if
+     *        a PEL should get created when the throttlePldmTraceTimer expires.
+     *        The first time the throttlePldmTraceTimer expires, the traces
+     *        will be throttled and then the timer gets restarted. The
+     *        next time the timer expires, a PEL will get created.
+     */
+    bool onPldmTimeoutCreatePel = false;
 
     /** @brief Check if all of the OCC Active sensors are available and if not
      * restart the discoverTimer
      */
-    void throttleTraceExpired();
+    void throttlePldmTraceExpired();
 
     /** @brief Create a PEL when the code is not able to obtain the OCC PDRs
-     * via PLDM. This is called when the throttleTraceTimer expires.
+     * via PLDM. This is called when the throttlePldmTraceTimer expires.
      */
     void createPldmSensorPEL();
 #endif
