diff --git a/Demo.hs b/Demo.hs
--- a/Demo.hs
+++ b/Demo.hs
@@ -45,7 +45,7 @@
     let !(I# m') = length args + 23
     let f = \x n -> take (I# m + I# x) n ++ args
         t = f m' l2
-    putStrLn $ "So here is (" ++ show (asBox f) ++ "), referncing its free variables args and 42:"
+    putStrLn $ "So here is (" ++ show (asBox f) ++ "), referencing its free variables args and 42:"
     getClosureData f >>= printInd
     putStrLn "And t is a thunk that applies f (also referenced here) to an unboxed value (23) and l2:"
     getClosureData t >>= printInd
diff --git a/cbits/HeapView.c b/cbits/HeapView.c
--- a/cbits/HeapView.c
+++ b/cbits/HeapView.c
@@ -234,9 +234,18 @@
         case MUT_ARR_PTRS_CLEAN:
         case MUT_ARR_PTRS_DIRTY:
         case MUT_ARR_PTRS_FROZEN:
+        case MUT_ARR_PTRS_FROZEN0:
             for (i = 0; i < ((StgMutArrPtrs *)closure)->ptrs; ++i) {
                 ptrs[nptrs++] = ((StgMutArrPtrs *)closure)->payload[i];
             }
+            break;
+        case MUT_VAR_CLEAN:
+            ptrs[nptrs++] = ((StgMutVar *)closure)->var;
+            break;
+        case MVAR_CLEAN:
+            ptrs[nptrs++] = (StgClosure *)((StgMVar *)closure)->head;
+            ptrs[nptrs++] = (StgClosure *)((StgMVar *)closure)->tail;
+            ptrs[nptrs++] = ((StgMVar *)closure)->value;
             break;
 
         default:
diff --git a/ghc-heap-view.cabal b/ghc-heap-view.cabal
--- a/ghc-heap-view.cabal
+++ b/ghc-heap-view.cabal
@@ -1,5 +1,5 @@
 Name:                ghc-heap-view
-Version:             0.1
+Version:             0.2
 Synopsis:            Extract the heap representation of Haskell values and thunks
 Description:
   This library provides functions to introspect the Haskell heap, for example
@@ -9,7 +9,7 @@
   debugger, but also allows to investiage thunks and other closures. 
   .
   The work on this package has been supported by the Deutsche Telekom Stiftung
-  <http://telekom-stiftung.de>.
+  (<http://telekom-stiftung.de>).
 License:             BSD3
 License-file:        LICENSE
 Author:              Joachim Breitner
@@ -17,7 +17,7 @@
 Copyright:           2012 Joachim Breitner
 Category:            Debug, GHC
 Build-type:          Simple
-Cabal-version:       >=1.6
+Cabal-version:       >=1.14
 Extra-source-files:  Demo.hs
 
 Flag prim-supports-any
@@ -26,6 +26,7 @@
 
 Library
   Exposed-modules: GHC.HeapView 
+  Default-Language:    Haskell2010
   Build-depends:
     base == 4.5.*,
     ghc
@@ -38,5 +39,4 @@
   
 source-repository head
   type:     darcs
-  location: http://darcs.nomeata.de/darcswatch/
-
+  location: http://darcs.nomeata.de/ghc-heap-view/
diff --git a/src/GHC/HeapView.hs b/src/GHC/HeapView.hs
--- a/src/GHC/HeapView.hs
+++ b/src/GHC/HeapView.hs
@@ -57,6 +57,11 @@
        pad_out ls = 
           '0':'x':(replicate (2*wORD_SIZE - length ls) '0') ++ ls
 
+instance Eq Box where
+  Box a == Box b = case reallyUnsafePtrEquality# a b of
+    1# -> True
+    _  -> False
+
 {-|
   This takes an arbitrary value and puts it into a box. Note that calls like
 
@@ -289,6 +294,16 @@
         , mccPayload :: [Box]
         -- Card table ignored
     } |
+    MutVarClosure {
+        info         :: StgInfoTable 
+        , var        :: Box
+    } |
+    MVarClosure {
+        info         :: StgInfoTable 
+        , queueHead  :: Box
+        , queueTail  :: Box
+        , value      :: Box
+    } |
     FunClosure {
         info         :: StgInfoTable 
         , ptrArgs    :: [Box]
@@ -319,6 +334,8 @@
 allPtrs (BCOClosure {..}) = [instrs,literals,bcoptrs]
 allPtrs (ArrWordsClosure {..}) = []
 allPtrs (MutArrClosure {..}) = mccPayload
+allPtrs (MutVarClosure {..}) = [var]
+allPtrs (MVarClosure {..}) = [queueHead,queueTail,value]
 allPtrs (FunClosure {..}) = ptrArgs
 allPtrs (BlockingQueueClosure {..}) = [link, blackHole, owner, queue]
 allPtrs (OtherClosure {..}) = hvalues
@@ -459,8 +476,15 @@
 
         ARR_WORDS ->
             return $ ArrWordsClosure itbl (wds !! 1) (drop 2 wds)
-        MUT_ARR_PTRS_FROZEN ->
-            return $ MutArrClosure itbl (wds !! 2) (wds !! 3) ptrs
+
+        t | t == MUT_ARR_PTRS_FROZEN || t == MUT_ARR_PTRS_FROZEN0 ->
+            return $ MutArrClosure itbl (wds !! 1) (wds !! 2) ptrs
+
+        t | t == MUT_VAR_CLEAN || t == MUT_VAR_DIRTY ->
+            return $ MutVarClosure itbl (head ptrs)
+
+        t | t == MVAR_CLEAN || t == MVAR_DIRTY ->
+            return $ MVarClosure itbl (ptrs !! 0) (ptrs !! 1) (ptrs !! 2)
 
         BLOCKING_QUEUE ->
           return $ OtherClosure itbl ptrs wds
