diff --git a/Keymap.hs b/Keymap.hs
--- a/Keymap.hs
+++ b/Keymap.hs
@@ -182,7 +182,7 @@
         ['q'],   do b <- helpIsVisible ; if b then toggleHelp else quit Nothing)
     ,("Select and play next track",
         ['d'],   playNext >> jumpToPlaying)
-    ,("Cycle through normal, random and loop modes",
+    ,("Cycle through normal, random, and loop modes",
         ['m'],   nextMode)
     ,("Refresh the display",
         ['\^L'], UI.resetui)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@
 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
+*  There is a GitHub issue tracker to cover other problems and
 planned changes.
 
 *  I have added support for building with Stack.
diff --git a/Syntax.hs b/Syntax.hs
--- a/Syntax.hs
+++ b/Syntax.hs
@@ -136,7 +136,7 @@
 data Status = Stopped
             | Paused
             | Playing
-        deriving Eq
+        deriving (Eq, Show)
 
 data Mode = Normal | Loop | Random deriving (Eq,Bounded,Enum) -- for pred,succ
 
diff --git a/UI.hs b/UI.hs
--- a/UI.hs
+++ b/UI.hs
@@ -205,8 +205,8 @@
 
 newtype PPlaying    = PPlaying    StringA
 newtype PVersion    = PVersion    P.ByteString
-newtype PMode       = PMode       P.ByteString
-newtype PMode2      = PMode2      P.ByteString
+newtype PMode       = PMode       String
+newtype PMode2      = PMode2      String
 newtype ProgressBar = ProgressBar StringA
 newtype PTimes      = PTimes      StringA
 
@@ -216,7 +216,7 @@
 
 newtype PlayTitle = PlayTitle StringA
 newtype PlayInfo  = PlayInfo  P.ByteString
-newtype PlayModes = PlayModes P.ByteString
+newtype PlayModes = PlayModes String
 newtype HelpScreen = HelpScreen [StringA]
 
 ------------------------------------------------------------------------
@@ -243,11 +243,16 @@
 
 -- Info about the current track
 instance Element PPlaying where
-    draw w@(_,x') x st z = PPlaying . FancyS $ 
-            map (, defaultSty) $ spc2 : alignLR (x'-4) (UTF8.toString a) b
-        where
-            PId3 a  = draw w x st z
-            PInfo b = draw w x st z
+    draw w@(_,x') x st z =
+        PPlaying . FancyS $ map (, defaultSty) $ spc2 : line
+      where
+        PId3 a  = draw w x st z
+        PInfo b = draw w x st z
+        s       = UTF8.toString a
+        line | gap >= 0 = [U s, B $ spaces $ gap+1, B b]
+             | True     = [U $ ellipsize lim s, B " ", B b]
+            where lim = x' - 5 - P.length b
+                  gap = lim - displayWidth s
 
 -- | Id3 Info
 instance Element PId3 where
@@ -364,33 +369,24 @@
 -- | Play mode
 instance Element PMode where
     draw _ _ st _ = PMode $! case status st of 
-                        Stopped -> a
-                        Paused  -> b
-                        Playing -> c
-
-        where a = "stop"
-              b = "pause"
-              c = "play"
+                        Stopped -> "◼"
+                        Paused  -> "Ⅱ"
+                        Playing -> "▶"
 
--- | Loop, normal or random
+-- | Loop, normal, or random
 instance Element PMode2 where
     draw _ _ st _ = PMode2 $ case mode st of 
-                        Random  -> a
-                        Loop    -> b
-                        Normal  -> c
-
-        where a = "random"
-              b = "loop"
-              c = ""
+                        Random  -> "rand"
+                        Loop    -> "loop"
+                        Normal  -> "once"
 
 ------------------------------------------------------------------------
 
 instance Element PlayModes where
-    draw a b c d = PlayModes $  
-        m `P.append` if m' == P.empty then P.empty else ' ' `P.cons` m'
+    draw a b c d = PlayModes $ m ++ ' ' : m'
         where
-            (PMode  m ) = draw a b c d :: PMode
-            (PMode2 m') = draw a b c d :: PMode2
+            PMode  m  = draw a b c d
+            PMode2 m' = draw a b c d
 
 instance Element PlayInfo where
     draw _ _ st _ = PlayInfo $ P.concat
@@ -421,27 +417,22 @@
 
 instance Element PlayTitle where
     draw a@(_,x) b c d =
-        PlayTitle $ flip Fast hl $ P.concat 
-              [space
-              ,inf
-              ,spaces gapl
-              ,modes
-              ,spaces gapr
-              ,time
-              ,space
-              ,ver
-              ,space]
+        PlayTitle $ FancyS [
+            (B $ P.concat [space,inf,spaces gapl], hl),
+            (U modes, hl),
+            (B $ P.concat [spaces gapr,time,space,ver,space], hl)
+            ]
       where
-        (PlayInfo inf)    = draw a b c d :: PlayInfo
-        (PTime time)      = draw a b c d :: PTime
-        (PlayModes modes) = draw a b c d :: PlayModes
-        (PVersion ver)    = draw a b c d :: PVersion
+        PlayInfo inf    = draw a b c d
+        PTime time      = draw a b c d
+        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
-        modlen  = P.length modes
+        modlen  = length modes
         space   = spaces 1
         hl      = titlebar . config $ c
 
@@ -453,7 +444,7 @@
                  ++ (replicate (height - length list - 2) (Fast P.empty defaultSty))
                  ++ [minibuffer st]
         where
-            (PlayTitle title)       = draw p q st z :: PlayTitle
+            PlayTitle title       = draw p q st z
 
             songs  = music st
             this   = current st
@@ -527,16 +518,6 @@
                 
 ------------------------------------------------------------------------
 
--- | Take two strings, and pad them in the middle
-alignLR :: Int -> String -> P.ByteString -> [AmbiString]
-alignLR w l r 
-    | padding >  0 = [U l, B gap, B r]
-    -- | otherwise    = [U P.take (w - P.length r - 4 - 1) l, ellipsis, spaces 1, r]
-    | otherwise    = [U $ ellipsize (w - P.length r - 1) l, B " ", B r]
-
-    where padding = w - displayWidth l - P.length r
-          gap     = spaces padding
-
 -- | Calculate whitespaces, very common, so precompute likely values
 spaces :: Int -> P.ByteString
 spaces n
@@ -556,7 +537,7 @@
 -- Speed things up a bit, just use read State.
 --
 redrawJustClock :: Draw
-redrawJustClock = Draw $ do
+redrawJustClock = Draw do
    Control.Exception.handle (\ (_ :: SomeException) -> return ()) $ do
 
    st      <- getsST id
@@ -604,7 +585,7 @@
        y = printPlayList   (draw sz (length x,0) s f :: PlayList)
        a = x ++ y
 
-   when (xterm s) $ setXterm s sz f
+   when (xterm s) $ setXterm s
    
    gotoTop
    mapM_ (\t -> do drawLine w t
@@ -692,18 +673,17 @@
 
 -- set xterm title (should have an instance Element)
 -- Don't need to do this on each refresh...
-setXterm :: HState -> (Int,Int) -> Maybe Frame -> IO ()
-setXterm s sz f = setXtermTitle $ 
-    if status s == Playing
-      then case id3 s of
-            Nothing -> case size s of
-                            0 -> ["hmp3"]
-                            _ -> [(fbase $ music s ! current s)]
-            Just ti -> id3artist ti :
-                       if P.null (id3title ti) 
-                            then [] 
-                            else [": ", id3title ti]
-      else let (PMode pm) = draw sz (0,0) s f :: PMode in [pm]
+setXterm :: HState -> IO ()
+setXterm s = setXtermTitle $ case status s of
+    Playing -> case id3 s of
+        Nothing -> case size s of
+                        0 -> ["hmp3"]
+                        _ -> [(fbase $ music s ! current s)]
+        Just ti -> id3artist ti :
+                   if P.null (id3title ti)
+                        then []
+                        else [": ", id3title ti]
+    x  -> [P.pack $ show x]
 
 displayWidth :: String -> Int
 displayWidth = sum . map charWidth
diff --git a/hmp3-ng.cabal b/hmp3-ng.cabal
--- a/hmp3-ng.cabal
+++ b/hmp3-ng.cabal
@@ -1,7 +1,7 @@
 cabal-version:       >= 1.6
 
 name:                hmp3-ng
-version:             2.7.0
+version:             2.7.1
 homepage:            https://github.com/galenhuntington/hmp3-ng
 license:             GPL
 license-file:        LICENSE
@@ -47,3 +47,4 @@
 
     extensions:          ScopedTypeVariables, OverloadedStrings,
                          BlockArguments, BangPatterns
+    extra-libraries:     ncursesw
