diff --git a/Control/Event/Relative.hs b/Control/Event/Relative.hs
--- a/Control/Event/Relative.hs
+++ b/Control/Event/Relative.hs
@@ -20,7 +20,7 @@
 -- is returned, allowing the event to be canceled.
 addEvent :: Int -> IO () -> IO EventId
 addEvent delay event = do
-	m <- newEmptyMVar
+	m <- newMVar False
 	t <- forkIO (eventThread m)
 	return (t,m)
   where
@@ -38,6 +38,7 @@
 -- then the time elapsed and the action was forked off.
 delEvent :: EventId -> IO Bool
 delEvent (t,m) = do
-    killThread t
-    b <- swapMVar m True
+    b <- takeMVar m
+    when (not b) (killThread t)
+    putMVar m True
     return (not b)
diff --git a/control-event.cabal b/control-event.cabal
--- a/control-event.cabal
+++ b/control-event.cabal
@@ -1,5 +1,5 @@
 name:                control-event
-version:             1.1.0.3
+version:             1.1.0.4
 synopsis:            Event scheduling system.
 description:         Allows scheduling and canceling of IO actions to be
                      executed at a specified future time.
