diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -2,10 +2,26 @@
 See also the hledger and project change logs.
 
 
-# 1.0.5 (2016/11/19)
+# 1.1 (2016/12/31)
 
-- allow brick 0.14, vty 5.12, text-zipper 0.9
-- set base lower bound to 4.8 to enforce GHC 7.10+
+-   with --watch, the display updates automatically to show file or date changes
+
+    hledger-ui --watch will reload data when the journal file (or any included file) changes.
+    Also, when viewing a current standard period (ie this day/week/month/quarter/year),
+    the period will move as needed to track the current system date.
+
+-   the --change flag shows period changes at startup instead of historical ending balances
+
+-   the A key runs the hledger-iadd tool, if installed
+
+-   always reload when g is pressed
+
+    Previously it would check the modification time and reload only if
+    it looked newer than the last reload.
+
+-   mark hledger-ui as "stable"
+
+-   allow brick 0.15, vty 5.14, text-zipper 0.9
 
 
 # 1.0.4 (2016/11/2)
diff --git a/Hledger/UI/AccountsScreen.hs b/Hledger/UI/AccountsScreen.hs
--- a/Hledger/UI/AccountsScreen.hs
+++ b/Hledger/UI/AccountsScreen.hs
@@ -247,7 +247,7 @@
         sel | selected  = (<> "selected")
             | otherwise = id
 
-asHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+asHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
 asHandle ui0@UIState{
    aScreen=scr@AccountsScreen{..}
   ,aopts=UIOpts{cliopts_=copts}
@@ -289,9 +289,17 @@
         -- EvKey (KChar 'l') [MCtrl] -> do
         VtyEvent (EvKey KEsc        []) -> continue $ resetScreens d ui
         VtyEvent (EvKey (KChar c)   []) | c `elem` ['?'] -> continue $ setMode Help ui
-        VtyEvent (EvKey (KChar 'g') []) -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue
+        -- XXX AppEvents currently handled only in Normal mode
+        -- XXX be sure we don't leave unconsumed events piling up
+        AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
+          continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
+          where
+            p = reportPeriod ui
+        e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
+          liftIO (uiReloadJournal copts d ui) >>= continue
         VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
         VtyEvent (EvKey (KChar 'a') []) -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui
+        VtyEvent (EvKey (KChar 'A') []) -> suspendAndResume $ void (runIadd (journalFilePath j)) >> uiReloadJournalIfChanged copts d j ui
         VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor endPos (journalFilePath j)) >> uiReloadJournalIfChanged copts d j ui
         VtyEvent (EvKey (KChar '0') []) -> continue $ regenerateScreens j d $ setDepth (Just 0) ui
         VtyEvent (EvKey (KChar '1') []) -> continue $ regenerateScreens j d $ setDepth (Just 1) ui
diff --git a/Hledger/UI/Editor.hs b/Hledger/UI/Editor.hs
--- a/Hledger/UI/Editor.hs
+++ b/Hledger/UI/Editor.hs
@@ -26,6 +26,11 @@
 endPos :: Maybe TextPosition
 endPos = Just (-1,Nothing)
 
+-- | Run the hledger-iadd executable (an alternative to the built-in add command),
+-- or raise an error.
+runIadd :: FilePath -> IO ExitCode
+runIadd f = runCommand ("hledger-iadd -f " ++ f) >>= waitForProcess
+
 -- | Try running the user's preferred text editor, or a default edit command,
 -- on the main journal file, blocking until it exits, and returning the exit code;
 -- or raise an error.
diff --git a/Hledger/UI/ErrorScreen.hs b/Hledger/UI/ErrorScreen.hs
--- a/Hledger/UI/ErrorScreen.hs
+++ b/Hledger/UI/ErrorScreen.hs
@@ -68,7 +68,7 @@
 
 esDraw _ = error "draw function called with wrong screen type, should not happen"
 
-esHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+esHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
 esHandle ui@UIState{
    aScreen=ErrorScreen{..}
   ,aopts=UIOpts{cliopts_=copts}
@@ -92,7 +92,8 @@
             (pos,f) = case parsewithString hledgerparseerrorpositionp esError of
                         Right (f,l,c) -> (Just (l, Just c),f)
                         Left  _       -> (endPos, journalFilePath j)
-        VtyEvent (EvKey (KChar 'g') []) -> liftIO (uiReloadJournalIfChanged copts d j (popScreen ui)) >>= continue . uiCheckBalanceAssertions d
+        e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
+          liftIO (uiReloadJournal copts d (popScreen ui)) >>= continue . uiCheckBalanceAssertions d
 --           (ej, _) <- liftIO $ journalReloadIfChanged copts d j
 --           case ej of
 --             Left err -> continue ui{aScreen=s{esError=err}} -- show latest parse error
diff --git a/Hledger/UI/Main.hs b/Hledger/UI/Main.hs
--- a/Hledger/UI/Main.hs
+++ b/Hledger/UI/Main.hs
@@ -11,26 +11,30 @@
 
 -- import Control.Applicative
 -- import Lens.Micro.Platform ((^.))
+import Control.Concurrent
+import Control.Concurrent.Async
 import Control.Monad
 -- import Control.Monad.IO.Class (liftIO)
--- import Data.Default
+import Data.Default (def)
 -- import Data.Monoid              -- 
 import Data.List
 import Data.Maybe
 -- import Data.Text (Text)
 import qualified Data.Text as T
 -- import Data.Time.Calendar
+import Graphics.Vty (mkVty)
 import Safe
 import System.Exit
-
-import qualified Graphics.Vty as V
+import System.Directory
+import System.FilePath
+import System.FSNotify
 import Brick
 
 import Hledger
 import Hledger.Cli hiding (progname,prognameandversion,green)
 import Hledger.UI.UIOptions
 import Hledger.UI.UITypes
--- import Hledger.UI.UIUtils
+import Hledger.UI.UIState (toggleHistorical)
 import Hledger.UI.Theme
 import Hledger.UI.AccountsScreen
 import Hledger.UI.RegisterScreen
@@ -126,16 +130,18 @@
                    ,aMode=Normal
                    }
   
-    ui = (sInit scr) d True
-         UIState{
-            aopts=uopts'
-           ,ajournal=j
-           ,aScreen=scr
-           ,aPrevScreens=prevscrs
-           ,aMode=Normal
-           }
+    ui =
+      (sInit scr) d True $
+        (if change_ uopts' then toggleHistorical else id) $ -- XXX
+        UIState{
+          aopts=uopts'
+         ,ajournal=j
+         ,aScreen=scr
+         ,aPrevScreens=prevscrs
+         ,aMode=Normal
+         }
 
-    brickapp :: App (UIState) V.Event Name
+    brickapp :: App (UIState) AppEvent Name
     brickapp = App {
         appStartEvent   = return
       , appAttrMap      = const theme
@@ -144,5 +150,68 @@
       , appDraw         = \ui    -> sDraw   (aScreen ui) ui
       }
 
-  void $ defaultMain brickapp ui
+  if not (watch_ uopts')
+  then
+    void $ defaultMain brickapp ui
 
+  else do
+    -- a channel for sending misc. events to the app
+    eventChan <- newChan
+
+    -- start a background thread reporting changes in the current date
+    -- use async for proper child termination in GHCI
+    let
+      watchDate old = do
+        threadDelay 1000000 -- 1 s
+        new <- getCurrentDay
+        when (new /= old) $ do
+          let dc = DateChange old new
+          -- dbg1IO "datechange" dc -- XXX don't uncomment until dbg*IO fixed to use traceIO, GHC may block/end thread
+          -- traceIO $ show dc
+          writeChan eventChan dc
+        watchDate new
+
+    withAsync
+      (getCurrentDay >>= watchDate)
+      $ \_ -> do
+
+      -- start one or more background threads reporting changes in the directories of our files
+      -- XXX many quick successive saves causes the problems listed in BUGS
+      -- with Debounce increased to 1s it easily gets stuck on an error or blank screen
+      -- until you press g, but it becomes responsive again quickly.
+      -- withManagerConf defaultConfig{confDebounce=Debounce 1} $ \mgr -> do
+      -- with Debounce at the default 1ms it clears transient errors itself
+      -- but gets tied up for ages
+      withManager $ \mgr -> do
+        dbg1IO "fsnotify using polling ?" $ isPollingManager mgr
+        files <- mapM canonicalizePath $ map fst $ jfiles j
+        let directories = nub $ sort $ map takeDirectory files
+        dbg1IO "files" files
+        dbg1IO "directories to watch" directories
+
+        forM_ directories $ \d -> watchDir
+          mgr
+          d
+          -- predicate: ignore changes not involving our files
+          (\fev -> case fev of
+            Modified f _ -> f `elem` files
+            -- Added    f _ -> f `elem` files
+            -- Removed  f _ -> f `elem` files
+            -- we don't handle adding/removing journal files right now
+            -- and there might be some of those events from tmp files
+            -- clogging things up so let's ignore them
+            _ -> False
+            )
+          -- action: send event to app
+          (\fev -> do
+            -- return $ dbglog "fsnotify" $ showFSNEvent fev -- not working
+            dbg1IO "fsnotify" $ showFSNEvent fev
+            writeChan eventChan FileChange
+            )
+
+        -- and start the app. Must be inside the withManager block
+        void $ customMain (mkVty def) (Just eventChan) brickapp ui
+
+showFSNEvent (Added    f _) = "Added "    ++ show f
+showFSNEvent (Modified f _) = "Modified " ++ show f
+showFSNEvent (Removed  f _) = "Removed "  ++ show f
diff --git a/Hledger/UI/RegisterScreen.hs b/Hledger/UI/RegisterScreen.hs
--- a/Hledger/UI/RegisterScreen.hs
+++ b/Hledger/UI/RegisterScreen.hs
@@ -236,7 +236,7 @@
     sel | selected  = (<> "selected")
         | otherwise = id
 
-rsHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+rsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
 rsHandle ui@UIState{
    aScreen=s@RegisterScreen{..}
   ,aopts=UIOpts{cliopts_=copts}
@@ -267,9 +267,15 @@
         VtyEvent (EvKey (KChar 'q') []) -> halt ui
         VtyEvent (EvKey KEsc        []) -> continue $ resetScreens d ui
         VtyEvent (EvKey (KChar c)   []) | c `elem` ['?'] -> continue $ setMode Help ui
-        VtyEvent (EvKey (KChar 'g') []) -> liftIO (uiReloadJournalIfChanged copts d j ui) >>= continue
+        AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
+          continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
+          where
+            p = reportPeriod ui
+        e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] ->
+          liftIO (uiReloadJournal copts d ui) >>= continue
         VtyEvent (EvKey (KChar 'I') []) -> continue $ uiCheckBalanceAssertions d (toggleIgnoreBalanceAssertions ui)
         VtyEvent (EvKey (KChar 'a') []) -> suspendAndResume $ clearScreen >> setCursorPosition 0 0 >> add copts j >> uiReloadJournalIfChanged copts d j ui
+        VtyEvent (EvKey (KChar 'A') []) -> suspendAndResume $ void (runIadd (journalFilePath j)) >> uiReloadJournalIfChanged copts d j ui
         VtyEvent (EvKey (KChar 't') [])    -> continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
         VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
           where
diff --git a/Hledger/UI/TransactionScreen.hs b/Hledger/UI/TransactionScreen.hs
--- a/Hledger/UI/TransactionScreen.hs
+++ b/Hledger/UI/TransactionScreen.hs
@@ -102,7 +102,7 @@
 
 tsDraw _ = error "draw function called with wrong screen type, should not happen"
 
-tsHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+tsHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
 tsHandle ui@UIState{aScreen=s@TransactionScreen{tsTransaction=(i,t)
                                                 ,tsTransactions=nts
                                                 ,tsAccount=acct}
@@ -129,9 +129,13 @@
         VtyEvent (EvKey (KChar 'E') []) -> suspendAndResume $ void (runEditor pos f) >> uiReloadJournalIfChanged copts d j ui
           where
             (pos,f) = let GenericSourcePos f l c = tsourcepos t in (Just (l, Just c),f)
-        VtyEvent (EvKey (KChar 'g') []) -> do
+        AppEvent (DateChange old _) | isStandardPeriod p && p `periodContainsDate` old ->
+          continue $ regenerateScreens j d $ setReportPeriod (DayPeriod d) ui
+          where
+            p = reportPeriod ui
+        e | e `elem` [VtyEvent (EvKey (KChar 'g') []), AppEvent FileChange] -> do
           d <- liftIO getCurrentDay
-          (ej, _) <- liftIO $ journalReloadIfChanged copts d j
+          ej <- liftIO $ journalReload copts
           case ej of
             Left err -> continue $ screenEnter d errorScreen{esError=err} ui
             Right j' -> do
diff --git a/Hledger/UI/UIOptions.hs b/Hledger/UI/UIOptions.hs
--- a/Hledger/UI/UIOptions.hs
+++ b/Hledger/UI/UIOptions.hs
@@ -26,8 +26,15 @@
 
 uiflags = [
   -- flagNone ["debug-ui"]  (\opts -> setboolopt "rules-file" opts) "run with no terminal output, showing console"
-   flagReq  ["theme"] (\s opts -> Right $ setopt "theme" s opts) "THEME" ("use this custom display theme ("++intercalate ", " themeNames++")")
+   flagNone ["watch"] (\opts -> setboolopt "watch" opts) "watch for data changes and reload automatically"
+  ,flagReq  ["theme"] (\s opts -> Right $ setopt "theme" s opts) "THEME" ("use this custom display theme ("++intercalate ", " themeNames++")")
   ,flagReq  ["register"] (\s opts -> Right $ setopt "register" s opts) "ACCTREGEX" "start in the (first) matched account's register"
+  ,flagNone ["change"] (\opts -> setboolopt "change" opts)
+    "show period balances (changes) at startup instead of historical balances"
+  -- ,flagNone ["cumulative"] (\opts -> setboolopt "cumulative" opts)
+  --   "show balance change accumulated across periods (in multicolumn reports)"
+  -- ,flagNone ["historical","H"] (\opts -> setboolopt "historical" opts)
+  --   "show historical ending balance in each period (includes postings before report start date)\n "
   ,flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show full account names, unindented"
   -- ,flagReq ["drop"] (\s opts -> Right $ setopt "drop" s opts) "N" "with --flat, omit this many leading account name components"
   -- ,flagReq  ["format"] (\s opts -> Right $ setopt "format" s opts) "FORMATSTR" "use this custom line format"
@@ -51,13 +58,15 @@
 
 -- hledger-ui options, used in hledger-ui and above
 data UIOpts = UIOpts {
-     debug_ui_ :: Bool
-    ,cliopts_   :: CliOpts
+     watch_   :: Bool
+    ,change_  :: Bool
+    ,cliopts_ :: CliOpts
  } deriving (Show)
 
 defuiopts = UIOpts
     def
     def
+    def
 
 -- instance Default CliOpts where def = defcliopts
 
@@ -65,8 +74,9 @@
 rawOptsToUIOpts rawopts = checkUIOpts <$> do
   cliopts <- rawOptsToCliOpts rawopts
   return defuiopts {
-              debug_ui_ = boolopt "debug-ui" rawopts
-             ,cliopts_   = cliopts
+              watch_   = boolopt "watch" rawopts
+             ,change_  = boolopt "change" rawopts
+             ,cliopts_ = cliopts
              }
 
 checkUIOpts :: UIOpts -> UIOpts
diff --git a/Hledger/UI/UIState.hs b/Hledger/UI/UIState.hs
--- a/Hledger/UI/UIState.hs
+++ b/Hledger/UI/UIState.hs
@@ -86,15 +86,28 @@
 shrinkReportPeriod d ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts}}} =
   ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodShrink d $ period_ ropts}}}}
 
--- | Step the report start/end dates to the next period of same duration.
+-- | Step the report start/end dates to the next period of same duration,
+-- remaining inside the given enclosing span.
 nextReportPeriod :: DateSpan -> UIState -> UIState
-nextReportPeriod journalspan ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
-  ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodNextIn journalspan p}}}}
+nextReportPeriod enclosingspan ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
+  ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodNextIn enclosingspan p}}}}
 
--- | Step the report start/end dates to the next period of same duration.
+-- | Step the report start/end dates to the next period of same duration,
+-- remaining inside the given enclosing span.
 previousReportPeriod :: DateSpan -> UIState -> UIState
-previousReportPeriod journalspan ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
-  ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodPreviousIn journalspan p}}}}
+previousReportPeriod enclosingspan ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
+  ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodPreviousIn enclosingspan p}}}}
+
+-- | If a standard report period is set, step it forward/backward if needed so that
+-- it encloses the given date.
+moveReportPeriodToDate :: Day -> UIState -> UIState
+moveReportPeriodToDate d ui@UIState{aopts=uopts@UIOpts{cliopts_=copts@CliOpts{reportopts_=ropts@ReportOpts{period_=p}}}} =
+  ui{aopts=uopts{cliopts_=copts{reportopts_=ropts{period_=periodMoveTo d p}}}}
+
+-- | Get the report period.
+reportPeriod :: UIState -> Period
+reportPeriod UIState{aopts=UIOpts{cliopts_=CliOpts{reportopts_=ReportOpts{period_=p}}}} =
+  p
 
 -- | Set the report period.
 setReportPeriod :: Period -> UIState -> UIState
diff --git a/Hledger/UI/UITypes.hs b/Hledger/UI/UITypes.hs
--- a/Hledger/UI/UITypes.hs
+++ b/Hledger/UI/UITypes.hs
@@ -39,7 +39,6 @@
 module Hledger.UI.UITypes where
 
 import Data.Time.Calendar (Day)
-import Graphics.Vty (Event)
 import Brick
 import Brick.Widgets.List
 import Brick.Widgets.Edit (Editor)
@@ -83,6 +82,11 @@
   | RegisterList
   deriving (Ord, Show, Eq)
 
+data AppEvent =
+    FileChange          -- one of the Journal's files has been added/modified/removed
+  | DateChange Day Day  -- the current date has changed since last checked (with the old and new values)
+  deriving (Eq, Show)
+
 -- | hledger-ui screen types & instances.
 -- Each screen type has generically named initialisation, draw, and event handling functions,
 -- and zero or more uniquely named screen state fields, which hold the data for a particular
@@ -92,7 +96,7 @@
     AccountsScreen {
        sInit   :: Day -> Bool -> UIState -> UIState              -- ^ function to initialise or update this screen's state
       ,sDraw   :: UIState -> [Widget Name]                             -- ^ brick renderer for this screen
-      ,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)  -- ^ brick event handler for this screen
+      ,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)  -- ^ brick event handler for this screen
       -- state fields.These ones have lenses:
       ,_asList            :: List Name AccountsScreenItem  -- ^ list widget showing account names & balances
       ,_asSelectedAccount :: AccountName              -- ^ a backup of the account name from the list widget's selected item (or "")
@@ -100,7 +104,7 @@
   | RegisterScreen {
        sInit   :: Day -> Bool -> UIState -> UIState
       ,sDraw   :: UIState -> [Widget Name]
-      ,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+      ,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
       --
       ,rsList    :: List Name RegisterScreenItem      -- ^ list widget showing transactions affecting this account
       ,rsAccount :: AccountName                       -- ^ the account this register is for
@@ -111,7 +115,7 @@
   | TransactionScreen {
        sInit   :: Day -> Bool -> UIState -> UIState
       ,sDraw   :: UIState -> [Widget Name]
-      ,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+      ,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
       --
       ,tsTransaction  :: NumberedTransaction          -- ^ the transaction we are currently viewing, and its position in the list
       ,tsTransactions :: [NumberedTransaction]        -- ^ list of transactions we can step through
@@ -120,7 +124,7 @@
   | ErrorScreen {
        sInit   :: Day -> Bool -> UIState -> UIState
       ,sDraw   :: UIState -> [Widget Name]
-      ,sHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+      ,sHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
       --
       ,esError :: String                              -- ^ error message to show
     }
diff --git a/Hledger/UI/UIUtils.hs b/Hledger/UI/UIUtils.hs
--- a/Hledger/UI/UIUtils.hs
+++ b/Hledger/UI/UIUtils.hs
@@ -56,7 +56,8 @@
                   ,str " "
                   ,str "MISC"
                   ,renderKey ("?", "toggle help")
-                  ,renderKey ("a", "add transaction")
+                  ,renderKey ("a", "add transaction (hledger add)")
+                  ,renderKey ("A", "add transaction (hledger-iadd)")
                   ,renderKey ("E", "open editor")
                   ,renderKey ("g", "reload data")
                   ,renderKey ("I", "toggle balance assertions")
@@ -110,7 +111,7 @@
     renderKey (key,desc) = withAttr (borderAttr <> "keys") (str key) <+> str " " <+> str desc
 
 -- | Event handler used when help mode is active.
-helpHandle :: UIState -> BrickEvent Name Event -> EventM Name (Next UIState)
+helpHandle :: UIState -> BrickEvent Name AppEvent -> EventM Name (Next UIState)
 helpHandle ui ev =
   case ev of
     VtyEvent (EvKey k []) | k `elem` [KEsc, KLeft, KChar 'h', KChar '?'] -> continue $ setMode Normal ui
diff --git a/doc/hledger-ui.1 b/doc/hledger-ui.1
--- a/doc/hledger-ui.1
+++ b/doc/hledger-ui.1
@@ -1,5 +1,5 @@
 
-.TH "hledger\-ui" "1" "October 2016" "hledger\-ui 1.0" "hledger User Manuals"
+.TH "hledger\-ui" "1" "December 2016" "hledger\-ui 1.1" "hledger User Manuals"
 
 
 
@@ -39,21 +39,31 @@
 Any QUERYARGS are interpreted as a hledger search query which filters
 the data.
 .TP
-.B \f[C]\-\-flat\f[]
-show full account names, unindented
+.B \f[C]\-\-watch\f[]
+watch for data (and time) changes and reload automatically
 .RS
 .RE
 .TP
+.B \f[C]\-\-theme=default|terminal|greenterm\f[]
+use this custom display theme
+.RS
+.RE
+.TP
 .B \f[C]\-\-register=ACCTREGEX\f[]
 start in the (first) matched account\[aq]s register screen
 .RS
 .RE
 .TP
-.B \f[C]\-\-theme=default|terminal|greenterm\f[]
-use this custom display theme
+.B \f[C]\-\-change\f[]
+show period balances (changes) at startup instead of historical balances
 .RS
 .RE
 .TP
+.B \f[C]\-\-flat\f[]
+show full account names, unindented
+.RS
+.RE
+.TP
 .B \f[C]\-V\ \-\-value\f[]
 show amounts as their current market value in their default valuation
 commodity (accounts screen only)
@@ -193,7 +203,8 @@
 .RE
 .TP
 .B \f[C]\-B\ \-\-cost\f[]
-show amounts in their cost price\[aq]s commodity
+convert amounts to their cost at transaction time (using the transaction
+price, if any)
 .RS
 .RE
 .TP
@@ -201,8 +212,6 @@
 will transform the journal before any other processing by replacing the
 account name of every posting having the tag TAG with content VALUE by
 the account name "TAG:VALUE".
-.RS
-.RE
 The TAG will only match if it is a full\-length match.
 The pivot will only happen if the TAG is on a posting, not if it is on
 the transaction.
@@ -239,8 +248,11 @@
 report period durations: year, quarter, month, week, day.
 Then, \f[C]shift\-left/right\f[] moves to the previous/next period.
 \f[C]t\f[] sets the report period to today.
-(To set a non\-standard period, you can use \f[C]/\f[] and a
-\f[C]date:\f[] query).
+With the \f[C]\-\-watch\f[] option, when viewing a "current" period (the
+current day, week, month, quarter, or year), the period will move
+automatically to track the current date.
+To set a non\-standard period, you can use \f[C]/\f[] and a
+\f[C]date:\f[] query.
 .PP
 \f[C]/\f[] lets you set a general filter query limiting the data shown,
 using the same query terms as in hledger and hledger\-web.
@@ -424,12 +436,17 @@
 \f[C]\-V\f[] affects only the accounts screen.
 .PP
 When you press \f[C]g\f[], the current and all previous screens are
-regenerated, which may cause a noticeable pause.
+regenerated, which may cause a noticeable pause with large files.
 Also there is no visual indication that this is in progress.
 .PP
-The register screen\[aq]s switching between historic balance and running
-total based on query arguments may be confusing, and there is no column
-heading to indicate which is being displayed.
+\f[C]\-\-watch\f[] is not yet fully robust.
+It works well for normal usage, but many file changes in a short time
+(eg saving the file thousands of times with an editor macro) can cause
+problems at least on OSX.
+Symptoms include: unresponsive UI, periodic resetting of the cursor
+position, momentary display of parse errors, high CPU usage eventually
+subsiding, and possibly a small but persistent build\-up of CPU usage
+until the program is restarted.
 
 
 .SH "REPORTING BUGS"
diff --git a/doc/hledger-ui.1.info b/doc/hledger-ui.1.info
--- a/doc/hledger-ui.1.info
+++ b/doc/hledger-ui.1.info
@@ -4,7 +4,7 @@
 
 File: hledger-ui.1.info,  Node: Top,  Up: (dir)
 
-hledger-ui(1) hledger-ui 1.0
+hledger-ui(1) hledger-ui 1.1
 ****************************
 
 hledger-ui is hledger's curses-style interface, providing an efficient
@@ -37,15 +37,22 @@
    Any QUERYARGS are interpreted as a hledger search query which filters
 the data.
 
-`--flat'
-     show full account names, unindented
+`--watch'
+     watch for data (and time) changes and reload automatically
 
+`--theme=default|terminal|greenterm'
+     use this custom display theme
+
 `--register=ACCTREGEX'
      start in the (first) matched account's register screen
 
-`--theme=default|terminal|greenterm'
-     use this custom display theme
+`--change'
+     show period balances (changes) at startup instead of historical
+     balances
 
+`--flat'
+     show full account names, unindented
+
 `-V --value'
      show amounts as their current market value in their default
      valuation commodity (accounts screen only)
@@ -132,16 +139,17 @@
      show items with zero amount, normally hidden
 
 `-B --cost'
-     show amounts in their cost price's commodity
+     convert amounts to their cost at transaction time (using the
+     transaction price, if any)
 
 `--pivot TAG'
      will transform the journal before any other processing by
      replacing the account name of every posting having the tag TAG
-     with content VALUE by the account name "TAG:VALUE".  The TAG will
+     with content VALUE by the account name "TAG:VALUE". The TAG will
      only match if it is a full-length match. The pivot will only
-     happen if the TAG is on a posting, not if it is on the transaction.
-     If the tag value is a multi:level:account:name the new account
-     name will be "TAG:multi:level:account:name".
+     happen if the TAG is on a posting, not if it is on the
+     transaction. If the tag value is a multi:level:account:name the
+     new account name will be "TAG:multi:level:account:name".
 
 `--anon'
      show anonymized accounts and payees
@@ -170,8 +178,10 @@
 `shift-down/up' steps downward and upward through these standard report
 period durations: year, quarter, month, week, day. Then,
 `shift-left/right' moves to the previous/next period. `t' sets the
-report period to today. (To set a non-standard period, you can use `/'
-and a `date:' query).
+report period to today. With the `--watch' option, when viewing a
+"current" period (the current day, week, month, quarter, or year), the
+period will move automatically to track the current date. To set a
+non-standard period, you can use `/' and a `date:' query.
 
    `/' lets you set a general filter query limiting the data shown,
 using the same query terms as in hledger and hledger-web. While editing
@@ -351,17 +361,17 @@
 Node: Top88
 Node: OPTIONS823
 Ref: #options922
-Node: KEYS3786
-Ref: #keys3883
-Node: SCREENS6284
-Ref: #screens6371
-Node: Accounts screen6461
-Ref: #accounts-screen6591
-Node: Register screen8629
-Ref: #register-screen8786
-Node: Transaction screen10674
-Ref: #transaction-screen10834
-Node: Error screen11701
-Ref: #error-screen11825
+Node: KEYS4003
+Ref: #keys4100
+Node: SCREENS6670
+Ref: #screens6757
+Node: Accounts screen6847
+Ref: #accounts-screen6977
+Node: Register screen9015
+Ref: #register-screen9172
+Node: Transaction screen11060
+Ref: #transaction-screen11220
+Node: Error screen12087
+Ref: #error-screen12211
 
 End Tag Table
diff --git a/doc/hledger-ui.1.txt b/doc/hledger-ui.1.txt
--- a/doc/hledger-ui.1.txt
+++ b/doc/hledger-ui.1.txt
@@ -35,14 +35,21 @@
        Any  QUERYARGS  are interpreted as a hledger search query which filters
        the data.
 
-       --flat show full account names, unindented
+       --watch
+              watch for data (and time) changes and reload automatically
 
+       --theme=default|terminal|greenterm
+              use this custom display theme
+
        --register=ACCTREGEX
               start in the (first) matched account's register screen
 
-       --theme=default|terminal|greenterm
-              use this custom display theme
+       --change
+              show period balances (changes) at startup instead of  historical
+              balances
 
+       --flat show full account names, unindented
+
        -V --value
               show amounts as their current market value in their default val-
               uation commodity (accounts screen only)
@@ -51,7 +58,7 @@
 
        -h     show general usage (or after COMMAND, the command's usage)
 
-       --help show  the  current  program's  manual as plain text (or after an
+       --help show the current program's manual as plain  text  (or  after  an
               add-on COMMAND, the add-on's manual)
 
        --man  show the current program's manual with man
@@ -68,7 +75,7 @@
               use a different input file.  For stdin, use -
 
        --rules-file=RULESFILE
-              Conversion  rules  file  to  use  when  reading  CSV   (default:
+              Conversion   rules  file  to  use  when  reading  CSV  (default:
               FILE.rules)
 
        --alias=OLD=NEW
@@ -101,7 +108,7 @@
               multiperiod/multicolumn report by year
 
        -p --period=PERIODEXP
-              set  start date, end date, and/or reporting interval all at once
+              set start date, end date, and/or reporting interval all at  once
               (overrides the flags above)
 
        --date2
@@ -126,63 +133,66 @@
               show items with zero amount, normally hidden
 
        -B --cost
-              show amounts in their cost price's commodity
+              convert  amounts  to  their  cost at transaction time (using the
+              transaction price, if any)
 
        --pivot TAG
               will transform  the  journal  before  any  other  processing  by
               replacing  the  account name of every posting having the tag TAG
-              with content VALUE by the account name "TAG:VALUE".
-       The TAG will only match if it is a full-length match.  The  pivot  will
-       only  happen  if  the TAG is on a posting, not if it is on the transac-
-       tion.  If the tag value is a multi:level:account:name the  new  account
-       name will be "TAG:multi:level:account:name".
+              with content VALUE by the account  name  "TAG:VALUE".   The  TAG
+              will  only  match  if it is a full-length match.  The pivot will
+              only happen if the TAG is on a posting, not  if  it  is  on  the
+              transaction.  If the tag value is a multi:level:account:name the
+              new account name will be "TAG:multi:level:account:name".
 
        --anon show anonymized accounts and payees
 
 KEYS
-       ?  shows a help dialog listing all keys.  (Some of these also appear in
+       ? shows a help dialog listing all keys.  (Some of these also appear  in
        the quick help at the bottom of each screen.) Press ? again (or ESCAPE,
        or LEFT) to close it.  The following keys work on most screens:
 
        The cursor keys navigate: right (or enter) goes deeper, left returns to
-       the previous screen,  up/down/page up/page down/home/end  move  up  and
+       the  previous  screen,  up/down/page up/page down/home/end  move up and
        down through lists.  Vi-style h/j/k/l movement keys are also supported.
-       A tip: movement speed is limited by your keyboard repeat rate, to  move
-       faster  you  may want to adjust it.  (If you're on a mac, the Karabiner
+       A  tip: movement speed is limited by your keyboard repeat rate, to move
+       faster you may want to adjust it.  (If you're on a mac,  the  Karabiner
        app is one way to do that.)
 
-       With shift pressed, the cursor keys adjust the report period,  limiting
-       the   transactions   to   be   shown   (by  default,  all  are  shown).
-       shift-down/up steps downward and upward through these  standard  report
+       With  shift pressed, the cursor keys adjust the report period, limiting
+       the  transactions  to  be  shown   (by   default,   all   are   shown).
+       shift-down/up  steps  downward and upward through these standard report
        period   durations:   year,   quarter,   month,   week,   day.    Then,
-       shift-left/right moves to the previous/next period.  t sets the  report
-       period  to  today.   (To set a non-standard period, you can use / and a
-       date: query).
+       shift-left/right  moves to the previous/next period.  t sets the report
+       period to today.  With the --watch option,  when  viewing  a  "current"
+       period  (the  current  day,  week, month, quarter, or year), the period
+       will move automatically to track the current date.  To set a  non-stan-
+       dard period, you can use / and a date: query.
 
-       / lets you set a general filter query limiting the  data  shown,  using
-       the  same query terms as in hledger and hledger-web.  While editing the
-       query, you can use CTRL-a/e/d/k, BS, cursor keys; press  ENTER  to  set
+       /  lets  you  set a general filter query limiting the data shown, using
+       the same query terms as in hledger and hledger-web.  While editing  the
+       query,  you  can  use CTRL-a/e/d/k, BS, cursor keys; press ENTER to set
        it, or ESCAPEto cancel.  There are also keys for quickly adjusting some
-       common filters like account depth and  cleared/uncleared  (see  below).
+       common  filters  like  account depth and cleared/uncleared (see below).
        BACKSPACE or DELETE removes all filters, showing all transactions.
 
-       ESCAPE  removes  all  filters and jumps back to the top screen.  Or, it
+       ESCAPE removes all filters and jumps back to the top  screen.   Or,  it
        cancels a minibuffer edit or help dialog in progress.
 
-       g reloads from the data file(s) and updates the current screen and  any
-       previous  screens.   (With  large  files, this could cause a noticeable
+       g  reloads from the data file(s) and updates the current screen and any
+       previous screens.  (With large files, this  could  cause  a  noticeable
        pause.)
 
-       I toggles balance assertion  checking.   Disabling  balance  assertions
+       I  toggles  balance  assertion  checking.  Disabling balance assertions
        temporarily can be useful for troubleshooting.
 
-       a  runs  command-line  hledger's  add  command, and reloads the updated
+       a runs command-line hledger's add  command,  and  reloads  the  updated
        file.  This allows some basic data entry.
 
-       E  runs  $HLEDGER_UI_EDITOR,  or   $EDITOR,   or   a   default   (emac-
+       E   runs   $HLEDGER_UI_EDITOR,   or   $EDITOR,   or  a  default  (emac-
        sclient -a "" -nw) on the journal file.  With some editors (emacs, vi),
-       the cursor will be positioned at the current transaction  when  invoked
-       from  the  register  and transaction screens, and at the error location
+       the  cursor  will be positioned at the current transaction when invoked
+       from the register and transaction screens, and at  the  error  location
        (if possible) when invoked from the error screen.
 
        q quits the application.
@@ -191,42 +201,42 @@
 
 SCREENS
    Accounts screen
-       This is normally the first screen displayed.   It  lists  accounts  and
-       their  balances,  like hledger's balance command.  By default, it shows
-       all accounts and their latest ending balances (including  the  balances
-       of  subaccounts).  if you specify a query on the command line, it shows
+       This  is  normally  the  first screen displayed.  It lists accounts and
+       their balances, like hledger's balance command.  By default,  it  shows
+       all  accounts  and their latest ending balances (including the balances
+       of subaccounts).  if you specify a query on the command line, it  shows
        just the matched accounts and the balances from matched transactions.
 
-       Account names are normally indented to show the hierarchy (tree  mode).
+       Account  names are normally indented to show the hierarchy (tree mode).
        To see less detail, set a depth limit by pressing a number key, 1 to 9.
        0 shows even less detail, collapsing all accounts to a single total.  -
-       and  +  (or  =)  decrease  and increase the depth limit.  To remove the
-       depth limit, set it higher than the maximum  account  depth,  or  press
+       and + (or =) decrease and increase the  depth  limit.   To  remove  the
+       depth  limit,  set  it  higher than the maximum account depth, or press
        ESCAPE.
 
-       F  toggles  flat mode, in which accounts are shown as a flat list, with
-       their full names.  In this mode, account balances exclude  subaccounts,
-       except  for accounts at the depth limit (as with hledger's balance com-
+       F toggles flat mode, in which accounts are shown as a flat  list,  with
+       their  full names.  In this mode, account balances exclude subaccounts,
+       except for accounts at the depth limit (as with hledger's balance  com-
        mand).
 
        H toggles between showing historical balances or period balances.  His-
-       torical  balances  (the  default) are ending balances at the end of the
-       report period, taking into account all transactions  before  that  date
-       (filtered  by  the  filter query if any), including transactions before
-       the start of the report period.  In other  words,  historical  balances
-       are  what  you  would  see on a bank statement for that account (unless
-       disturbed by a filter  query).   Period  balances  ignore  transactions
+       torical balances (the default) are ending balances at the  end  of  the
+       report  period,  taking  into account all transactions before that date
+       (filtered by the filter query if any),  including  transactions  before
+       the  start  of  the report period.  In other words, historical balances
+       are what you would see on a bank statement  for  that  account  (unless
+       disturbed  by  a  filter  query).   Period balances ignore transactions
        before the report start date, so they show the change in balance during
        the report period.  They are more useful eg when viewing a time log.
 
-       C toggles cleared mode, in which uncleared  transactions  and  postings
-       are  not  shown.   U  toggles  uncleared  mode, in which only uncleared
+       C  toggles  cleared  mode, in which uncleared transactions and postings
+       are not shown.  U toggles  uncleared  mode,  in  which  only  uncleared
        transactions/postings are shown.
 
        R toggles real mode, in which virtual postings are ignored.
 
-       Z toggles nonzero mode, in which only accounts  with  nonzero  balances
-       are  shown (hledger-ui shows zero items by default, unlike command-line
+       Z  toggles  nonzero  mode, in which only accounts with nonzero balances
+       are shown (hledger-ui shows zero items by default, unlike  command-line
        hledger).
 
        Press right or enter to view an account's transactions register.
@@ -235,62 +245,62 @@
        This screen shows the transactions affecting a particular account, like
        a check register.  Each line represents one transaction and shows:
 
-       o the  other  account(s)  involved, in abbreviated form.  (If there are
-         both real and virtual postings, it shows only the  accounts  affected
+       o the other account(s) involved, in abbreviated form.   (If  there  are
+         both  real  and virtual postings, it shows only the accounts affected
          by real postings.)
 
-       o the  overall change to the current account's balance; positive for an
+       o the overall change to the current account's balance; positive for  an
          inflow to this account, negative for an outflow.
 
        o the running historical total or period total for the current account,
-         after  the  transaction.  This can be toggled with H.  Similar to the
-         accounts screen, the historical total  is  affected  by  transactions
-         (filtered  by  the  filter query) before the report start date, while
+         after the transaction.  This can be toggled with H.  Similar  to  the
+         accounts  screen,  the  historical  total is affected by transactions
+         (filtered by the filter query) before the report  start  date,  while
          the period total is not.  If the historical total is not disturbed by
-         a  filter  query, it will be the running historical balance you would
+         a filter query, it will be the running historical balance  you  would
          see on a bank register for the current account.
 
-       If the accounts screen was in  tree  mode,  the  register  screen  will
+       If  the  accounts  screen  was  in  tree mode, the register screen will
        include transactions from both the current account and its subaccounts.
-       If the accounts screen  was  in  flat  mode,  and  a  non-depth-clipped
-       account  was  selected,  the  register screen will exclude transactions
+       If  the  accounts  screen  was  in  flat  mode, and a non-depth-clipped
+       account was selected, the register  screen  will  exclude  transactions
        from subaccounts.  In other words, the register always shows the trans-
-       actions  responsible  for  the  period  balance  shown  on the accounts
+       actions responsible for  the  period  balance  shown  on  the  accounts
        screen.  As on the accounts screen, this can be toggled with F.
 
-       C toggles cleared mode, in which uncleared  transactions  and  postings
-       are  not  shown.   U  toggles  uncleared  mode, in which only uncleared
+       C  toggles  cleared  mode, in which uncleared transactions and postings
+       are not shown.  U toggles  uncleared  mode,  in  which  only  uncleared
        transactions/postings are shown.
 
        R toggles real mode, in which virtual postings are ignored.
 
-       Z toggles nonzero mode, in which only transactions  posting  a  nonzero
-       change  are  shown (hledger-ui shows zero items by default, unlike com-
+       Z  toggles  nonzero  mode, in which only transactions posting a nonzero
+       change are shown (hledger-ui shows zero items by default,  unlike  com-
        mand-line hledger).
 
        Press right (or enter) to view the selected transaction in detail.
 
    Transaction screen
-       This screen shows a single transaction, as  a  general  journal  entry,
-       similar  to  hledger's  print command and journal format (hledger_jour-
+       This  screen  shows  a  single transaction, as a general journal entry,
+       similar to hledger's print command and  journal  format  (hledger_jour-
        nal(5)).
 
-       The transaction's date(s)  and  any  cleared  flag,  transaction  code,
-       description,  comments,  along  with  all  of  its account postings are
-       shown.  Simple transactions have two postings, but there  can  be  more
+       The  transaction's  date(s)  and  any  cleared  flag, transaction code,
+       description, comments, along with  all  of  its  account  postings  are
+       shown.   Simple  transactions  have two postings, but there can be more
        (or in certain cases, fewer).
 
-       up  and  down will step through all transactions listed in the previous
-       account register screen.  In the title bar, the numbers in  parentheses
-       show  your  position  within  that  account  register.   They will vary
+       up and down will step through all transactions listed in  the  previous
+       account  register screen.  In the title bar, the numbers in parentheses
+       show your position  within  that  account  register.   They  will  vary
        depending on which account register you came from (remember most trans-
        actions appear in multiple account registers).  The #N number preceding
        them is the transaction's position within the complete unfiltered jour-
        nal, which is a more stable id (at least until the next reload).
 
    Error screen
-       This  screen  will appear if there is a problem, such as a parse error,
-       when you press g to reload.  Once you have fixed the problem,  press  g
+       This screen will appear if there is a problem, such as a  parse  error,
+       when  you  press g to reload.  Once you have fixed the problem, press g
        again to reload and resume normal operation.  (Or, you can press escape
        to cancel the reload attempt.)
 
@@ -298,17 +308,17 @@
        COLUMNS The screen width to use.  Default: the full terminal width.
 
        LEDGER_FILE The journal file path when not specified with -f.  Default:
-       ~/.hledger.journal  (on  windows,  perhaps C:/Users/USER/.hledger.jour-
+       ~/.hledger.journal (on  windows,  perhaps  C:/Users/USER/.hledger.jour-
        nal).
 
 FILES
-       Reads data from one or more files in hledger journal, timeclock,  time-
-       dot,   or   CSV   format   specified   with  -f,  or  $LEDGER_FILE,  or
-       $HOME/.hledger.journal          (on          windows,           perhaps
+       Reads  data from one or more files in hledger journal, timeclock, time-
+       dot,  or  CSV  format  specified   with   -f,   or   $LEDGER_FILE,   or
+       $HOME/.hledger.journal           (on          windows,          perhaps
        C:/Users/USER/.hledger.journal).
 
 BUGS
-       The  need  to precede options with -- when invoked from hledger is awk-
+       The need to precede options with -- when invoked from hledger  is  awk-
        ward.
 
        -f- doesn't work (hledger-ui can't read from stdin).
@@ -316,17 +326,21 @@
        -V affects only the accounts screen.
 
        When you press g, the current and all previous screens are regenerated,
-       which may cause a noticeable pause.  Also there is no visual indication
-       that this is in progress.
+       which may cause a noticeable pause with large files.  Also there is  no
+       visual indication that this is in progress.
 
-       The register screen's switching between historic  balance  and  running
-       total based on query arguments may be confusing, and there is no column
-       heading to indicate which is being displayed.
+       --watch  is  not yet fully robust.  It works well for normal usage, but
+       many file changes in a short time (eg  saving  the  file  thousands  of
+       times  with an editor macro) can cause problems at least on OSX.  Symp-
+       toms include: unresponsive UI, periodic resetting of the  cursor  posi-
+       tion, momentary display of parse errors, high CPU usage eventually sub-
+       siding, and possibly a small but persistent build-up of CPU usage until
+       the program is restarted.
 
 
 
 REPORTING BUGS
-       Report bugs at http://bugs.hledger.org (or on the #hledger IRC  channel
+       Report  bugs at http://bugs.hledger.org (or on the #hledger IRC channel
        or hledger mail list)
 
 
@@ -340,7 +354,7 @@
 
 
 SEE ALSO
-       hledger(1),      hledger-ui(1),     hledger-web(1),     hledger-api(1),
+       hledger(1),     hledger-ui(1),     hledger-web(1),      hledger-api(1),
        hledger_csv(5), hledger_journal(5), hledger_timeclock(5), hledger_time-
        dot(5), ledger(1)
 
@@ -348,4 +362,4 @@
 
 
 
-hledger-ui 1.0                   October 2016                    hledger-ui(1)
+hledger-ui 1.1                   December 2016                   hledger-ui(1)
diff --git a/hledger-ui.cabal b/hledger-ui.cabal
--- a/hledger-ui.cabal
+++ b/hledger-ui.cabal
@@ -1,9 +1,9 @@
--- This file has been generated from package.yaml by hpack version 0.14.0.
+-- This file has been generated from package.yaml by hpack version 0.15.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           hledger-ui
-version:        1.0.5
+version:        1.1
 stability:      stable
 category:       Finance, Console
 synopsis:       Curses-style user interface for the hledger accounting tool
@@ -55,17 +55,20 @@
   hs-source-dirs:
       .
   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-name-shadowing -fno-warn-missing-signatures -fno-warn-type-defaults -fno-warn-orphans
-  cpp-options: -DVERSION="1.0.5"
+  cpp-options: -DVERSION="1.1"
   build-depends:
-      hledger >= 1.0.1 && < 1.1
-    , hledger-lib >= 1.0.1 && < 1.1
+      hledger >= 1.1 && < 1.2
+    , hledger-lib >= 1.1 && < 1.2
     , ansi-terminal >= 0.6.2.3 && < 0.7
+    , async
     , base >= 4.8 && < 5
     , base-compat >= 0.8.1
     , cmdargs >= 0.8
     , containers
     , data-default
+    , directory
     , filepath
+    , fsnotify >= 0.2 && < 0.3
     , HUnit
     , microlens >= 0.4 && < 0.5
     , microlens-platform >= 0.2.3.1 && < 0.4
@@ -82,8 +85,8 @@
     buildable: False
   else
     build-depends:
-        brick >= 0.12 && < 0.15
-      , vty >= 5.5 && < 5.13
+        brick >= 0.12 && < 0.16
+      , vty >= 5.5 && < 5.15
   if flag(threaded)
     ghc-options: -threaded
   if flag(oldtime)
