diff --git a/Control/Concurrent/STM/TChan.hs b/Control/Concurrent/STM/TChan.hs
--- a/Control/Concurrent/STM/TChan.hs
+++ b/Control/Concurrent/STM/TChan.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Concurrent.STM.TChan
@@ -79,7 +80,7 @@
 -- a kind of broadcast channel, where data written by anyone is seen by
 -- everyone else.
 dupTChan :: TChan a -> STM (TChan a)
-dupTChan (TChan read write) = do
+dupTChan (TChan _read write) = do
   hole <- readTVar write  
   new_read <- newTVar hole
   return (TChan new_read write)
@@ -93,7 +94,7 @@
 
 -- |Returns 'True' if the supplied 'TChan' is empty.
 isEmptyTChan :: TChan a -> STM Bool
-isEmptyTChan (TChan read write) = do
+isEmptyTChan (TChan read _write) = do
   listhead <- readTVar read
   head <- readTVar listhead
   case head of
diff --git a/Control/Concurrent/STM/TVar.hs b/Control/Concurrent/STM/TVar.hs
--- a/Control/Concurrent/STM/TVar.hs
+++ b/Control/Concurrent/STM/TVar.hs
@@ -19,6 +19,7 @@
 	readTVar,
 	writeTVar,
 	newTVarIO,
+        readTVarIO,
 #ifdef __GLASGOW_HASKELL__
 	registerDelay
 #endif
diff --git a/Control/Monad/STM.hs b/Control/Monad/STM.hs
--- a/Control/Monad/STM.hs
+++ b/Control/Monad/STM.hs
@@ -1,3 +1,4 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Control.Monad.STM
diff --git a/Control/Sequential/STM.hs b/Control/Sequential/STM.hs
--- a/Control/Sequential/STM.hs
+++ b/Control/Sequential/STM.hs
@@ -5,7 +5,7 @@
 -- #hide
 module Control.Sequential.STM (
 	STM, atomically, catchSTM,
-	TVar, newTVar, newTVarIO, readTVar, writeTVar
+	TVar, newTVar, newTVarIO, readTVar, readTVarIO, writeTVar
     ) where
 
 import Prelude hiding (catch)
@@ -76,6 +76,9 @@
 
 readTVar :: TVar a -> STM a
 readTVar (TVar ref) = STM (const (readIORef ref))
+
+readTVarIO :: TVar a -> IO a
+readTVarIO (TVar ref) = readIORef ref
 
 writeTVar :: TVar a -> a -> STM ()
 writeTVar (TVar ref) a = STM $ \ r -> do
diff --git a/stm.cabal b/stm.cabal
--- a/stm.cabal
+++ b/stm.cabal
@@ -1,5 +1,5 @@
 name:		stm
-version:	2.1.1.2
+version:	2.1.2.0
 license:	BSD3
 license-file:	LICENSE
 maintainer:	libraries@haskell.org
