Index: src/report/report-system/html-acct-table.scm
===================================================================
--- src/report/report-system/html-acct-table.scm	(revision 16576)
+++ src/report/report-system/html-acct-table.scm	(working copy)
@@ -663,7 +663,7 @@
 			  )
 			)
 	     )
-	;; what the heck is this? how about (case balance-mode blah...
+	;; what the heck is this? how about (case balance-mode blah)...
 	(or (and (equal? balance-mode 'post-closing) post-closing-bal)
 	    (and (equal? balance-mode 'pre-closing)
 		 (let* ((closing-amt (closing account))
@@ -686,14 +686,20 @@
 
     ;; helper to calculate the balances for all required accounts
     (define (calculate-balances accts start-date end-date)
-      (if (not (null? accts))
-	  (cons (cons (car accts)
-		      ;; using the existing function that cares about balance-mode
-		      ;; maybe this should get replaces at some point.
-		      (get-balance-nosub-mode (car accts) start-date end-date))
-		(calculate-balances (cdr accts) start-date end-date))
-	  '()
-	  )
+      (define (calculate-balances-helper accts start-date end-date acct-balances)
+        (if (not (null? accts))
+            (begin
+                ;; using the existing function that cares about balance-mode
+                ;; maybe this should get replaces at some point.
+                (hash-set! acct-balances (gncAccountGetGUID (car accts))
+                    (get-balance-nosub-mode (car accts) start-date end-date))
+                (calculate-balances-helper (cdr accts) start-date end-date acct-balances)
+            )
+            acct-balances)
+        )
+        
+      (calculate-balances-helper accts start-date end-date
+                                 (make-hash-table 23))                                 
       )
 
 
@@ -712,12 +718,7 @@
 	(let ((this-collector (gnc:make-commodity-collector)))
 	  (gnc-commodity-collector-merge 
 	   this-collector 
-	   (if (not (null? acct-balances))
-	       ;; if the acct matches, return the appropriate balance
-	       (if (equal? acct (caar acct-balances))
-		   (cdar acct-balances)
-		   ;; otherwise, keep looking
-		   (get-balance (cdr acct-balances) acct))
+	   (or (hash-ref acct-balances (gncAccountGetGUID acct))
 	       ;; return a zero commodity collector
 	       (gnc:make-commodity-collector)
 	       )
@@ -732,7 +733,7 @@
       ;; sub-accounts.
       (define (get-balance-sub acct-balances account)
 	;; its important to make a *new* collector for this, otherwise we're dealing with 
-	;; pointers to the current collectors in our acct-balances list and that's a 
+	;; pointers to the current collectors in our acct-balances hash and that's a 
 	;; problem -- the balances get changed.
 	(let ((this-collector (gnc:make-commodity-collector)))
 	  ;; get the balance of the parent account and stick it on the collector
