diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for http3
 
+## 0.0.21
+
+* Using `withHandle` of time-manager.
+
 ## 0.0.20
 
 * Unregistering handle to remove ThreadId to prevent temporary
diff --git a/Network/HTTP3/Client.hs b/Network/HTTP3/Client.hs
--- a/Network/HTTP3/Client.hs
+++ b/Network/HTTP3/Client.hs
@@ -26,7 +26,6 @@
 import Network.QUIC (Connection)
 import qualified Network.QUIC as QUIC
 import Network.QUIC.Internal (possibleMyStreams)
-import qualified System.TimeManager as T
 
 import Imports
 import Network.HTTP3.Config
@@ -81,7 +80,7 @@
 sendRequest
     :: Context -> Scheme -> Authority -> Request -> (Response -> IO a) -> IO a
 sendRequest ctx scm auth (Request outobj) processResponse =
-    E.bracket (registerThread ctx) T.cancel $ \th -> do
+    withHandle ctx $ \th -> do
         let hdr = outObjHeaders outobj
             hdr' =
                 (":scheme", scm)
diff --git a/Network/HTTP3/Context.hs b/Network/HTTP3/Context.hs
--- a/Network/HTTP3/Context.hs
+++ b/Network/HTTP3/Context.hs
@@ -11,7 +11,7 @@
     accept,
     qpackEncode,
     qpackDecode,
-    registerThread,
+    withHandle,
     newStream,
     closeStream,
     pReadMaker,
@@ -108,8 +108,8 @@
     let typ = toH3StreamType $ fromIntegral w8
     ctxUniSwitch typ (recvStream strm)
 
-registerThread :: Context -> IO T.Handle
-registerThread Context{..} = T.registerKillThread ctxManager (return ())
+withHandle :: Context -> (T.Handle -> IO a) -> IO a
+withHandle Context{..} = T.withHandle ctxManager (return ())
 
 newStream :: Context -> IO Stream
 newStream Context{..} = stream ctxConnection
diff --git a/Network/HTTP3/Server.hs b/Network/HTTP3/Server.hs
--- a/Network/HTTP3/Server.hs
+++ b/Network/HTTP3/Server.hs
@@ -107,7 +107,7 @@
 processRequest ctx server strm = E.handle reset $ do
     tid <- myThreadId
     labelThread tid "H3 processRequest"
-    E.bracket (registerThread ctx) T.cancel $ \th -> do
+    withHandle ctx $ \th -> do
         src <- newSource strm
         mvt <- recvHeader ctx src
         case mvt of
@@ -171,7 +171,7 @@
 sendResponseIO
     :: Context -> Stream -> Response -> IO ()
 sendResponseIO ctx strm (Response outobj) =
-    E.bracket (registerThread ctx) T.cancel $ \th -> do
+    withHandle ctx $ \th -> do
         sendHeader ctx strm th $ outObjHeaders outobj
         sendBody ctx strm th outobj
         QUIC.closeStream strm
diff --git a/http3.cabal b/http3.cabal
--- a/http3.cabal
+++ b/http3.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               http3
-version:            0.0.20
+version:            0.0.21
 license:            BSD-3-Clause
 license-file:       LICENSE
 maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>
@@ -90,7 +90,7 @@
         quic >= 0.2 && < 0.3,
         sockaddr,
         stm,
-        time-manager
+        time-manager >= 0.1.3 && < 0.2
 
 executable h3-server
     main-is:            h3-server.hs
