diff --git a/lib/config/configitem.cpp b/lib/config/configitem.cpp
index c790f8794..d93087287 100644
--- a/lib/config/configitem.cpp
+++ b/lib/config/configitem.cpp
@@ -38,6 +38,8 @@
 #include "base/function.hpp"
 #include <sstream>
 #include <fstream>
+#include <algorithm>
+#include <random>
 
 using namespace icinga;
 
@@ -428,6 +430,10 @@ bool ConfigItem::CommitNewItems(const ActivationContext::Ptr& context, WorkQueue
 	if (items.empty())
 		return true;
 
+	// Shuffle all items to evenly distribute them over the threads of the workqueue. This increases perfomance
+	// noticably in environments with lots of objects and available threads.
+	std::shuffle(std::begin(items), std::end(items), std::default_random_engine {});
+
 	for (const auto& ip : items)
 		newItems.push_back(ip.first);