diff --git a/pydle/async.py b/pydle/async.py
index <HASH>..<HASH> 100644
--- a/pydle/async.py
+++ b/pydle/async.py
@@ -104,7 +104,7 @@ class EventLoop:
         self.run_thread = None
         self.handlers = {}
         self.future_timeout = FUTURE_TIMEOUT
-        self._registered_events = False
+        self._registered_events = set()
         self._future_timeouts = {}
         self._timeout_id = 0
         self._timeout_handles = {}
@@ -175,7 +175,7 @@ class EventLoop:
 
 
     def _update_events(self, fd):
-        if self._registered_events:
+        if fd in self._registered_events:
             self.io_loop.remove_handler(fd)
 
         events = 0
@@ -184,7 +184,7 @@ class EventLoop:
                 events |= ident
 
         self.io_loop.add_handler(fd, self._do_on_event, events)
-        self._registered_events = True
+        self._registered_events.add(fd)
 
     def _do_on_event(self, fd, events):
         if fd not in self.handlers:
Fix issue with tracking event loop handler registration per FD.