diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,18 @@
-5.2.12
-  - unreleased
+5.3
+  - Upgraded QuickCheck dependency to 2.7
+  - The standard IO Config (standardIOConfig) was overriding any provided application config.
+    In addition, the inputFd and outputFd could not be changed if mkVty was used.
+    Fixed.
+  - Correct handling of display attributes at end of line. The output attributes are set to default
+    at the end of content for the line and at the start of a new line.  Previously the current
+    attribute would extend to the next start of content. This was odd to reason about and was the
+    cause of https://github.com/coreyoconnor/vty/issues/76
+    IIRC Yi requires the old behavior to display the selection region correctly.
+  - shutdown of the input thread is now performed using killThread and synchronization on an MVar.
+    For correct handling of the terminal read vmin and vtime the read must be a blocking read on an
+    OS thread. This places a threadWaitRead, which will be interrupted by the killThread, prior to
+    the uninterruptable read. An alternative would be to re-import the read foreign call as
+    interruptable.
 
 5.2.11
   - deepseq bounds increased for tests.
diff --git a/Demo.hs b/Demo.hs
--- a/Demo.hs
+++ b/Demo.hs
@@ -20,7 +20,7 @@
 main = do
     vty <- if True -- change to false for emacs-like input processing
             then mkVty def
-            else mkVty (def { vmin = Just 2, vtime = Just 100 } )
+            else mkVty (def { vmin = Just 2, vtime = Just 300 } )
     _ <- execRWST (vtyInteract False) vty Seq.empty
     shutdown vty
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,8 +1,20 @@
-vty is a terminal interface library.
+[![Build Status](https://travis-ci.org/coreyoconnor/vty.png)](https://travis-ci.org/coreyoconnor/vty)
 
-Project is hosted on github.com: https://github.com/coreyoconnor/vty
+`vty` is a terminal interface library.
 
+This project is hosted on github.com: https://github.com/coreyoconnor/vty
+
+Install via `git` with:
+
+```
 git clone git://github.com/coreyoconnor/vty.git
+```
+
+Install via `cabal` with:
+
+```
+cabal install vty
+```
 
 # Features
 
diff --git a/dist/build/verify-attribute-opsStub/verify-attribute-opsStub-tmp/verify-attribute-opsStub.hs b/dist/build/verify-attribute-opsStub/verify-attribute-opsStub-tmp/verify-attribute-opsStub.hs
deleted file mode 100644
--- a/dist/build/verify-attribute-opsStub/verify-attribute-opsStub-tmp/verify-attribute-opsStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyAttributeOps ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-crop-span-generationStub/verify-crop-span-generationStub-tmp/verify-crop-span-generationStub.hs b/dist/build/verify-crop-span-generationStub/verify-crop-span-generationStub-tmp/verify-crop-span-generationStub.hs
deleted file mode 100644
--- a/dist/build/verify-crop-span-generationStub/verify-crop-span-generationStub-tmp/verify-crop-span-generationStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyCropSpanGeneration ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-display-attributesStub/verify-display-attributesStub-tmp/verify-display-attributesStub.hs b/dist/build/verify-display-attributesStub/verify-display-attributesStub-tmp/verify-display-attributesStub.hs
deleted file mode 100644
--- a/dist/build/verify-display-attributesStub/verify-display-attributesStub-tmp/verify-display-attributesStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyDisplayAttributes ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-empty-image-propsStub/verify-empty-image-propsStub-tmp/verify-empty-image-propsStub.hs b/dist/build/verify-empty-image-propsStub/verify-empty-image-propsStub-tmp/verify-empty-image-propsStub.hs
deleted file mode 100644
--- a/dist/build/verify-empty-image-propsStub/verify-empty-image-propsStub-tmp/verify-empty-image-propsStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyEmptyImageProps ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-eval-terminfo-capsStub/verify-eval-terminfo-capsStub-tmp/verify-eval-terminfo-capsStub.hs b/dist/build/verify-eval-terminfo-capsStub/verify-eval-terminfo-capsStub-tmp/verify-eval-terminfo-capsStub.hs
deleted file mode 100644
--- a/dist/build/verify-eval-terminfo-capsStub/verify-eval-terminfo-capsStub-tmp/verify-eval-terminfo-capsStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyEvalTerminfoCaps ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-image-opsStub/verify-image-opsStub-tmp/verify-image-opsStub.hs b/dist/build/verify-image-opsStub/verify-image-opsStub-tmp/verify-image-opsStub.hs
deleted file mode 100644
--- a/dist/build/verify-image-opsStub/verify-image-opsStub-tmp/verify-image-opsStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyImageOps ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-image-transStub/verify-image-transStub-tmp/verify-image-transStub.hs b/dist/build/verify-image-transStub/verify-image-transStub-tmp/verify-image-transStub.hs
deleted file mode 100644
--- a/dist/build/verify-image-transStub/verify-image-transStub-tmp/verify-image-transStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyImageTrans ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-inlineStub/verify-inlineStub-tmp/verify-inlineStub.hs b/dist/build/verify-inlineStub/verify-inlineStub-tmp/verify-inlineStub.hs
deleted file mode 100644
--- a/dist/build/verify-inlineStub/verify-inlineStub-tmp/verify-inlineStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyInline ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-layers-span-generationStub/verify-layers-span-generationStub-tmp/verify-layers-span-generationStub.hs b/dist/build/verify-layers-span-generationStub/verify-layers-span-generationStub-tmp/verify-layers-span-generationStub.hs
deleted file mode 100644
--- a/dist/build/verify-layers-span-generationStub/verify-layers-span-generationStub-tmp/verify-layers-span-generationStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyLayersSpanGeneration ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-parse-terminfo-capsStub/verify-parse-terminfo-capsStub-tmp/verify-parse-terminfo-capsStub.hs b/dist/build/verify-parse-terminfo-capsStub/verify-parse-terminfo-capsStub-tmp/verify-parse-terminfo-capsStub.hs
deleted file mode 100644
--- a/dist/build/verify-parse-terminfo-capsStub/verify-parse-terminfo-capsStub-tmp/verify-parse-terminfo-capsStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyParseTerminfoCaps ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-simple-span-generationStub/verify-simple-span-generationStub-tmp/verify-simple-span-generationStub.hs b/dist/build/verify-simple-span-generationStub/verify-simple-span-generationStub-tmp/verify-simple-span-generationStub.hs
deleted file mode 100644
--- a/dist/build/verify-simple-span-generationStub/verify-simple-span-generationStub-tmp/verify-simple-span-generationStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifySimpleSpanGeneration ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-terminalStub/verify-terminalStub-tmp/verify-terminalStub.hs b/dist/build/verify-terminalStub/verify-terminalStub-tmp/verify-terminalStub.hs
deleted file mode 100644
--- a/dist/build/verify-terminalStub/verify-terminalStub-tmp/verify-terminalStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyOutput ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-using-mock-terminalStub/verify-using-mock-terminalStub-tmp/verify-using-mock-terminalStub.hs b/dist/build/verify-using-mock-terminalStub/verify-using-mock-terminalStub-tmp/verify-using-mock-terminalStub.hs
deleted file mode 100644
--- a/dist/build/verify-using-mock-terminalStub/verify-using-mock-terminalStub-tmp/verify-using-mock-terminalStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyUsingMockTerminal ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/dist/build/verify-utf8-widthStub/verify-utf8-widthStub-tmp/verify-utf8-widthStub.hs b/dist/build/verify-utf8-widthStub/verify-utf8-widthStub-tmp/verify-utf8-widthStub.hs
deleted file mode 100644
--- a/dist/build/verify-utf8-widthStub/verify-utf8-widthStub-tmp/verify-utf8-widthStub.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-module Main ( main ) where
-import Distribution.Simple.Test.LibV09 ( stubMain )
-import VerifyUtf8Width ( tests )
-main :: IO ()
-main = stubMain tests
diff --git a/src/Graphics/Vty/Config.hs b/src/Graphics/Vty/Config.hs
--- a/src/Graphics/Vty/Config.hs
+++ b/src/Graphics/Vty/Config.hs
@@ -139,8 +139,8 @@
         , vtime         = vtime c1    <|> vtime c0
         , debugLog      = debugLog c1 <|> debugLog c0
         , inputMap      = inputMap c0 <>  inputMap c1
-        , inputFd      = inputFd c1 <|> inputFd c1
-        , outputFd     = outputFd c1 <|> outputFd c1
+        , inputFd      = inputFd c1 <|> inputFd c0
+        , outputFd     = outputFd c1 <|> outputFd c0
         , termName      = termName c1 <|> termName c0
         }
 
@@ -151,8 +151,8 @@
 userConfig = do
     configFile <- (mappend <$> getAppUserDataDirectory "vty" <*> pure "/config") >>= parseConfigFile
     overrideConfig <- maybe (return def) parseConfigFile =<< getEnv "VTY_CONFIG_FILE"
-    base <- (<> configFile <> overrideConfig) <$> standardIOConfig
-    (mappend base) <$> overrideEnvConfig
+    let base = configFile <> overrideConfig
+    mappend base <$> overrideEnvConfig
 
 overrideEnvConfig :: IO Config
 overrideEnvConfig = do
diff --git a/src/Graphics/Vty/Image.hs b/src/Graphics/Vty/Image.hs
--- a/src/Graphics/Vty/Image.hs
+++ b/src/Graphics/Vty/Image.hs
@@ -184,7 +184,8 @@
                 where w = imageWidth  i + l
                       h = imageHeight i
 
--- | translates an image by padding or cropping the top and left.
+-- | translates an image by padding or cropping the left and top. First param is amount to translate
+-- left. Second param is amount to translate top.
 --
 -- This can have an unexpected effect: Translating an image to less than (0,0) then to greater than
 -- (0,0) will crop the image.
diff --git a/src/Graphics/Vty/Inline/Unsafe.hs b/src/Graphics/Vty/Inline/Unsafe.hs
--- a/src/Graphics/Vty/Inline/Unsafe.hs
+++ b/src/Graphics/Vty/Inline/Unsafe.hs
@@ -61,7 +61,7 @@
     mout <- readIORef globalOutput
     out <- case mout of
         Nothing -> do
-            config <- (<>) <$> userConfig <*> mkDupeConfig
+            config <- mappend <$> userConfig <*> mkDupeConfig
             out <- outputForConfig config
             writeIORef globalOutput (Just out)
             return out
diff --git a/src/Graphics/Vty/Input.hs b/src/Graphics/Vty/Input.hs
--- a/src/Graphics/Vty/Input.hs
+++ b/src/Graphics/Vty/Input.hs
@@ -145,6 +145,8 @@
 #if !(MIN_VERSION_base(4,8,0))
 import Data.Functor ((<$>))
 import Data.Monoid
+#else
+import Data.Monoid ((<>))
 #endif
 
 -- | Set up the terminal with file descriptor `inputFd` for input.  Returns a 'Input'.
@@ -201,4 +203,4 @@
             _ <- installHandler continueProcess Ignore Nothing
             unsetAttrs
         }
-inputForConfig config = mappend config <$> standardIOConfig >>= inputForConfig
+inputForConfig config = (<> config) <$> standardIOConfig >>= inputForConfig
diff --git a/src/Graphics/Vty/Input/Loop.hs b/src/Graphics/Vty/Input/Loop.hs
--- a/src/Graphics/Vty/Input/Loop.hs
+++ b/src/Graphics/Vty/Input/Loop.hs
@@ -19,6 +19,7 @@
 
 import Control.Applicative
 import Control.Concurrent
+import Control.Exception (mask, try, SomeException)
 import Control.Lens
 import Control.Monad (when, mzero, forM_)
 import Control.Monad.IO.Class (liftIO)
@@ -65,7 +66,6 @@
     { _unprocessedBytes :: String
     , _appliedConfig :: Config
     , _inputBuffer :: InputBuffer
-    , _stopRequestRef :: IORef Bool
     , _classifier :: String -> KClass
     }
 
@@ -88,7 +88,7 @@
     validEvents <- many parseEvent
     forM_ validEvents emit
     dropInvalid
-    stopIfRequested <|> loopInputProcessor
+    loopInputProcessor
 
 addBytesToProcess :: String -> InputM ()
 addBytesToProcess block = unprocessedBytes <>= block
@@ -115,6 +115,11 @@
     bufferPtr <- use $ inputBuffer.ptr
     maxBytes  <- use $ inputBuffer.size
     stringRep <- liftIO $ do
+        -- The killThread used in shutdownInput will not interrupt the foreign call fdReadBuf uses
+        -- this provides a location to be interrupted prior to the foreign call. If there is input
+        -- on the FD then the fdReadBuf will return in a finite amount of time due to the vtime
+        -- terminal setting.
+        threadWaitRead fd
         bytesRead <- fdReadBuf fd bufferPtr (fromIntegral maxBytes)
         if bytesRead > 0
         then fmap (map $ chr . fromIntegral) $ peekArray (fromIntegral bytesRead) bufferPtr
@@ -147,18 +152,12 @@
         logMsg "dropping input bytes"
         unprocessedBytes .= []
 
-stopIfRequested :: InputM ()
-stopIfRequested = do
-    True <- (liftIO . readIORef) =<< use stopRequestRef
-    return ()
-
-runInputProcessorLoop :: ClassifyMap -> Input -> IORef Bool -> IO ()
-runInputProcessorLoop classifyTable input stopFlag = do
+runInputProcessorLoop :: ClassifyMap -> Input -> IO ()
+runInputProcessorLoop classifyTable input = do
     let bufferSize = 1024
     allocaArray bufferSize $ \(bufferPtr :: Ptr Word8) -> do
         s0 <- InputState [] <$> readIORef (_configRef input)
                             <*> pure (InputBuffer bufferPtr bufferSize)
-                            <*> pure stopFlag
                             <*> pure (classify classifyTable)
         runReaderT (evalStateT loopInputProcessor s0) input
 
@@ -192,15 +191,23 @@
     let Just fd = inputFd config
     setFdOption fd NonBlockingRead False
     applyConfig fd config
-    stopFlag <- newIORef False
+    stopSync <- newEmptyMVar
     input <- Input <$> newChan
-                   <*> pure (writeIORef stopFlag True)
+                   <*> pure (return ())
                    <*> newIORef config
                    <*> maybe (return Nothing)
                              (\f -> Just <$> openFile f AppendMode)
                              (debugLog config)
     logInitialInputState input classifyTable
-    _ <- forkOS $ runInputProcessorLoop classifyTable input stopFlag
-    return input
+    inputThread <- forkOSFinally (runInputProcessorLoop classifyTable input)
+                                 (\_ -> putMVar stopSync ())
+    let killAndWait = do
+          killThread inputThread
+          takeMVar stopSync
+    return $ input { shutdownInput = killAndWait }
 
 foreign import ccall "vty_set_term_timing" setTermTiming :: Fd -> Int -> Int -> IO ()
+
+forkOSFinally :: IO a -> (Either SomeException a -> IO ()) -> IO ThreadId
+forkOSFinally action and_then =
+  mask $ \restore -> forkOS $ try (restore action) >>= and_then
diff --git a/src/Graphics/Vty/Output.hs b/src/Graphics/Vty/Output.hs
--- a/src/Graphics/Vty/Output.hs
+++ b/src/Graphics/Vty/Output.hs
@@ -1,11 +1,5 @@
-{-# LANGUAGE CPP #-}
 {-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE NamedFieldPuns #-}
-
-#ifndef MIN_VERSION_base
-#defined MIN_VERSION_base(x,y,z) 1
-#endif
-
 --  | Output interface.
 --
 --  Access to the current terminal or a specific terminal device.
@@ -13,8 +7,8 @@
 --  See also:
 --
 --  1. "Graphics.Vty.Output": This instantiates an abtract interface to the terminal interface based
---  on the TERM and COLORTERM environment variables. 
---  
+--  on the TERM and COLORTERM environment variables.
+--
 --  2. "Graphics.Vty.Output.Interface": Defines the generic interface all terminals need to implement.
 --
 --  3. "Graphics.Vty.Output.TerminfoBased": Defines a terminal instance that uses terminfo for all
@@ -23,7 +17,7 @@
 --
 --  4. "Graphics.Vty.Output.XTermColor": This module contains an interface suitable for xterm-like
 --  terminals. These are the terminals where TERM == xterm. This does use terminfo for as many
---  control codes as possible. 
+--  control codes as possible.
 module Graphics.Vty.Output ( module Graphics.Vty.Output
                            , Output(..) -- \todo hide constructors
                            , AssumedState(..)
@@ -33,7 +27,6 @@
                            )
     where
 
-
 import Graphics.Vty.Prelude
 
 import Graphics.Vty.Config
@@ -47,10 +40,7 @@
 import Control.Monad.Trans
 
 import Data.List (isPrefixOf)
-
-#if !(MIN_VERSION_base(4,8,0))
-import Data.Monoid (mappend)
-#endif
+import Data.Monoid ((<>))
 
 -- | Returns a `Output` for the terminal specified in `Config`
 --
@@ -76,9 +66,9 @@
         -- Not an xterm-like terminal. try for generic terminfo.
         else TerminfoBased.reserveTerminal termName fd
     return t
-outputForConfig config = mappend config <$> standardIOConfig >>= outputForConfig
+outputForConfig config = (<> config) <$> standardIOConfig >>= outputForConfig
 
--- | Sets the cursor position to the given output column and row. 
+-- | Sets the cursor position to the given output column and row.
 --
 -- This is not necessarially the same as the character position with the same coordinates.
 -- Characters can be a variable number of columns in width.
@@ -98,11 +88,10 @@
     bounds <- displayBounds t
     dc <- displayContext t bounds
     liftIO $ outputByteBuffer t $ writeToByteString $ writeHideCursor dc
-    
+
 -- | Shows the cursor
 showCursor :: MonadIO m => Output -> m ()
 showCursor t = do
     bounds <- displayBounds t
     dc <- displayContext t bounds
     liftIO $ outputByteBuffer t $ writeToByteString $ writeShowCursor dc
-
diff --git a/src/Graphics/Vty/Output/Interface.hs b/src/Graphics/Vty/Output/Interface.hs
--- a/src/Graphics/Vty/Output/Interface.hs
+++ b/src/Graphics/Vty/Output/Interface.hs
@@ -149,7 +149,6 @@
                                   (Vector.toList ops)
         -- build the Write corresponding to the output image
         out = (if manipCursor then writeHideCursor dc else mempty)
-              `mappend` writeDefaultAttr dc
               `mappend` writeOutputOps dc initialAttr diffs ops
               `mappend`
                 (case picCursor pic of
@@ -167,30 +166,31 @@
     writeIORef (assumedStateRef $ contextDevice dc) as'
 
 writeOutputOps :: DisplayContext -> FixedAttr -> [Bool] -> DisplayOps -> Write
-writeOutputOps dc inFattr diffs ops =
-    let (_, out, _, _) = Vector.foldl' writeOutputOps' 
-                                       (0, mempty, inFattr, diffs) 
+writeOutputOps dc initialAttr diffs ops =
+    let (_, out, _) = Vector.foldl' writeOutputOps'
+                                       (0, mempty, diffs)
                                        ops
     in out
     where 
-        writeOutputOps' (y, out, fattr, True : diffs') spanOps
-            = let (spanOut, fattr') = writeSpanOps dc y fattr spanOps
-              in (y+1, out `mappend` spanOut, fattr', diffs')
-        writeOutputOps' (y, out, fattr, False : diffs') _spanOps
-            = (y + 1, out, fattr, diffs')
-        writeOutputOps' (_y, _out, _fattr, []) _spanOps
+        writeOutputOps' (y, out, True : diffs') spanOps
+            = let spanOut = writeSpanOps dc y initialAttr spanOps
+                  out' = out `mappend` spanOut
+              in (y+1, out', diffs')
+        writeOutputOps' (y, out, False : diffs') _spanOps
+            = (y + 1, out, diffs')
+        writeOutputOps' (_y, _out, []) _spanOps
             = error "vty - output spans without a corresponding diff."
 
-writeSpanOps :: DisplayContext -> Int -> FixedAttr -> SpanOps -> (Write, FixedAttr)
-writeSpanOps dc y inFattr spanOps =
+writeSpanOps :: DisplayContext -> Int -> FixedAttr -> SpanOps -> Write
+writeSpanOps dc y initialAttr spanOps =
     -- The first operation is to set the cursor to the start of the row
-    let start = writeMoveCursor dc 0 y
+    let start = writeMoveCursor dc 0 y `mappend` writeDefaultAttr dc
     -- then the span ops are serialized in the order specified
-    in Vector.foldl' (\(out, fattr) op -> case writeSpanOp dc op fattr of
-                                            (opOut, fattr') -> (out `mappend` opOut, fattr')
-                     )
-                     (start, inFattr)
-                     spanOps
+    in fst $ Vector.foldl' (\(out, fattr) op -> case writeSpanOp dc op fattr of
+                              (opOut, fattr') -> (out `mappend` opOut, fattr')
+                           )
+                           (start, initialAttr)
+                           spanOps
 
 writeSpanOp :: DisplayContext -> SpanOp -> FixedAttr -> (Write, FixedAttr)
 writeSpanOp dc (TextSpan attr _ _ str) fattr =
@@ -201,7 +201,7 @@
                `mappend` writeUtf8Text (T.encodeUtf8 $ TL.toStrict str)
     in (out, fattr')
 writeSpanOp _dc (Skip _) _fattr = error "writeSpanOp for Skip"
-writeSpanOp dc (RowEnd _) fattr = (writeRowEnd dc, fattr)
+writeSpanOp dc (RowEnd _) fattr = (writeDefaultAttr dc `mappend` writeRowEnd dc, fattr)
 
 -- | The cursor position is given in X,Y character offsets. Due to multi-column characters this
 -- needs to be translated to column, row positions.
diff --git a/src/Graphics/Vty/PictureToSpans.hs b/src/Graphics/Vty/PictureToSpans.hs
--- a/src/Graphics/Vty/PictureToSpans.hs
+++ b/src/Graphics/Vty/PictureToSpans.hs
@@ -221,8 +221,7 @@
         return ()
     return outOps
 
--- | Add the operations required to build a given image to the current set of row operations
--- returns the number of columns and rows contributed to the output.
+-- | Add the operations required to build a given image to the current set of row operations.
 startImageBuild :: Image -> BlitM s ()
 startImageBuild image = do
     outOfBounds <- isOutOfBounds image <$> get
diff --git a/test/Verify/Graphics/Vty/Output.hs b/test/Verify/Graphics/Vty/Output.hs
--- a/test/Verify/Graphics/Vty/Output.hs
+++ b/test/Verify/Graphics/Vty/Output.hs
@@ -1,5 +1,7 @@
 module Verify.Graphics.Vty.Output where
 
+import Control.Applicative ((<$>))
+
 import Graphics.Vty.Output.Mock
 
 import qualified Data.ByteString as BS
@@ -49,12 +51,11 @@
 
 compareMockOutput :: MockData -> String -> IO Result
 compareMockOutput mockData expectedStr = do
-    outBytes <- readIORef mockData >>= return . UTF8.toRep
-    let expectedBytes :: BS.ByteString = UTF8.toRep $ UTF8.fromString expectedStr
-    if outBytes /=  expectedBytes
-        then return $ failed { reason = "bytes\n" ++ show outBytes
+    outStr <- UTF8.toString <$> readIORef mockData
+    if outStr /=  expectedStr
+        then return $ failed { reason = "bytes\n" ++ outStr
                                       ++ "\nare not the expected bytes\n"
-                                      ++ show expectedBytes
+                                      ++ expectedStr
                              }
         else return succeeded
 
diff --git a/test/VerifyUsingMockTerminal.hs b/test/VerifyUsingMockTerminal.hs
--- a/test/VerifyUsingMockTerminal.hs
+++ b/test/VerifyUsingMockTerminal.hs
@@ -46,8 +46,8 @@
     -- The mock output string that represents the output bytes a single line containing the T
     -- string: Followed by h - 1 lines of a change to the background attribute and then the
     -- background character
-    let expected = "HD" ++ "MA" ++ replicate (fromEnum w) 'T'
-                 ++ concat (replicate (fromEnum h - 1) $ "MA" ++ replicate (fromEnum w) 'B')
+    let expected = "H" ++ "MDA" ++ replicate (fromEnum w) 'T'
+                 ++ concat (replicate (fromEnum h - 1) $ "MDA" ++ replicate (fromEnum w) 'B')
     compareMockOutput mockData expected
     
 manyTRows :: MockWindow -> Property
@@ -60,7 +60,7 @@
     outputPicture dc pic
     -- The UTF8 string that represents the output bytes is h repeats of a move, 'M', followed by an
     -- attribute change. 'A', followed by w 'T's
-    let expected = "HD" ++ concat (replicate (fromEnum h) $ "MA" ++ replicate (fromEnum w) 'T')
+    let expected = "H" ++ concat (replicate (fromEnum h) $ "MDA" ++ replicate (fromEnum w) 'T')
     compareMockOutput mockData expected
 
 manyTRowsCroppedWidth :: MockWindow -> Property
@@ -73,7 +73,7 @@
     outputPicture dc pic
     -- The UTF8 string that represents the output bytes is h repeats of a move, 'M', followed by an
     -- attribute change. 'A', followed by w 'T's
-    let expected = "HD" ++ concat (replicate (fromEnum h) $ "MA" ++ replicate (fromEnum w) 'T')
+    let expected = "H" ++ concat (replicate (fromEnum h) $ "MDA" ++ replicate (fromEnum w) 'T')
     compareMockOutput mockData expected
 
 manyTRowsCroppedHeight :: MockWindow -> Property
@@ -86,7 +86,7 @@
     outputPicture dc pic
     -- The UTF8 string that represents the output bytes is h repeats of a move, 'M', followed by an
     -- attribute change. 'A', followed by w count 'T's
-    let expected = "HD" ++ concat (replicate (fromEnum h) $ "MA" ++ replicate (fromEnum w) 'T')
+    let expected = "H" ++ concat (replicate (fromEnum h) $ "MDA" ++ replicate (fromEnum w) 'T')
     compareMockOutput mockData expected
 
 tests :: IO [Test]
diff --git a/vty.cabal b/vty.cabal
--- a/vty.cabal
+++ b/vty.cabal
@@ -1,5 +1,5 @@
 name:                vty
-version:             5.2.11
+version:             5.3
 license:             BSD3
 license-file:        LICENSE
 author:              AUTHORS
@@ -8,30 +8,33 @@
 category:            User Interfaces
 synopsis:            A simple terminal UI library
 description:
-  vty is terminal GUI library in the niche of ncurses.  It is intended to be easy to use, have no
-  confusing corner cases, and good support for common terminal types.
+  vty is terminal GUI library in the niche of ncurses. It is intended to
+  be easy to use, have no confusing corner cases, and good support for
+  common terminal types.
   .
-  Included in the source distribution is a program test/interactive_terminal_test.hs that
-  demonstrates the various features. 
+  Included in the source distribution is a program
+  test/interactive_terminal_test.hs that demonstrates the various
+  features.
   .
   Developers: See the "Graphics.Vty" module.
   .
   Users: See the "Graphics.Vty.Config" module.
   .
-  If your terminal is not behaving as expected the results of the vty-interactive-terminal-test
-  executable should be sent to the Vty maintainter to aid in debugging the issue.
+  If your terminal is not behaving as expected the results of the
+  vty-interactive-terminal-test executable should be sent to the Vty
+  maintainter to aid in debugging the issue.
   .
-  Notable infelicities: Assumes UTF-8 character encoding support by the terminal; Poor signal
-  handling; Requires terminfo.
+  Notable infelicities: Assumes UTF-8 character encoding support by the
+  terminal; Poor signal handling; Requires terminfo.
   .
-  Project is hosted on github.com: https:\/\/github.com\/coreyoconnor\/vty
+  This project is hosted on github.com: <https://github.com/coreyoconnor/vty>
   .
-  git clone git:\/\/github.com\/coreyoconnor\/vty.git
+  > git clone git://github.com/coreyoconnor/vty.git
   .
   &#169; 2006-2007 Stefan O'Rear; BSD3 license.
   .
   &#169; Corey O'Connor; BSD3 license.
-cabal-version:       >= 1.18.0
+cabal-version:       >= 1.20.0
 build-type:          Simple
 data-files:          README.md,
                      TODO,
@@ -136,8 +139,8 @@
   hs-source-dirs:      test
   test-module:         VerifyAttributeOps
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -168,8 +171,8 @@
                        Verify.Graphics.Vty.Output
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -201,8 +204,8 @@
                        Verify.Graphics.Vty.Output
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -235,8 +238,8 @@
                        Verify.Graphics.Vty.Span
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -261,8 +264,8 @@
   other-modules:       Verify
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -288,8 +291,8 @@
                        Verify.Graphics.Vty.Output
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        blaze-builder >= 0.3.3.2 && < 0.5,
@@ -318,8 +321,8 @@
                        Verify.Graphics.Vty.Image
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -346,8 +349,8 @@
                        Verify.Graphics.Vty.Image
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -373,8 +376,8 @@
                        Verify.Graphics.Vty.Output
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -401,8 +404,8 @@
                        Verify.Graphics.Vty.Output
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -433,8 +436,8 @@
                        Verify.Graphics.Vty.Span
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -465,8 +468,8 @@
                        Verify.Graphics.Vty.Span
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -497,8 +500,8 @@
                        Verify.Graphics.Vty.Span
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -523,8 +526,8 @@
   other-modules:       Verify
 
   build-depends:       vty,
-                       Cabal >= 1.18,
-                       QuickCheck >= 2.4,
+                       Cabal >= 1.20,
+                       QuickCheck >= 2.7,
                        random >= 1.0 && < 1.2,
                        base >= 4 && < 5,
                        bytestring,
@@ -547,9 +550,9 @@
   main-is:             VerifyUsingMockInput.hs
 
   build-depends:       vty,
-                       Cabal >= 1.18,
+                       Cabal >= 1.20,
                        data-default >= 0.5.3,
-                       QuickCheck >= 2.4,
+                       QuickCheck >= 2.7,
                        smallcheck == 1.*,
                        quickcheck-assertions >= 0.1.1,
                        test-framework == 0.8.*,
@@ -580,10 +583,10 @@
   main-is:             VerifyConfig.hs
 
   build-depends:       vty,
-                       Cabal >= 1.18,
+                       Cabal >= 1.20,
                        data-default >= 0.5.3,
                        HUnit,
-                       QuickCheck >= 2.4,
+                       QuickCheck >= 2.7,
                        smallcheck == 1.*,
                        quickcheck-assertions >= 0.1.1,
                        test-framework == 0.8.*,
