diff --git a/ncursesw/src/Curses.chs b/ncursesw/src/Curses.chs
--- a/ncursesw/src/Curses.chs
+++ b/ncursesw/src/Curses.chs
@@ -68,19 +68,18 @@
 
 
 import Foreign.C.Types
-import Foreign.C.String hiding (withCString)
 import Foreign.Ptr (Ptr, castPtr)
-import Foreign.C.String (CString)
+import Foreign.C.String (CString, CWString, newCWString)
 import Foreign.Marshal.Alloc (alloca)
 import Foreign.Storable (peek)
-import Data.Char (chr, ord)
+import Data.Char (ord)
 
 import Foreign.Marshal.Utils (toBool, fromBool)
 
 import Data.ByteString.UTF8 as UTF8
 import Data.ByteString.Char8 as Char8
 
-import Misc hiding (cFromBool)
+import Misc
 import CursesUtil
 import UI.Curses.Key
 import CursesInput
@@ -203,11 +202,6 @@
 #endc
 stdscr :: Window
 stdscr = {#call pure get_stdscr#}
-
-
-
-cFromBool = fromBool
-
 
 ------------------------------------------------------------------------
 -- inopts(3NCURSES)
diff --git a/ncursesw/src/Misc.chs b/ncursesw/src/Misc.chs
--- a/ncursesw/src/Misc.chs
+++ b/ncursesw/src/Misc.chs
@@ -1,17 +1,13 @@
+{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
 {-# LANGUAGE ForeignFunctionInterface #-}
 
 module Misc where
 
 import Foreign.C.Types
 import Foreign.Ptr
-import Foreign.C.String
-import Foreign.Marshal.Alloc
-import Foreign.Storable
-import Foreign.ForeignPtr
+import Foreign.Marshal.Utils (toBool)
 
-import Data.Char
 import Data.List (foldl')
-import Foreign.Marshal.Utils (fromBool, toBool)
 
 import Data.Bits
 
@@ -23,11 +19,6 @@
 -- import Foreign.Storable
 
 #include "mycurses.h"
-
-
-
-cFromBool = fromBool
-cToBool   = toBool
 
 ------------------------------------------------------------------------
 -- attr
diff --git a/src/Option.hs b/src/Option.hs
--- a/src/Option.hs
+++ b/src/Option.hs
@@ -1,5 +1,8 @@
 module Option (getOptions) where
 
+import           Paths_vimus (version)
+import           Data.Version (showVersion)
+
 import           Data.Maybe
 import           Data.List
 import           Control.Monad
@@ -10,6 +13,7 @@
 import           System.Console.GetOpt
 
 data Option = Help
+            | Version
             | IgnoreVimusrc
             | OptionHost String
             | OptionPort String
@@ -34,6 +38,7 @@
 options :: [OptDescr Option]
 options = [
     Option []     ["help"]            (NoArg  Help             ) "Display this help and exit."
+  , Option []     ["version"]         (NoArg  Version          ) "Display version and exit."
   , Option ['h']  ["host"]            (ReqArg OptionHost "HOST") hostHelp
   , Option ['p']  ["port"]            (ReqArg OptionPort "PORT") portHelp
   , Option []     ["ignore-vimusrc"]  (NoArg  IgnoreVimusrc    ) "Do not source ~/.vimusrc on startup."
@@ -48,6 +53,11 @@
   when (Help `elem` opts) $ do
     progName <- getProgName
     putStr $ usageInfo (printf "Usage: %s [options]\n\nOPTIONS" progName) options
+    exitSuccess
+
+  when (Version `elem` opts) $ do
+    progName <- getProgName
+    putStrLn (progName ++ " " ++ showVersion version)
     exitSuccess
 
   unless (null errors) $
diff --git a/src/Vimus/Command.hs b/src/Vimus/Command.hs
--- a/src/Vimus/Command.hs
+++ b/src/Vimus/Command.hs
@@ -488,10 +488,10 @@
   , command "set-library-path" "While MPD knows where your songs are stored, vimus doesn't. If you want to use the *%* feature of the command :! you need to tell vimus where your songs are stored." $ do
       \(Path p) -> setLibraryPath p
 
-  , command "next" "stop playing the current song, and starts the next one" $ do
+  , command "next" "play the next song" $ do
       MPD.next :: Vimus ()
 
-  , command "previous" "stop playing the current song, and starts the previous one" $ do
+  , command "previous" "play the previous song" $ do
       MPD.previous :: Vimus ()
 
   , command "toggle" "toggle between play and pause" $ do
@@ -500,10 +500,10 @@
   , command "stop" "stop playback" $ do
       MPD.stop :: Vimus ()
 
-  , command "update" "tell MPD to update the music database. You must update your database when you add or delete files in your music directory, or when you edit the metadata of a song.  MPD will only rescan a file already in the database if its modification time has changed." $ do
+  , command "update" "update music database" $ do
       void (MPD.update Nothing) :: Vimus ()
 
-  , command "rescan" "" $ do
+  , command "rescan" "recreate the music database" $ do
       void (MPD.rescan Nothing) :: Vimus ()
 
   , command "clear" "delete all songs from the playlist" $ do
@@ -546,7 +546,6 @@
   , command "novisual" "cancel visual selection" $
       sendEventCurrent EvNoVisual
 
-  -- Remove current song from playlist
   , command "remove" "remove the song under the cursor from the playlist" $
       sendEventCurrent EvRemove
 
@@ -562,28 +561,15 @@
   , command "shuffle" "shuffle the current playlist" $ do
       MPD.shuffle Nothing :: Vimus ()
 
-  , command "add" "append selected songs to the end of the playlist" $ do
+  , command "add" "append selected songs to the current playlist" $ do
       sendEventCurrent EvAdd
 
-  -- insert a song right after the current song
-  , command "insert" [help|
-      inserts a song to the playlist. The song is inserted after the currently
-      playing song.
-      |] $ do
-      st <- MPD.status
-      case MPD.stSongPos st of
-        Just n -> do
-          -- there is a current song, insert after
-          sendEventCurrent (EvInsert (n + 1))
-        _ -> do
-          -- there is no current song, just add
-          sendEventCurrent EvAdd
+  , command "insert" "insert a song after the currently playing song" $ do
+      maybe (sendEventCurrent EvAdd)
+            (sendEventCurrent . EvInsert . succ) . MPD.stSongPos =<< MPD.status
 
-  -- Playlist: play selected song
-  -- Library:  add song to playlist and play it
-  -- Browse:   either add song to playlist and play it, or :move-in
   , command "default-action" [help|
-      depending on the item under the cursor, somthing different happens:
+      context-dependent default action:
 
       - *Playlist* start playing the song under the cursor
 
diff --git a/src/Vimus/Key.hs b/src/Vimus/Key.hs
--- a/src/Vimus/Key.hs
+++ b/src/Vimus/Key.hs
@@ -145,7 +145,8 @@
 -- | Replace all special keys with their corresponding key reference.
 --
 -- Vim's key-notation is used for key references.
-unExpandKeys = foldr f ""
+unExpandKeys :: String -> String
+unExpandKeys = foldr f ("" :: String)
   where
     f c
       -- escape opening brackets..
diff --git a/src/Vimus/Type.hs b/src/Vimus/Type.hs
--- a/src/Vimus/Type.hs
+++ b/src/Vimus/Type.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving, ExistentialQuantification #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving, ExistentialQuantification, FlexibleContexts #-}
 {-# OPTIONS_GHC -fno-warn-unused-do-bind #-}
 module Vimus.Type (
   Vimus
@@ -73,7 +73,8 @@
 import           Data.Default
 
 import           Data.Time (formatTime, getZonedTime)
-import           System.Locale (defaultTimeLocale)
+--import           System.Locale (defaultTimeLocale)
+import           Data.Time.Locale.Compat(defaultTimeLocale)
 
 import           Network.MPD.Core
 import           Network.MPD as MPD (LsResult)
diff --git a/vimus.cabal b/vimus.cabal
--- a/vimus.cabal
+++ b/vimus.cabal
@@ -1,5 +1,5 @@
 name:             vimus
-version:          0.2.0
+version:          0.2.1
 synopsis:         An MPD client with vim-like key bindings
 description:      An MPD client with vim-like key bindings
                   .
@@ -52,6 +52,7 @@
     , directory
     , data-default
     , template-haskell
+    , time-locale-compat
   hs-source-dirs:
       src
     , ncursesw/src
