diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -71,11 +71,7 @@
 
 - bal: budget goals were ignoring rule-specified start date
 
-- bal: Allow cumulative gain and valuechange reports (Stephen Morgan)
-  Previously, --cumulative with --gain or --valuechange would produce an
-  empty report. This fixes this issue to produce a reasonable report.
-
-- cs/bs/is: Fixed non-display of child accounts when there is an
+- cf/bs/is: Fixed non-display of child accounts when there is an
   intervening account of another type.
   (#1921) (Stephen Morgan)
 
diff --git a/Hledger/Cli/Commands/Balance.hs b/Hledger/Cli/Commands/Balance.hs
--- a/Hledger/Cli/Commands/Balance.hs
+++ b/Hledger/Cli/Commands/Balance.hs
@@ -573,14 +573,20 @@
 -- | Render one MultiBalanceReport heading row as a HTML table row.
 multiBalanceReportHtmlHeadRow :: ReportOpts -> [T.Text] -> Html ()
 multiBalanceReportHtmlHeadRow _ [] = mempty  -- shouldn't happen
-multiBalanceReportHtmlHeadRow ropts (acct:rest) =
+multiBalanceReportHtmlHeadRow ropts (acct:cells) =
   let
     defstyle = style_ ""
     (amts,tot,avg)
-      | row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest])
-      | row_total_ ropts                   = (init rest,        [last rest],        [])
-      |                     average_ ropts = (init rest,        [],                 [last rest])
-      | otherwise                          = (rest,             [],                 [])
+      | row_total_ ropts && average_ ropts = (ini2,  sndlst2, lst2)
+      | row_total_ ropts                   = (ini1,  lst1,    [])
+      |                     average_ ropts = (ini1,  [],      lst1)
+      | otherwise                          = (cells, [],      [])
+      where
+        n = length cells
+        (ini1,lst1)    = splitAt (n-1) cells
+        (ini2, rest)   = splitAt (n-2) cells
+        (sndlst2,lst2) = splitAt 1 rest
+
   in
     tr_ $ mconcat $
           td_ [class_ "account"]              (toHtml acct)
@@ -591,14 +597,19 @@
 -- | Render one MultiBalanceReport data row as a HTML table row.
 multiBalanceReportHtmlBodyRow :: ReportOpts -> [T.Text] -> Html ()
 multiBalanceReportHtmlBodyRow _ [] = mempty  -- shouldn't happen
-multiBalanceReportHtmlBodyRow ropts (label:rest) =
+multiBalanceReportHtmlBodyRow ropts (label:cells) =
   let
     defstyle = style_ "text-align:right"
     (amts,tot,avg)
-      | row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest])
-      | row_total_ ropts                   = (init rest,        [last rest],        [])
-      |                     average_ ropts = (init rest,        [],                 [last rest])
-      | otherwise                          = (rest,             [],                 [])
+      | row_total_ ropts && average_ ropts = (ini2,  sndlst2, lst2)
+      | row_total_ ropts                   = (ini1,  lst1,    [])
+      |                     average_ ropts = (ini1,  [],      lst1)
+      | otherwise                          = (cells, [],      [])
+      where
+        n = length cells
+        (ini1,lst1)    = splitAt (n-1) cells
+        (ini2, rest)   = splitAt (n-2) cells
+        (sndlst2,lst2) = splitAt 1 rest
   in
     tr_ $ mconcat $
           td_ [class_ "account", style_ "text-align:left"]  (toHtml label)
@@ -615,14 +626,19 @@
 --   : repeat nullmixedamt zeros
 --  ++ (if row_total_ ropts then [nullmixedamt] else [])
 --  ++ (if average_ ropts   then [nullmixedamt]   else [])
-multiBalanceReportHtmlFootRow ropts (acct:rest) =
+multiBalanceReportHtmlFootRow ropts (acct:cells) =
   let
     defstyle = style_ "text-align:right"
     (amts,tot,avg)
-      | row_total_ ropts && average_ ropts = (init $ init rest, [last $ init rest], [last rest])
-      | row_total_ ropts                   = (init rest,        [last rest],        [])
-      |                     average_ ropts = (init rest,        [],                 [last rest])
-      | otherwise                          = (rest,             [],                 [])
+      | row_total_ ropts && average_ ropts = (ini2,  sndlst2, lst2)
+      | row_total_ ropts                   = (ini1,  lst1,    [])
+      |                     average_ ropts = (ini1,  [],      lst1)
+      | otherwise                          = (cells, [],      [])
+      where
+        n = length cells
+        (ini1,lst1)    = splitAt (n-1) cells
+        (ini2, rest)   = splitAt (n-2) cells
+        (sndlst2,lst2) = splitAt 1 rest
   in
     tr_ $ mconcat $
           th_ [style_ "text-align:left"]             (toHtml acct)
diff --git a/hledger.cabal b/hledger.cabal
--- a/hledger.cabal
+++ b/hledger.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hledger
-version:        1.27
+version:        1.27.1
 synopsis:       Command-line interface for the hledger accounting system
 description:    The command-line interface for the hledger accounting system.
                 Its basic function is to read a plain text file describing
@@ -134,7 +134,7 @@
   other-modules:
       Paths_hledger
   ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind -optP-Wno-nonportable-include-path
-  cpp-options: -DVERSION="1.27"
+  cpp-options: -DVERSION="1.27.1"
   build-depends:
       Decimal >=0.5.1
     , Diff >=0.2
@@ -152,7 +152,7 @@
     , githash >=0.1.6.1
     , hashable >=1.2.4
     , haskeline >=0.6
-    , hledger-lib ==1.27.*
+    , hledger-lib >=1.27.1 && <1.28
     , lucid
     , math-functions >=0.3.3.0
     , megaparsec >=7.0.0 && <9.3
@@ -186,7 +186,7 @@
   hs-source-dirs:
       app
   ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind -optP-Wno-nonportable-include-path
-  cpp-options: -DVERSION="1.27"
+  cpp-options: -DVERSION="1.27.1"
   build-depends:
       Decimal >=0.5.1
     , aeson >=1
@@ -203,7 +203,7 @@
     , githash >=0.1.6.1
     , haskeline >=0.6
     , hledger
-    , hledger-lib ==1.27.*
+    , hledger-lib >=1.27.1 && <1.28
     , math-functions >=0.3.3.0
     , megaparsec >=7.0.0 && <9.3
     , microlens >=0.4
@@ -237,7 +237,7 @@
   hs-source-dirs:
       test
   ghc-options: -Wall -Wno-incomplete-uni-patterns -Wno-missing-signatures -Wno-orphans -Wno-type-defaults -Wno-unused-do-bind -optP-Wno-nonportable-include-path
-  cpp-options: -DVERSION="1.27"
+  cpp-options: -DVERSION="1.27.1"
   build-depends:
       Decimal >=0.5.1
     , aeson >=1
@@ -254,7 +254,7 @@
     , githash >=0.1.6.1
     , haskeline >=0.6
     , hledger
-    , hledger-lib ==1.27.*
+    , hledger-lib >=1.27.1 && <1.28
     , math-functions >=0.3.3.0
     , megaparsec >=7.0.0 && <9.3
     , microlens >=0.4
@@ -303,7 +303,7 @@
     , githash >=0.1.6.1
     , haskeline >=0.6
     , hledger
-    , hledger-lib ==1.27.*
+    , hledger-lib >=1.27.1 && <1.28
     , html
     , math-functions >=0.3.3.0
     , megaparsec >=7.0.0 && <9.3
