diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for HLint
 
+1.9.3
+    #73, fix multithreading and exceptions
 1.9.2
     #68, add --no-summary
 1.9.1
diff --git a/hlint.cabal b/hlint.cabal
--- a/hlint.cabal
+++ b/hlint.cabal
@@ -1,7 +1,7 @@
 cabal-version:      >= 1.6
 build-type:         Simple
 name:               hlint
-version:            1.9.2
+version:            1.9.3
 license:            BSD3
 license-file:       LICENSE
 category:           Development
diff --git a/src/Parallel.hs b/src/Parallel.hs
--- a/src/Parallel.hs
+++ b/src/Parallel.hs
@@ -13,6 +13,7 @@
 import System.IO.Unsafe
 import GHC.Conc(numCapabilities)
 import Control.Concurrent
+import Control.Exception
 import Control.Monad
 
 
@@ -34,13 +35,13 @@
     chan <- newChan
     mapM_ (writeChan chan . Just) $ zip ms xs
     replicateM_ numCapabilities (writeChan chan Nothing >> forkIO (f chan))
-    parallel1 $ map takeMVar ms
+    let throwE x = throw (x :: SomeException)
+    parallel1 $ map (fmap (either throwE id) . takeMVar) ms
     where
         f chan = do
             v <- readChan chan
             case v of
                 Nothing -> return ()
                 Just (m,x) -> do
-                    x' <- x
-                    putMVar m x'
+                    putMVar m =<< try x
                     f chan
