diff --git a/extensions/openpower-pels/data_interface.cpp b/extensions/openpower-pels/data_interface.cpp
index fa7b087..a582d88 100644
--- a/extensions/openpower-pels/data_interface.cpp
+++ b/extensions/openpower-pels/data_interface.cpp
@@ -26,6 +26,11 @@
 #include <phosphor-logging/log.hpp>
 #include <xyz/openbmc_project/State/Boot/Progress/server.hpp>
 
+// Use a timeout of 10s for D-Bus calls so if there are
+// timeouts the callers of the PEL creation method won't
+// also timeout.
+constexpr auto dbusTimeout = 10000000;
+
 namespace openpower
 {
 namespace pels
@@ -195,7 +200,7 @@
     auto method = _bus.new_method_call(service.c_str(), objectPath.c_str(),
                                        interface::dbusProperty, "GetAll");
     method.append(interface);
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     reply.read(properties);
 
@@ -212,7 +217,7 @@
     auto method = _bus.new_method_call(service.c_str(), objectPath.c_str(),
                                        interface::dbusProperty, "Get");
     method.append(interface, property);
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     reply.read(value);
 }
@@ -226,7 +231,7 @@
 
     method.append(std::string{"/"}, 0, interfaces);
 
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     DBusPathList paths;
     reply.read(paths);
@@ -243,7 +248,7 @@
 
     method.append(objectPath, std::vector<std::string>({interface}));
 
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     std::map<DBusService, DBusInterfaceList> response;
     reply.read(response);
@@ -462,7 +467,7 @@
 
     method.append(addLocationCodePrefix(baseLoc), static_cast<uint16_t>(0));
 
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     std::string expandedLocationCode;
     reply.read(expandedLocationCode);
@@ -501,7 +506,7 @@
         method.append(addLocationCodePrefix(baseLoc), node);
     }
 
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     std::vector<sdbusplus::message::object_path> entries;
     reply.read(entries);
@@ -531,7 +536,7 @@
         _bus.new_method_call(service_name::ledGroupManager, ledGroup.c_str(),
                              interface::dbusProperty, "Set");
     method.append(interface::ledGroup, "Asserted", variant);
-    _bus.call(method);
+    _bus.call(method, dbusTimeout);
 }
 
 void DataInterface::setFunctional(const std::string& objectPath,
@@ -544,7 +549,7 @@
                                        interface::dbusProperty, "Set");
 
     method.append(interface::operationalStatus, "Functional", variant);
-    _bus.call(method);
+    _bus.call(method, dbusTimeout);
 }
 
 using AssociationTuple = std::tuple<std::string, std::string, std::string>;
@@ -576,7 +581,7 @@
 
         method.append(interface::associationDef, "Associations",
                       setAssociationValue);
-        _bus.call(method);
+        _bus.call(method, dbusTimeout);
     }
 }
 
@@ -590,7 +595,7 @@
                                        interface::objectMapper, "GetSubTree");
     method.append(std::string{"/"}, 0,
                   std::vector<std::string>{interface::compatible});
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     reply.read(subtree);
     if (subtree.empty())
@@ -648,7 +653,7 @@
                                        interface::objectMapper, "GetSubTree");
     method.append(std::string{"/"}, 0,
                   std::vector<std::string>{interface::dumpEntry});
-    auto reply = _bus.call(method);
+    auto reply = _bus.call(method, dbusTimeout);
 
     reply.read(subtree);
 
@@ -717,8 +722,8 @@
         // api's. Making d-bus call no reply type to avoid cyclic dependency.
         // Added minimal timeout to catch initial failures.
         // Need to revisit this design later to avoid cyclic dependency.
-        constexpr auto dbusTimeout = 100000; // in micro seconds
-        _bus.call_noreply(method, dbusTimeout);
+        constexpr auto hwIsolationTimeout = 100000; // in micro seconds
+        _bus.call_noreply(method, hwIsolationTimeout);
     }
 
     catch (const sdbusplus::exception::exception& e)
@@ -749,7 +754,7 @@
 
     method.append(interface::bootRawProgress, "Value", variant);
 
-    _bus.call(method);
+    _bus.call(method, dbusTimeout);
 }
 
 std::vector<uint32_t> DataInterface::getLogIDWithHwIsolation() const
