diff --git a/src/Control/Concurrent/STM/Split/Class.hs b/src/Control/Concurrent/STM/Split/Class.hs
--- a/src/Control/Concurrent/STM/Split/Class.hs
+++ b/src/Control/Concurrent/STM/Split/Class.hs
@@ -1,5 +1,5 @@
 module Control.Concurrent.STM.Split.Class (
-   In, Out, C, newIO, new, read, write,
+   In, Out, C(newIO, new, read, write),
    ) where
 
 import Control.Monad.STM (STM, )
diff --git a/src/Control/Concurrent/STM/Split/MVar.hs b/src/Control/Concurrent/STM/Split/MVar.hs
--- a/src/Control/Concurrent/STM/Split/MVar.hs
+++ b/src/Control/Concurrent/STM/Split/MVar.hs
@@ -8,10 +8,7 @@
    new,
    take, tryTake,
    put, tryPut,
-{-
    write,
-   clear,
--}
    ) where
 
 import qualified Control.Concurrent.STM.Split.Class as Split
@@ -19,7 +16,7 @@
 import qualified Control.Concurrent.STM.TMVar as MVar
 import Control.Monad.STM (STM, )
 
-import Prelude (IO, Maybe, Bool, return, )
+import Prelude (IO, Maybe, Bool, fmap, ($), (.), return, (>>), )
 
 
 newtype T dir a = Cons (MVar.TMVar a)
@@ -34,25 +31,20 @@
    read = take
    write = put
 
+split :: MVar.TMVar a -> (In a, Out a)
+split v = (Cons v, Cons v)
+
 newEmptyIO :: IO (In a, Out a)
-newEmptyIO = do
-   v <- MVar.newEmptyTMVarIO
-   return (Cons v, Cons v)
+newEmptyIO = fmap split $ MVar.newEmptyTMVarIO
 
 newEmpty :: STM (In a, Out a)
-newEmpty = do
-   v <- MVar.newEmptyTMVar
-   return (Cons v, Cons v)
+newEmpty = fmap split $ MVar.newEmptyTMVar
 
 newIO :: a -> IO (In a, Out a)
-newIO a = do
-   v <- MVar.newTMVarIO a
-   return (Cons v, Cons v)
+newIO = fmap split . MVar.newTMVarIO
 
 new :: a -> STM (In a, Out a)
-new a = do
-   v <- MVar.newTMVar a
-   return (Cons v, Cons v)
+new = fmap split . MVar.newTMVar
 
 take :: Out a -> STM a
 take (Cons v) = MVar.takeTMVar v
@@ -67,7 +59,11 @@
 tryPut (Cons v) a = MVar.tryPutTMVar v a
 
 
-{-
+{- |
+Write value to 'MVar.TMVar' and overwrite existing content. It never blocks.
+Please note, that this function is different
+from the generic 'Class.write', which blocks on 'MVar.TMVar's.
+-}
 write :: In a -> a -> STM ()
 write var a =
    clear var >> put var a
@@ -75,4 +71,3 @@
 clear :: In a -> STM ()
 clear (Cons v) =
    MVar.tryTakeTMVar v >> return ()
--}
diff --git a/stm-split.cabal b/stm-split.cabal
--- a/stm-split.cabal
+++ b/stm-split.cabal
@@ -1,5 +1,5 @@
 Name:             stm-split
-Version:          0.0.1
+Version:          0.0.2
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -27,7 +27,7 @@
 Cabal-Version:    >=1.6
 Build-Type:       Simple
 Source-Repository this
-  Tag:         0.0.1
+  Tag:         0.0.2
   Type:        darcs
   Location:    http://hub.darcs.net/thielema/stm-split/
 
