diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,10 @@
+# 1.3.2
+
+  - Highlight currently constructed transaction
+  - Fix build with GHC 8.4
+  - Support new dependencies
+  - Drop dependency on text-format
+
 # 1.3.1
 
   - Support brick <= 0.32
diff --git a/hledger-iadd.cabal b/hledger-iadd.cabal
--- a/hledger-iadd.cabal
+++ b/hledger-iadd.cabal
@@ -1,5 +1,5 @@
 name:                hledger-iadd
-version:             1.3.1
+version:             1.3.2
 synopsis:            A terminal UI as drop-in replacement for hledger add
 description:         This is a terminal UI as drop-in replacement for hledger add.
                      .
@@ -30,7 +30,7 @@
 category:            Finance, Console
 build-type:          Simple
 cabal-version:       >=1.10
-tested-with:         GHC==7.10.3, GHC==8.0
+tested-with:         GHC==8.0, GHC==8.2, GHC==8.4
                      
 extra-source-files:
   doc/screencast.gif
@@ -54,11 +54,12 @@
                      , Brick.Widgets.BetterDialog
                      , Brick.Widgets.WrappedText
                      , Brick.Widgets.Edit.EmacsBindings
+                     , Brick.Widgets.Border.Utils
                      , Text.Megaparsec.Compat
   default-language:    Haskell2010
-  build-depends:       base >= 4.8 && < 5
+  build-depends:       base >= 4.9 && < 5
                      , hledger-lib >= 1.0 && < 1.6
-                     , brick >= 0.17 && < 0.33
+                     , brick >= 0.17
                      , vty >= 5.4
                      , text
                      , microlens
@@ -71,7 +72,6 @@
                      , containers
                      , optparse-applicative
                      , directory
-                     , text-format
                      , xdg-basedir
                      , unordered-containers
                      , free >= 4.12.4
@@ -83,10 +83,10 @@
   main-is:             Main.hs
   other-modules:       Paths_hledger_iadd
   default-language:    Haskell2010
-  build-depends:       base >= 4.8 && < 5
+  build-depends:       base >= 4.9 && < 5
                      , hledger-iadd
                      , hledger-lib >= 1.0 && < 1.6
-                     , brick >= 0.17 && < 0.33
+                     , brick >= 0.17
                      , vty >= 5.4
                      , text
                      , microlens
@@ -96,7 +96,6 @@
                      , vector
                      , optparse-applicative
                      , directory
-                     , text-format
                      , xdg-basedir
                      , unordered-containers
                      , free >= 4.12.4
@@ -112,7 +111,7 @@
                     , AmountParserSpec
                     , ModelSpec
   default-language:   Haskell2010
-  build-depends:      base >= 4.8 && < 5
+  build-depends:      base >= 4.9 && < 5
                     , hledger-iadd
                     , hledger-lib >= 1.0 && < 1.6
                     , text
@@ -121,7 +120,6 @@
                     , vector
                     , hspec
                     , QuickCheck
-                    , text-format
                     , free >= 4.12.4
                     , megaparsec >= 5.0 && <6.5
                     , text-zipper >= 0.10
diff --git a/src/Brick/Widgets/Border/Utils.hs b/src/Brick/Widgets/Border/Utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Brick/Widgets/Border/Utils.hs
@@ -0,0 +1,22 @@
+-- | Extensions to "Brick.Widgets.Border"
+module Brick.Widgets.Border.Utils (borderLeft) where
+
+import Brick
+import Brick.Widgets.Border
+import Graphics.Vty
+
+import Lens.Micro
+
+-- | Draw a vertical border on the left side of a widget.
+borderLeft :: Widget n -> Widget n
+borderLeft wrapped = Widget (hSize wrapped) (vSize wrapped) $ do
+  c <- getContext
+
+  wrappedRes <- render $ hLimit (c^.availWidthL - 1)
+                       $ wrapped
+
+  let withBorder = vBorder <+> (Widget Fixed Fixed $ return wrappedRes)
+      width = wrappedRes^.imageL.to imageWidth + 1
+      height = wrappedRes^.imageL.to imageHeight
+
+  render $ hLimit width $ vLimit height $ withBorder
diff --git a/src/Brick/Widgets/CommentDialog.hs b/src/Brick/Widgets/CommentDialog.hs
--- a/src/Brick/Widgets/CommentDialog.hs
+++ b/src/Brick/Widgets/CommentDialog.hs
@@ -9,7 +9,7 @@
   , handleCommentEvent
   ) where
 
-import           Data.Monoid
+import           Data.Semigroup ((<>))
 
 import           Brick
 import           Brick.Widgets.Dialog
diff --git a/src/Brick/Widgets/HelpMessage.hs b/src/Brick/Widgets/HelpMessage.hs
--- a/src/Brick/Widgets/HelpMessage.hs
+++ b/src/Brick/Widgets/HelpMessage.hs
@@ -15,7 +15,7 @@
 import Brick.Widgets.Border
 import Graphics.Vty
 import Data.Text (Text)
-import Data.Monoid
+import Data.Monoid ((<>))
 import Data.List
 import Lens.Micro
 
diff --git a/src/ConfigParser.hs b/src/ConfigParser.hs
--- a/src/ConfigParser.hs
+++ b/src/ConfigParser.hs
@@ -48,7 +48,7 @@
 import           Control.Applicative.Free
 import           Control.Monad
 import           Data.Functor.Identity
-import           Data.Monoid
+import           Data.Semigroup ((<>))
 import           Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.IO as T
diff --git a/src/DateParser.hs b/src/DateParser.hs
--- a/src/DateParser.hs
+++ b/src/DateParser.hs
@@ -21,16 +21,18 @@
 import           Control.Applicative hiding (many, some)
 import           Data.Maybe
 import           Data.Monoid
+import qualified Data.Semigroup as Sem
 import           Data.Text (Text)
 import qualified Data.Text as T
-import           Data.Text.Buildable (Buildable,build)
-import           Data.Text.Format hiding (build)
 import qualified Data.Text.Lazy as TL
 import           Data.Text.Lazy.Builder (Builder, toLazyText)
+import qualified Data.Text.Lazy.Builder as Build
+import qualified Data.Text.Lazy.Builder.Int as Build
 import           Data.Time hiding (parseTime)
 import           Data.Time.Calendar.WeekDate
 import qualified Hledger.Data.Dates as HL
 import           Text.Megaparsec.Compat
+import           Text.Printf (printf, PrintfArg)
 
 newtype DateFormat = DateFormat [DateSpec]
                    deriving (Eq, Show)
@@ -111,7 +113,7 @@
 
 -- (y, m, d)
 newtype IncompleteDate a = IDate (a, a, a)
-                       deriving (Monoid, Functor, Show)
+                       deriving (Sem.Semigroup, Monoid, Functor, Show)
 
 data Direction = Future | Past deriving (Eq,Show)
 -- find a date that matches the incomplete date and is as near as possible to
@@ -205,7 +207,7 @@
 printDate' :: [DateSpec] -> Day -> Builder
 printDate' [] _ = ""
 printDate' (DateYear:ds) day@(toGregorian -> (y,_,_)) =
-  build y <> printDate' ds day
+  Build.decimal y <> printDate' ds day
 printDate' (DateYearShort:ds) day@(toGregorian -> (y,_,_))
   | y > 2000  = twoDigits (y-2000) <> printDate' ds day
   | otherwise = twoDigits y <> printDate' ds day
@@ -214,9 +216,9 @@
 printDate' (DateDay:ds) day@(toGregorian -> (_,_,d)) =
   twoDigits d <> printDate' ds day
 printDate' (DateString s:ds) day =
-  build s <> printDate' ds day
+  Build.fromText s <> printDate' ds day
 printDate' (DateOptional opt:ds) day =
   printDate' opt day <> printDate' ds day
 
-twoDigits :: Buildable a => a -> Builder
-twoDigits = left 2 '0'
+twoDigits :: (Integral a, PrintfArg a) => a -> Builder
+twoDigits = Build.fromString . printf "%02d"
diff --git a/src/View.hs b/src/View.hs
--- a/src/View.hs
+++ b/src/View.hs
@@ -11,7 +11,7 @@
 import           Brick
 import           Brick.Widgets.List
 import           Brick.Widgets.WrappedText
-import           Data.Monoid
+import           Data.Semigroup ((<>))
 import           Data.Text (Text)
 import qualified Data.Text as T
 import           Data.Time hiding (parseTime)
@@ -26,13 +26,11 @@
   T.pack (formatTime defaultTimeLocale "%Y/%m/%d" date)
   <> viewComment comment
 viewState (AccountQuestion trans comment) = txt $
-  T.pack (HL.showTransactionUnelided trans)
-  <> viewComment comment
+  showTransaction trans <> viewComment comment
 viewState (AmountQuestion acc trans comment) = txt $
-  T.pack (HL.showTransactionUnelided trans) <> "  " <> acc
-  <> viewComment comment
-viewState (FinalQuestion trans _) = str $
-  HL.showTransactionUnelided trans
+  showTransaction trans <> "\n    " <> acc <> viewComment comment
+viewState (FinalQuestion trans _) = txt $
+  showTransaction trans
 
 viewQuestion :: Step -> Widget n
 viewQuestion (DateQuestion _) = txt "Date"
@@ -69,3 +67,7 @@
 viewComment comment
   | T.null comment = ""
   | otherwise      = T.unlines $ map ("  ; " <>) $ T.lines comment
+
+
+showTransaction :: HL.Transaction -> Text
+showTransaction = T.stripEnd . T.pack . HL.showTransactionUnelided
diff --git a/src/main/Main.hs b/src/main/Main.hs
--- a/src/main/Main.hs
+++ b/src/main/Main.hs
@@ -9,10 +9,11 @@
 import Brick
   ( Widget, App(..), AttrMap, BrickEvent(..), Next, EventM
   , (<=>), (<+>), txt, continue, halt, attrMap, on, fg
-  , defaultMain, showFirstCursor, padBottom, Padding(Max)
+  , defaultMain, showFirstCursor, padBottom, Padding(Max,Pad)
+  , vLimit, padTopBottom, vSize, Size(Fixed), padAll, padLeft
   )
 import Brick.Widgets.BetterDialog (dialog)
-import Brick.Widgets.Border (hBorder)
+import Brick.Widgets.Border (hBorder, vBorder)
 import Brick.Widgets.Edit.EmacsBindings
   ( Editor, renderEditor, handleEditorEvent, getEditContents, editContentsL
   , editorText
@@ -32,6 +33,7 @@
 import Data.Functor.Identity (Identity(..), runIdentity)
 import Data.Maybe (fromMaybe, fromJust)
 import Data.Monoid ((<>), First(..), getFirst)
+import qualified Data.Semigroup as Sem
 import Data.Text (Text)
 import qualified Data.Text as T
 import qualified Data.Text.IO as T
@@ -55,6 +57,7 @@
 
 import Brick.Widgets.CommentDialog
 import Brick.Widgets.HelpMessage
+import Brick.Widgets.Border.Utils (borderLeft)
 import ConfigParser hiding (parseConfigFile)
 import DateParser
 import Model
@@ -128,7 +131,8 @@
   CommentDialog _ c -> [renderCommentWidget c, ui]
   NoDialog -> [ui]
 
-  where ui =  viewState (asStep as)
+  where ui =  (txt "New Transaction:")
+          <=> padAll 1 (borderLeft $ padLeft (Pad 1) $ viewState (asStep as))
           <=> hBorder
           <=> (viewQuestion (asStep as)
                <+> viewSuggestion (asSuggestion as)
@@ -355,8 +359,8 @@
   , optMatchAlgo  :: f MatchAlgo
   }
 
-instance Monoid (CommonOptions Maybe) where
-  mappend opt1 opt2 =
+instance Sem.Semigroup (CommonOptions Maybe) where
+  (<>) opt1 opt2 =
     let opt1' = optNatTrans First opt1
         opt2' = optNatTrans First opt2
     in optNatTrans getFirst $ CommonOptions
@@ -365,6 +369,8 @@
        , optMatchAlgo = optMatchAlgo opt1' <> optMatchAlgo opt2'
        }
 
+instance Monoid (CommonOptions Maybe) where
+  mappend = (Sem.<>)
   mempty = CommonOptions Nothing Nothing Nothing
 
 optNatTrans :: (forall a. f a -> g a) -> CommonOptions f -> CommonOptions g
diff --git a/tests/ModelSpec.hs b/tests/ModelSpec.hs
--- a/tests/ModelSpec.hs
+++ b/tests/ModelSpec.hs
@@ -6,7 +6,7 @@
 
 import           Control.Monad
 import           Data.List
-import           Data.Monoid
+import           Data.Semigroup ((<>))
 
 import           Data.Text (Text)
 import qualified Data.Text as T
