diff --git a/Data/MemoUgly.hs b/Data/MemoUgly.hs
--- a/Data/MemoUgly.hs
+++ b/Data/MemoUgly.hs
@@ -13,7 +13,7 @@
     let f' x = do
             m <- readMVar v
             case M.lookup x m of
-                Nothing -> do let { r = f x }; m <- takeMVar v; putMVar v (M.insert x r m); return r
+                Nothing -> do let { r = f x }; modifyMVar_ v (return . M.insert x r); return r
                 Just r  -> return r
     return f'
 
diff --git a/uglymemo.cabal b/uglymemo.cabal
--- a/uglymemo.cabal
+++ b/uglymemo.cabal
@@ -1,7 +1,9 @@
 Name:                uglymemo
-Version:             0.1.0.0
+Version:             0.1.0.1
 Synopsis:            A simple (but internally ugly) memoization function.
 Description:         A simple (but internally ugly) memoization function.
+                     .
+                     * New in 0.1.0.1: Make it exception safe.
 License:             PublicDomain
 Author:              Lennart Augustsson
 Maintainer:          lennart@augustsson.net
