diff --git a/Control/Concurrent/STM/BTChan.hs b/Control/Concurrent/STM/BTChan.hs
--- a/Control/Concurrent/STM/BTChan.hs
+++ b/Control/Concurrent/STM/BTChan.hs
@@ -45,7 +45,7 @@
 		rsz <- readTVar rdTV
 		let !newWR = sz + rsz
 		when (newWR >= mx) retry
-		writeTVar wrTV newWR
+		writeTVar wrTV (newWR+1)
 		writeTVar rdTV 0
 		writeTChan c x
 	    else do
@@ -62,7 +62,7 @@
                 let !newWR = sz + rsz
                 if (newWR >= mx)
 			then return False
-                	else do writeTVar wrTV newWR
+                	else do writeTVar wrTV (newWR + 1)
 		                writeTVar rdTV 0
         		        writeTChan c x
 				return True
@@ -96,7 +96,7 @@
                 rsz <- readTVar rdTV
                 let !newWR = sz + rsz
                 when (newWR >= m) retry
-                writeTVar wrTV newWR
+                writeTVar wrTV (newWR + 1)
                 writeTVar rdTV 0
                 unGetTChan c a
 	    else do
diff --git a/bounded-tchan.cabal b/bounded-tchan.cabal
--- a/bounded-tchan.cabal
+++ b/bounded-tchan.cabal
@@ -1,5 +1,5 @@
 Name:                bounded-tchan
-Version:             0.2.1
+Version:             0.2.2
 Synopsis:            Bounded Transactional channels (queues)
 Description:         Bounded TChan's, or BTChan's, are a transactional queue with a limit to the number of elements (further calls to @writeBTChan@ or @unGetBTChan@ call STM retry).
 
