diff --git a/Lexer.hs b/Lexer.hs
--- a/Lexer.hs
+++ b/Lexer.hs
@@ -1,6 +1,6 @@
 -- 
 -- Copyright (c) 2005-2008 Don Stewart - http://www.cse.unsw.edu.au/~dons
--- Copyright (c) 2008 Galen Huntington
+-- Copyright (c) 2008, 2019 Galen Huntington
 -- 
 -- This program is free software; you can redistribute it and/or
 -- modify it under the terms of the GNU General Public License as
diff --git a/README.md b/README.md
deleted file mode 100644
--- a/README.md
+++ /dev/null
@@ -1,89 +0,0 @@
-
-##  hmp3-ng
-
-The `hmp3` music player, written in Haskell, dates to 2005, and has a
-curses-based interface which can be used in an ordinary text terminal.
-But it has become abandonware: the last update was in June 2008,
-and it no longer builds with today's Haskell and standard libraries.
-
-This repository is a work in progress to resurrect this software.
-
-The original Darcs repo has vanished from the Internet.  However, I
-have a copy I checked out in 2008 (to hack on!) with all the patches
-through version 1.5.1 (the latest is 1.5.2.1, which I had at one point
-but cannot find), and Hackage hosts tarballs for several versions.
-
-*  I used [darcs-to-git](https://github.com/purcell/darcs-to-git)
-to port to Git.
-
-*  I added commits for the changes in the two later published versions.
-These were fairly small, the bulk being the regeneration of the
-`configure` file using a newer version of GNU `autoconf`.
-
-*  I updated the code to compile under modern GHC (8.6.5 as of this
-writing) and libraries.  Some code could not be directly ported,
-mainly low-level optimizations, and so was replaced.
-
-*  There is a GitHub issue tracker to cover other problems and
-planned changes.
-
-*  I have added support for building with Stack.
-
-*  All C code is removed.  There is still some use of the FFI.
-
-*  Work on other features and changes, and documentation, is ongoing.
-
-I have also made a few changes and additions to the key bindings per
-my preference.
-
-I am still working out the flaws.  Let me know if there are problems.
-
-
-##  Installation
-
-Either `cabal install` or `stack install` will build a binary.
-You will need to have `mpg321` installed, which is free software
-and widely available in package managers.  Alternatively, `mpg123`
-can be used by compiling with the `-DMPG123` option, but, while your
-mileage may vary, in my experience it doesn't work as well.
-
-The build depends on the package `hscurses`, which in turn requires
-curses dev files.  In Ubuntu/Debian, for example, these can be gotten
-by installing `libncurses5-dev`.
-
-
-##  Use
-
-The `hmp3` executable is called with arguments containing a list of mp3
-files or directories of mp3 files.  With no arguments, it will use the
-playlist from the last time it was run, which is stored in `~/.hmp3db`.
-
-```
-$ hmp3 ~/Music ~/Downloads/La-La.mp3
-$ hmp3
-```
-
-Once running, `hmp3` is controlled by fairly intuitive key commands.
-`h` shows a help menu, and `q` quits.
-
-A color scheme can be specified by writing out a `Config { .. }`
-value in `~/.hmp3`.  See `Style.hs` for the definition.  The `l`
-command reloads this configuration.
-
-
-##  Original authorship list
-
-```
-License:
-    GPL
-
-Author:
-    Don Stewart, Tue Jan 15 15:16:55 PST 2008
-
-Contributors:
-    Samuel Bronson
-    Stefan Wehr
-    Tomasz Zielonka
-    David Himmelstrup
-```
-
diff --git a/UI.hs b/UI.hs
--- a/UI.hs
+++ b/UI.hs
@@ -428,10 +428,12 @@
         PlayModes modes = draw a b c d
         PVersion ver    = draw a b c d
 
-        gap     = x - padding - P.length inf - modlen - P.length time - P.length ver
-        gapl    = gap `div` 2
-        gapr    = gap - gapl
-        padding = 3
+        lsize   = 1 + P.length inf
+        rsize   = 2 + P.length time + P.length ver
+        side    = (x - modlen) `div` 2
+        gap     = x - modlen - lsize - rsize
+        gapl    = 1 `max` ((side - lsize) `min` gap)
+        gapr    = 1 `max` (gap - gapl)
         modlen  = length modes
         space   = spaces 1
         hl      = titlebar . config $ c
@@ -683,7 +685,8 @@
                    if P.null (id3title ti)
                         then []
                         else [": ", id3title ti]
-    x  -> [P.pack $ show x]
+    Paused  -> ["paused"]
+    Stopped -> ["stopped"]
 
 displayWidth :: String -> Int
 displayWidth = sum . map charWidth
diff --git a/Utils.hs b/Utils.hs
--- a/Utils.hs
+++ b/Utils.hs
@@ -49,6 +49,7 @@
 
 import System.IO.Unsafe         (unsafePerformIO)
 import Text.Printf (printf)
+import Control.Monad.Fail as Fail
 
 ------------------------------------------------------------------------
 
@@ -159,10 +160,10 @@
 ------------------------------------------------------------------------
 
 -- | 'readM' behaves like read, but catches failure in a monad.
-readM :: (Monad m, Read a) => String -> m a
+readM :: (MonadFail m, Read a) => String -> m a
 readM s = case [x | (x,t) <- {-# SCC "Serial.readM.reads" #-} reads s    -- bad!
                , ("","")  <- lex t] of
         [x] -> return x
-        []  -> fail "Serial.readM: no parse"
-        _   -> fail "Serial.readM: ambiguous parse"
+        []  -> Fail.fail "Serial.readM: no parse"
+        _   -> Fail.fail "Serial.readM: ambiguous parse"
 
diff --git a/hmp3-ng.cabal b/hmp3-ng.cabal
--- a/hmp3-ng.cabal
+++ b/hmp3-ng.cabal
@@ -1,50 +1,68 @@
-cabal-version:       >= 1.6
+cabal-version: 1.12
 
-name:                hmp3-ng
-version:             2.7.1
-homepage:            https://github.com/galenhuntington/hmp3-ng
-license:             GPL
-license-file:        LICENSE
-author:              Don Stewart, Galen Huntington
-maintainer:          Galen Huntington
-category:            Sound
-synopsis:            A 2019 fork of an ncurses mp3 player written in Haskell
-description:
-    An mp3 player with a curses frontend. Playlists are populated by
-    passing directory names on the commandline, and saved to the
-    ~/.hmp3db database. Type 'h' to display the help page.  Colours may
-    be configured at runtime by editing the "~/.hmp3" file.
-build-type:          Simple
-extra-source-files:  Keymap.hs-boot README.md
+-- This file has been generated from package.yaml by hpack version 0.31.2.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: ba3e589b15902bfca771494be6b3c4a6bf552465aae7c116b6296d23b31a887e
 
+name:           hmp3-ng
+version:        2.7.3
+synopsis:       A 2019 fork of an ncurses mp3 player written in Haskell
+description:    An mp3 player with a curses frontend. Playlists are populated by
+                passing directory names on the commandline, and saved to the
+                ~/.hmp3db database. Type 'h' to display the help page.  Colours may
+                be configured at runtime by editing the "~/.hmp3" file.
+category:       Sound
+homepage:       https://github.com/galenhuntington/hmp3-ng#readme
+bug-reports:    https://github.com/galenhuntington/hmp3-ng/issues
+author:         Don Stewart, Galen Huntington
+maintainer:     Galen Huntington
+license:        GPL
+license-file:   LICENSE
+build-type:     Simple
+
 source-repository head
   type: git
   location: https://github.com/galenhuntington/hmp3-ng
 
 executable hmp3
-    build-depends:     unix >= 2.7,
-                       zlib >= 0.4,
-                       binary >= 0.4,
-                       pcre-light >= 0.3,
-                       mersenne-random >= 1.0.0.1,
-                       base >= 4 && < 5,
-                       bytestring >= 0.10,
-                       containers,
-                       array,
-                       clock,
-                       directory,
-                       process,
-                       utf8-string,
-                       hscurses,
-                       mtl,
-                       monad-extras
-
-    ghc-options:         -Wall -funbox-strict-fields -threaded -Wno-unused-do-bind
-    main-is:             Main.hs
-    other-modules:       Config Core FastIO Keymap
-                         Lexer Lexers State Style Syntax Tree UI Utils
-                         Paths_hmp3_ng
-
-    extensions:          ScopedTypeVariables, OverloadedStrings,
-                         BlockArguments, BangPatterns
-    extra-libraries:     ncursesw
+  main-is: Main.hs
+  other-modules:
+      Config
+      Core
+      FastIO
+      Keymap
+      Lexer
+      Lexers
+      State
+      Style
+      Syntax
+      Tree
+      UI
+      Utils
+      Paths_hmp3_ng
+  hs-source-dirs:
+      ./.
+  default-extensions: BangPatterns BlockArguments NondecreasingIndentation OverloadedStrings ScopedTypeVariables
+  ghc-options: -Wall -funbox-strict-fields -threaded -Wno-unused-do-bind
+  extra-libraries:
+      ncursesw
+  build-depends:
+      array
+    , base >=4 && <5
+    , binary >=0.4
+    , bytestring >=0.10
+    , clock
+    , containers
+    , directory
+    , hscurses
+    , mersenne-random >=1.0.0.1
+    , monad-extras
+    , mtl
+    , pcre-light >=0.3
+    , process
+    , unix >=2.7
+    , utf8-string
+    , zlib >=0.4
+  default-language: Haskell2010
