diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -5,6 +5,8 @@
 
 This software currently has *beta* status, i.e. it had seen limited testing.
 
+Version 0.1.4 - Expose 'waitRead' and 'waitWrite'.
+
 Version 0.1.3 - Deprecated 'Xreq', 'XRep' in favour of 'Dealer' and 'Router'
                 as in libzmq. Fixes to compile and run with GHC 7.4.1.
 
diff --git a/src/System/ZMQ3.hs b/src/System/ZMQ3.hs
--- a/src/System/ZMQ3.hs
+++ b/src/System/ZMQ3.hs
@@ -59,7 +59,7 @@
 -- 'receive' are internally non-blocking and use GHC's I/O manager to block
 -- calling threads when send or receive would yield EAGAIN. This combined with
 -- GHC's scalable threading model should relieve client code from the burden
--- to do it's own polling. For timeouts please consider 'System.Timeout.timeout'.
+-- to do it's own polling.
 --
 -- /Error Handling/
 --
@@ -170,6 +170,8 @@
   , term
   , socket
   , close
+  , waitRead
+  , waitWrite
 
 ) where
 
@@ -648,7 +650,15 @@
   where
     testev e = e .&. fromIntegral (pollVal f) /= 0
 
-waitRead, waitWrite :: Socket a -> IO ()
+-- | Wait until data is available for reading from the given Socket.
+-- After this function returns, a call to 'receive' will essentially be
+-- non-blocking.
+waitRead :: Socket a -> IO ()
 waitRead = wait' threadWaitRead pollIn
+
+-- | Wait until data can be written to the given Socket.
+-- After this function returns, a call to 'send' will essentially be
+-- non-blocking.
+waitWrite :: Socket a -> IO ()
 waitWrite = wait' threadWaitWrite pollOut
 
diff --git a/zeromq3-haskell.cabal b/zeromq3-haskell.cabal
--- a/zeromq3-haskell.cabal
+++ b/zeromq3-haskell.cabal
@@ -1,5 +1,5 @@
 name:               zeromq3-haskell
-version:            0.1.3
+version:            0.1.4
 synopsis:           Bindings to ZeroMQ 3.x
 category:           System, FFI
 license:            MIT
