diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # ChangeLog for time-manager
 
+## 0.4.1
+
+* BUGFIX:
+  * Fixed a time comparison where a `TimeoutAction` that should be rescheduled
+    wasn't. The monotonic time uses nanoseconds and the difference was compared
+    to the timeout value without converting to microseconds, so it had a high chance
+    of running the `TimeoutAction`, even though it should have been rescheduled.
+
 ## 0.4.0
 
 * CHANGES IN BEHAVIOUR:
diff --git a/System/TimeManager.hs b/System/TimeManager.hs
--- a/System/TimeManager.hs
+++ b/System/TimeManager.hs
@@ -276,8 +276,8 @@
                 ifSameKey key $ do
                     lastRenewed <- I.readIORef handleLastRenewed
                     now <- getMonotonicTimeNSec
-                    let diff = fromIntegral $ now - lastRenewed
-                    if diff > handleTimeout
+                    let diff = fromIntegral $ (now - lastRenewed) `div` 1_000
+                    if diff >= handleTimeout
                         -- Valid expiration of the timeout, we run the action
                         then do
                             -- We're going to run the action, so set the state
diff --git a/time-manager.cabal b/time-manager.cabal
--- a/time-manager.cabal
+++ b/time-manager.cabal
@@ -1,6 +1,6 @@
 cabal-version:      >=1.10
 name:               time-manager
-version:            0.4.0
+version:            0.4.1
 license:            MIT
 license-file:       LICENSE
 maintainer:         kazu@iij.ad.jp
