diff --git a/Control/Concurrent/Async.hs b/Control/Concurrent/Async.hs
--- a/Control/Concurrent/Async.hs
+++ b/Control/Concurrent/Async.hs
@@ -54,7 +54,7 @@
 --
 -- 'withAsync' is like 'async', except that the 'Async' is
 -- automatically killed (using 'uninterruptibleCancel') if the
--- enclosing IO opercation returns before it has completed.  Consider
+-- enclosing IO operation returns before it has completed.  Consider
 -- the case when the first 'wait' throws an exception; then the second
 -- 'Async' will be automatically killed rather than being left to run
 -- in the background, possibly indefinitely.  This is the second way
@@ -316,7 +316,7 @@
 -- exception to it, and waiting for the `Async` thread to quit.
 -- Has no effect if the 'Async' has already completed.
 --
--- > cancel a = throwTo (asyncThreadId a) ThreadKilled <* waitCatch w
+-- > cancel a = throwTo (asyncThreadId a) ThreadKilled <* waitCatch a
 --
 -- Note that 'cancel' will not terminate until the thread the 'Async'
 -- refers to has terminated. This means that 'cancel' will block for
@@ -347,7 +347,7 @@
 -- The notes about the synchronous nature of 'cancel' also apply to
 -- 'cancelWith'.
 cancelWith :: Exception e => Async a -> e -> IO ()
-cancelWith (Async t _) e = throwTo t e
+cancelWith a@(Async t _) e = throwTo t e <* waitCatch a
 
 -- | Wait for any of the supplied asynchronous operations to complete.
 -- The value returned is a pair of the 'Async' that completed, and the
diff --git a/async.cabal b/async.cabal
--- a/async.cabal
+++ b/async.cabal
@@ -1,5 +1,5 @@
 name:                async
-version:             2.1.1
+version:             2.1.1.1
 -- don't forget to update ./changelog.md!
 synopsis:            Run IO operations asynchronously and wait for their results
 
@@ -50,14 +50,14 @@
     if impl(ghc>=7.1)
         other-extensions: Trustworthy
     exposed-modules:     Control.Concurrent.Async
-    build-depends:       base >= 4.3 && < 4.10, stm >= 2.2 && < 2.5
+    build-depends:       base >= 4.3 && < 4.11, stm >= 2.2 && < 2.5
 
 test-suite test-async
     default-language: Haskell2010
     type:       exitcode-stdio-1.0
     hs-source-dirs: test
     main-is:    test-async.hs
-    build-depends: base >= 4.3 && < 4.10,
+    build-depends: base >= 4.3 && < 4.11,
                    async,
                    test-framework,
                    test-framework-hunit,
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+## Changes in 2.1.1.1:
+ - Make 'cancelWith' wait for the cancelled thread to terminate, like 'cancel'
+ - Updates to dependency bounds for GHC 8.2
+
 ## Changes in 2.1.1:
 
  - Add `concurrently_`
