diff --git a/vpd-manager/include/manager.hpp b/vpd-manager/include/manager.hpp
index cb64123..73d82c2 100644
--- a/vpd-manager/include/manager.hpp
+++ b/vpd-manager/include/manager.hpp
@@ -255,6 +255,11 @@
      * @param[in] i_msg - The callback message.
      */
     void processAssetTagChangeCallback(sdbusplus::message_t& i_msg);
+
+    /**
+     * @brief API to process VPD collection thread failed EEPROMs.
+     */
+    void processFailedEeproms();
 #endif
 
     /**
diff --git a/vpd-manager/include/worker.hpp b/vpd-manager/include/worker.hpp
index ac1b3d8..a9725c3 100644
--- a/vpd-manager/include/worker.hpp
+++ b/vpd-manager/include/worker.hpp
@@ -148,6 +148,21 @@
         return m_activeCollectionThreadCount;
     }
 
+    /**
+     * @brief API to get list of EEPROMs for which thread creation failed.
+     *
+     * This API returns reference to list of EEPROM paths for which VPD
+     * collection thread creation has failed. Manager needs to process this list
+     * of EEPROMs and take appropriate action.
+     *
+     * @return reference to list of EEPROM paths for which VPD collection thread
+     * creation has failed
+     */
+    inline std::forward_list<std::string>& getFailedEepromPaths() noexcept
+    {
+        return m_failedEepromPaths;
+    }
+
   private:
     /**
      * @brief An API to parse and publish a FRU VPD over D-Bus.
@@ -546,5 +561,8 @@
 
     // Counting semaphore to limit the number of threads.
     std::counting_semaphore<constants::MAX_THREADS> m_semaphore;
+
+    // List of EEPROM paths for which VPD collection thread creation has failed.
+    std::forward_list<std::string> m_failedEepromPaths;
 };
 } // namespace vpd
diff --git a/vpd-manager/src/manager.cpp b/vpd-manager/src/manager.cpp
index dd00d92..1e3f3d5 100644
--- a/vpd-manager/src/manager.cpp
+++ b/vpd-manager/src/manager.cpp
@@ -286,6 +286,7 @@
         {
             // cancel the timer
             l_timer.cancel();
+            processFailedEeproms();
             m_interface->set_property("CollectionStatus",
                                       std::string("Completed"));
 
@@ -923,4 +924,16 @@
             "VPD recollection failed with error: " + std::string(l_ex.what()));
     }
 }
+
+void Manager::processFailedEeproms()
+{
+    if (m_worker.get() != nullptr)
+    {
+        // TODO:
+        // - iterate through list of EEPROMs for which thread creation has
+        // failed
+        // - For each failed EEPROM, trigger VPD collection
+        m_worker->getFailedEepromPaths().clear();
+    }
+}
 } // namespace vpd
diff --git a/vpd-manager/src/worker.cpp b/vpd-manager/src/worker.cpp
index a0978c8..c1e6b38 100644
--- a/vpd-manager/src/worker.cpp
+++ b/vpd-manager/src/worker.cpp
@@ -1567,19 +1567,26 @@
             continue;
         }
 
-        std::thread{[vpdFilePath, this]() {
-            const auto& l_parseResult = parseAndPublishVPD(vpdFilePath);
+        try
+        {
+            std::thread{[vpdFilePath, this]() {
+                const auto& l_parseResult = parseAndPublishVPD(vpdFilePath);
 
-            // thread returned.
-            m_mutex.lock();
-            m_activeCollectionThreadCount--;
-            m_mutex.unlock();
+                m_mutex.lock();
+                m_activeCollectionThreadCount--;
+                m_mutex.unlock();
 
-            if (!m_activeCollectionThreadCount)
-            {
-                m_isAllFruCollected = true;
-            }
-        }}.detach();
+                if (!m_activeCollectionThreadCount)
+                {
+                    m_isAllFruCollected = true;
+                }
+            }}.detach();
+        }
+        catch (const std::exception& l_ex)
+        {
+            // add vpdFilePath(EEPROM path) to failed list
+            m_failedEepromPaths.push_front(vpdFilePath);
+        }
     }
 }
 
