diff --git a/Data/Array/Vector.hs b/Data/Array/Vector.hs
--- a/Data/Array/Vector.hs
+++ b/Data/Array/Vector.hs
@@ -174,9 +174,6 @@
   -- randomU, randomRU,
 -}
 
-  -- * I\/O
-  UIO(..),
-
   -- * Operations on mutable arrays
   newU, lengthMU, newMU, readMU, writeMU, unsafeFreezeMU, unsafeFreezeAllMU,
   copyMU, permuteMU, atomicUpdateMU, unstreamMU,
diff --git a/Data/Array/Vector/Prim/BUArr.hs b/Data/Array/Vector/Prim/BUArr.hs
--- a/Data/Array/Vector/Prim/BUArr.hs
+++ b/Data/Array/Vector/Prim/BUArr.hs
@@ -81,9 +81,6 @@
   -- * Conversions to\/from lists
   toBU, fromBU,
 
-  -- * I\/O
-  hPutBU, hGetBU
-
   -- * Re-exporting some of GHC's internals that higher-level modules need
 --  Char#, Int#, Float#, Double#, Char(..), Int(..), Float(..), Double(..), ST,
 --  runST
@@ -833,65 +830,6 @@
         len_bytes = sizeBU len (undefined :: e)
         off_bytes = sizeBU off (undefined :: e)
 -}
-
-------------------------------------------------------------------------
--- IO
--- --
-
--- host order , uninterpreted IO for BUArrays
-
-hGetBU :: forall e. UAE e => Handle -> IO (BUArr e)
-hGetBU h =
-  do
-    let elemSize = sizeBU 1 (undefined :: e)
-    n <- fmap ((`div`elemSize) . fromInteger) $ hFileSize h
-    marr@(MBUArr _ marr#) <- stToIO (newMBU n)
-    let bytes = sizeBU n (undefined :: e)
-    wantReadableHandle "hGetBU" h $
-        \handle@Handle__{ haFD=fd, haBuffer=ref, haIsStream=is_stream } -> do
-      buf@Buffer { bufBuf = raw, bufWPtr = w, bufRPtr = r } <- readIORef ref
-      let copied    = bytes `min` (w - r)
-          remaining = bytes - copied
-          newr      = r + copied
-          newbuf | newr == w = buf{ bufRPtr = 0, bufWPtr = 0 }
-                 | otherwise = buf{ bufRPtr = newr }
-      --memcpy_ba_baoff marr# raw (fromIntegral r) (fromIntegral copied)
-      memcpy_ba_baoff marr# raw (fromIntegral r) (fromIntegral copied)
-      writeIORef ref newbuf
-      readChunkBU fd is_stream marr# copied remaining
-      stToIO (unsafeFreezeAllMBU marr)
-
-readChunkBU :: FD -> Bool -> MutableByteArray# RealWorld -> Int -> Int -> IO ()
-readChunkBU fd is_stream marr# off bytes = loop off bytes
-  where
-    loop off bytes | bytes <= 0 = return ()
-    loop off bytes = do
-      r' <- readRawBuffer "readChunkBU" (fromIntegral fd) is_stream marr#
-                                        (fromIntegral off) (fromIntegral bytes)
-      let r = fromIntegral r'
-      if r == 0
-        then error "readChunkBU: can't read"
-        else loop (off + r) (bytes - r)
-
-hPutBU :: forall e. UAE e => Handle -> BUArr e -> IO ()
-hPutBU h arr@(BUArr i n arr#) =
-  do
-    wantWritableHandle "hPutBU" h $
-        \handle@Handle__{ haFD=fd, haBuffer=ref, haIsStream=stream } -> do
-      old_buf     <- readIORef ref
-      flushed_buf <- flushWriteBuffer fd stream old_buf
-      writeIORef ref flushed_buf
-      let this_buf = Buffer { bufBuf   = unsafeCoerce# arr#
-                            , bufState = WriteBuffer
-                            , bufRPtr  = off
-                            , bufWPtr  = off + size
-                            , bufSize  = size
-                            }
-      flushWriteBuffer fd stream this_buf
-      return ()
-  where
-    off  = sizeBU i (undefined :: e)
-    size = sizeBU n (undefined :: e)
 
 -----------------------------------------------------------------------------
 -- Translation between elements and bytes
diff --git a/Data/Array/Vector/Strict/Basics.hs b/Data/Array/Vector/Strict/Basics.hs
--- a/Data/Array/Vector/Strict/Basics.hs
+++ b/Data/Array/Vector/Strict/Basics.hs
@@ -141,7 +141,9 @@
                        . replicateEachS n
                        $ zipS (streamU ns) (streamU es)
 
--- |/O(n)/. 'indexU' extracts an element out of an immutable unboxed array.
+-- | 'indexU' extracts an element out of an immutable unboxed array.
+--
+-- TODO: use indexU, the non-streaming version.
 --
 indexU :: UA e => UArr e -> Int -> e
 indexU arr n = indexS (streamU arr) n
diff --git a/Data/Array/Vector/UArr.hs b/Data/Array/Vector/UArr.hs
--- a/Data/Array/Vector/UArr.hs
+++ b/Data/Array/Vector/UArr.hs
@@ -42,9 +42,6 @@
   memcpyMU, memcpyOffMU, memmoveOffMU,
   unsafeZipMU, unsafeUnzipMU,
 
-  -- * I\/O
-  UIO(..)
-
 ) where
 
 -- standard libraries
@@ -57,7 +54,7 @@
 -- friends
 import Data.Array.Vector.Prim.BUArr (
   BUArr, MBUArr, UAE,
-  lengthBU, indexBU, sliceBU, hGetBU, hPutBU,
+  lengthBU, indexBU, sliceBU,
   lengthMBU, newMBU, readMBU, writeMBU, copyMBU, unsafeFreezeMBU,
   memcpyMBU, memcpyOffMBU, memmoveOffMBU)
 
@@ -84,9 +81,10 @@
   data UArr  e
   data MUArr e :: * -> *
 
-  -- |/O(1?)/. Yield the length of an unboxed array.
+  -- |/O(1)/. Yield the length of an unboxed array.
   lengthU        :: UArr e                     -> Int
 
+  -- |/O(1)/. Read an element from the array.
   indexU         :: UArr e -> Int              -> e
 
   -- |/O(1)/. 'sliceU' restricts access to a subrange of the original array 
@@ -874,58 +872,3 @@
   memcpyMU     (MUARatio src) (MUARatio dst)     l = memcpyMU     src dst     l
   memcpyOffMU  (MUARatio src) (MUARatio dst) s d l = memcpyOffMU  src dst s d l
   memmoveOffMU (MUARatio src) (MUARatio dst) s d l = memmoveOffMU src dst s d l
-
-
-------------------------------------------------------------------------
-
--- * I\/O
--- -----
-
-class UA a => UIO a where
-  hPutU :: Handle -> UArr a -> IO ()
-  hGetU :: Handle -> IO (UArr a)
-
-primPutU :: UPrim a => Handle -> UArr a -> IO ()
-primPutU h = hPutBU h . unUAPrim
-
-primGetU :: UPrim a => Handle -> IO (UArr a)
-primGetU = liftM mkUAPrim . hGetBU
-
-------------------------------------------------------------------------
-
-instance UIO Bool   where hPutU = primPutU; hGetU = primGetU
-instance UIO Char   where hPutU = primPutU; hGetU = primGetU
-instance UIO Int    where hPutU = primPutU; hGetU = primGetU
-instance UIO Word   where hPutU = primPutU; hGetU = primGetU
-instance UIO Float  where hPutU = primPutU; hGetU = primGetU
-instance UIO Double where hPutU = primPutU; hGetU = primGetU
-
-instance UIO Word8  where hPutU = primPutU; hGetU = primGetU
-instance UIO Word16 where hPutU = primPutU; hGetU = primGetU
-instance UIO Word32 where hPutU = primPutU; hGetU = primGetU
-instance UIO Word64 where hPutU = primPutU; hGetU = primGetU
-
-instance UIO Int8   where hPutU = primPutU; hGetU = primGetU
-instance UIO Int16  where hPutU = primPutU; hGetU = primGetU
-instance UIO Int32  where hPutU = primPutU; hGetU = primGetU
-instance UIO Int64  where hPutU = primPutU; hGetU = primGetU
-
-------------------------------------------------------------------------
-
-instance (UIO a, UIO b) => UIO (a :*: b) where
-  hPutU h (UAProd xs ys) = do hPutU h xs
-                              hPutU h ys
-  hGetU h                = do xs <- hGetU h
-                              ys <- hGetU h
-                              return (UAProd xs ys)
-
-instance (RealFloat a, UIO a) => UIO (Complex a) where
-  hPutU h (UAComplex arr) = hPutU h arr
-  hGetU h                 = do arr <- hGetU h
-                               return (UAComplex arr)
-
-instance (Integral a, UIO a) => UIO (Ratio a) where
-  hPutU h (UARatio arr) = hPutU h arr
-  hGetU h                 = do arr <- hGetU h
-                               return (UARatio arr)
-
diff --git a/uvector.cabal b/uvector.cabal
--- a/uvector.cabal
+++ b/uvector.cabal
@@ -1,5 +1,5 @@
 name:           uvector
-version:        0.1.0.5
+version:        0.1.1.0
 license:        BSD3
 license-file:   LICENSE
 author:         Manuel Chakravarty, Gabriele Keller, Roman Leshchinskiy, Don Stewart
