diff --git a/FileBytes.hs b/FileBytes.hs
deleted file mode 100644
--- a/FileBytes.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-module FileBytes where
-
-import Data.Word (Word8)
-import Foreign.Marshal.Array (allocaArray, peekArray, pokeArray)
-import System.IO (hFileSize, Handle, hGetBuf, hPutBuf, openBinaryFile, hClose,
-                  IOMode(ReadMode, WriteMode))
-
--- ----------------------------------------------------------------------
--- supporting utf-8 stuff
--- ----------------------------------------------------------------------
-
-readFileBytes :: FilePath -> IO [Word8]
-readFileBytes f =
-  do h <- openBinaryFile f ReadMode
-     hsize <- fromIntegral `fmap` hFileSize h
-     hGetBytes h hsize
-
-writeFileBytes :: FilePath -> [Word8] -> IO ()
-writeFileBytes f ws =
- do h <- openBinaryFile f WriteMode
-    hPutBytes h (length ws) ws
-    hClose h
-
-hGetBytes :: Handle -> Int -> IO [Word8]
-hGetBytes h c = allocaArray c $ \p ->
-                  do c' <- hGetBuf h p c
-                     peekArray c' p
-
-hPutBytes :: Handle -> Int -> [Word8] -> IO ()
-hPutBytes h c ws = allocaArray c $ \p ->
-                     do pokeArray p ws
-                        hPutBuf h p c
-
diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,2 @@
-PROGRAMS := hexdump-utf8
-
-$(PROGRAMS): % : %.hs
-	ghc --make -Wall $@
+all:
+	runhaskell Setup build
diff --git a/uhexdump.cabal b/uhexdump.cabal
--- a/uhexdump.cabal
+++ b/uhexdump.cabal
@@ -1,5 +1,5 @@
 name:                uhexdump
-version:             0.1
+version:             0.2
 synopsis:            hex dumper for UTF-8 text
 description:         hex dumper for UTF-8 text
 category:            Text
@@ -7,7 +7,7 @@
 license-file:        LICENSE
 author:              Eric Kow
 maintainer:          <E.Y.Kow@brighton.ac.uk>
-build-Depends:       base, utf8-string
+build-Depends:       base, bytestring, utf8-string
 build-type:          Simple
 
 executable:          uhexdump
diff --git a/uhexdump.hs b/uhexdump.hs
--- a/uhexdump.hs
+++ b/uhexdump.hs
@@ -3,25 +3,24 @@
 -- TODO
 -- ----
 -- o figure out how to use utf8-string for the decoding with
---   errors [this lets us get rid of our FileBytes and UTF8
---   modules
+--   errors [this lets us get rid of the UTF8 module]
 -- o colourise badly encoded characters (switch to something
 --   easier to type than guillmets)
 -- o fancy flags
 
 import Control.Monad (forM_)
 import Data.Bits
+import qualified Data.ByteString as B
 import Data.Char (isPrint)
 import Data.List (intersperse, inits)
 import Data.Word (Word8)
 import System.Environment (getArgs)
-import System.IO (stdin, hFileSize, openBinaryFile, hClose, IOMode(ReadMode))
+import System.IO (stdin, openBinaryFile, hClose, IOMode(ReadMode))
 import qualified Numeric as N
 import Prelude hiding (putStrLn, putStr)
 
 import System.IO.UTF8
 import UTF8 hiding (decode)
-import FileBytes
 
 main :: IO ()
 main =
@@ -30,18 +29,17 @@
            [] -> return [stdin]
            _  -> mapM (\f -> openBinaryFile f ReadMode) args
     forM_ hs $ \h ->
-     do hsize <- fromIntegral `fmap` hFileSize h
-        bs <- hGetBytes h hsize
+     do bs <- B.unpack `fmap` B.hGetContents h
         putStr $ unlines $
           map (dump h_size) $ clump c_size $ decode bs
         hClose h
  where
-  h_size = 60
+  h_size = 55
   c_size = 16
 
 dump :: Int -> [HexChar] -> String
 dump hex_sz hs =
-  hex_part ++ padding ++ char_part -- hex_part ++ char_part
+  hex_part ++ padding ++ char_part
  where
   hex_part  = (foldr (.) id $
                 intersperse (showChar ' ') $
@@ -66,9 +64,9 @@
  where
   iter acc [] = reverse acc
   iter acc cs =
-   case break toobig (inits cs) of
-        ([[]],_)  -> next 1           -- all too big
-        (_ ,[])   -> iter (cs:acc) [] -- none too big
+   case break toobig (drop 1 $ inits cs) of
+        ([],_)    -> next 1           -- first too big
+        (_,[])    -> iter (cs:acc) [] -- none too big
         (_,(x:_)) -> next (length x)
    where next n = iter (take n cs : acc) (drop n cs)
   toobig x = (sum . intersperse sep . map f) x > l
