diff --git a/Hledger/Cli/Options.hs b/Hledger/Cli/Options.hs
--- a/Hledger/Cli/Options.hs
+++ b/Hledger/Cli/Options.hs
@@ -456,25 +456,18 @@
     , FormatField True Nothing Nothing AccountField
     ]
 
--- | Get the journal file path from options, an environment variable, or a default.
--- If the path contains a literal tilde raise an error to avoid confusion. XXX
+-- | Get the (tilde-expanded, absolute) journal file path from options, an environment variable, or a default.
 journalFilePathFromOpts :: CliOpts -> IO String
 journalFilePathFromOpts opts = do
   f <- defaultJournalPath
-  let f' = fromMaybe f $ file_ opts
-  if '~' `elem` f'
-   then error' $ printf "~ in the journal file path is not supported, please adjust (%s)" f'
-   else return f'
+  d <- getCurrentDirectory
+  expandPath d $ fromMaybe f $ file_ opts
 
--- | Get the rules file path from options, if any.
--- If the path contains a literal tilde raise an error to avoid confusion. XXX
-rulesFilePathFromOpts :: CliOpts -> Maybe FilePath
-rulesFilePathFromOpts opts =
-  case rules_file_ opts of
-    Nothing -> Nothing
-    Just f -> if '~' `elem` f
-               then error' $ printf "~ in file paths is not supported, please adjust (%s)" f
-               else Just f
+-- | Get the (tilde-expanded) rules file path from options, if any.
+rulesFilePathFromOpts :: CliOpts -> IO (Maybe FilePath)
+rulesFilePathFromOpts opts = do
+  d <- getCurrentDirectory
+  maybe (return Nothing) (fmap Just . expandPath d) $ rules_file_ opts
 
 aliasesFromOpts :: CliOpts -> [(AccountName,AccountName)]
 aliasesFromOpts = map parseAlias . alias_
diff --git a/Hledger/Cli/Stats.hs b/Hledger/Cli/Stats.hs
--- a/Hledger/Cli/Stats.hs
+++ b/Hledger/Cli/Stats.hs
@@ -34,13 +34,16 @@
 
 showLedgerStats :: Ledger -> Day -> DateSpan -> String
 showLedgerStats l today span =
-    unlines (map (uncurry (printf fmt)) stats)
+    unlines $ map (\(label,value) -> concatBottomPadded [printf fmt1 label, value]) stats
     where
-      fmt = "%-" ++ show w1 ++ "s: %-" ++ show w2 ++ "s"
+      fmt1 = "%-" ++ show w1 ++ "s: "
+      -- fmt2 = "%-" ++ show w2 ++ "s"
       w1 = maximum $ map (length . fst) stats
-      w2 = maximum $ map (length . show . snd) stats
+      -- w2 = maximum $ map (length . show . snd) stats
       stats = [
-         ("Journal file", journalFilePath $ ledgerJournal l)
+         ("Main journal file", path) -- ++ " (from " ++ source ++ ")")
+        ,("Included journal files", unlines $ reverse $ -- cf journalAddFile
+                                    drop 1 $ journalFilePaths j)
         ,("Transactions span", printf "%s to %s (%d days)" (start span) (end span) days)
         ,("Last transaction", maybe "none" show lastdate ++ showelapsed lastelapsed)
         ,("Transactions", printf "%d (%0.1f per day)" tnum txnrate)
@@ -55,7 +58,9 @@
       -- Days since last transaction : %(recentelapsed)s
        ]
            where
-             ts = sortBy (comparing tdate) $ filter (spanContainsDate span . tdate) $ jtxns $ ledgerJournal l
+             j = ledgerJournal l
+             path = journalFilePath j
+             ts = sortBy (comparing tdate) $ filter (spanContainsDate span . tdate) $ jtxns j
              as = nub $ map paccount $ concatMap tpostings ts
              cs = Map.keys $ canonicaliseCommodities $ nub $ map commodity $ concatMap amounts $ map pamount $ concatMap tpostings ts
              lastdate | null ts = Nothing
diff --git a/Hledger/Cli/Utils.hs b/Hledger/Cli/Utils.hs
--- a/Hledger/Cli/Utils.hs
+++ b/Hledger/Cli/Utils.hs
@@ -48,8 +48,10 @@
   -- We kludgily read the file before parsing to grab the full text, unless
   -- it's stdin, or it doesn't exist and we are adding. We read it strictly
   -- to let the add command work.
-  journalFilePathFromOpts opts >>= readJournalFile Nothing (rulesFilePathFromOpts opts) >>=
-    either error' (cmd opts . journalApplyAliases (aliasesFromOpts opts))
+  rulespath <- rulesFilePathFromOpts opts
+  journalpath <- journalFilePathFromOpts opts
+  ej <- readJournalFile Nothing rulespath journalpath
+  either error' (cmd opts . journalApplyAliases (aliasesFromOpts opts)) ej
 
 -- -- | Get a journal from the given string and options, or throw an error.
 -- readJournalWithOpts :: CliOpts -> String -> IO Journal
diff --git a/hledger.cabal b/hledger.cabal
--- a/hledger.cabal
+++ b/hledger.cabal
@@ -1,5 +1,5 @@
 name:           hledger
-version: 0.18
+version: 0.18.1
 category:       Finance
 synopsis:       The main command-line interface for the hledger accounting tool.
 description:
@@ -62,7 +62,7 @@
                   Hledger.Cli.Stats
   -- should be the same as below
   build-depends:
-                  hledger-lib == 0.18
+                  hledger-lib == 0.18.1
                  ,base >= 3 && < 5
                  ,cabal-file-th
                  ,containers
@@ -117,7 +117,7 @@
        ghc-options:   -threaded
  -- should be the same as above
   build-depends:
-                  hledger-lib == 0.18
+                  hledger-lib == 0.18.1
                  ,base >= 3 && < 5
                  ,cabal-file-th
                  ,containers
