diff --git a/loader/src/loader/Event.cpp b/loader/src/loader/Event.cpp
index eab66eac..d696e778 100644
--- a/loader/src/loader/Event.cpp
+++ b/loader/src/loader/Event.cpp
@@ -10,6 +10,10 @@ bool DefaultEventListenerPool::add(EventListenerProtocol* listener) {
     if (!m_data) m_data = std::make_unique<Data>();
 
     std::unique_lock lock(m_data->m_mutex);
+    if (ranges::contains(m_data->m_listeners, listener) || ranges::contains(m_data->m_toAdd, listener)) {
+        return false;
+    }
+    
     if (m_data->m_locked) {
         m_data->m_toAdd.push_back(listener);
     }
@@ -34,6 +38,7 @@ void DefaultEventListenerPool::remove(EventListenerProtocol* listener) {
     else {
         ranges::remove(m_data->m_listeners, listener);
     }
+    ranges::remove(m_data->m_toAdd, listener);
 }
 
 ListenerResult DefaultEventListenerPool::handle(Event* event) {