diff --git a/gnucash/report/report-system/html-document.scm b/gnucash/report/report-system/html-document.scm
index ecb045e2c3..906ab30b89 100644
--- a/gnucash/report/report-system/html-document.scm
+++ b/gnucash/report/report-system/html-document.scm
@@ -105,20 +105,11 @@
(apply gnc:make-html-data-style-info rest)
(apply gnc:make-html-markup-style-info rest))))
-(define (gnc:html-document-tree-collapse tree)
- (let ((retval '()))
- (let loop ((lst tree))
- (for-each
- (lambda (elt)
- (cond
- ((string? elt)
- (set! retval (cons elt retval)))
- ((not (list? elt))
- (set! retval (cons (object->string elt) retval)))
- (else
- (loop elt))))
- lst))
- retval))
+(define (gnc:html-document-tree-collapse . tree)
+ (let lp ((e tree) (accum '()))
+ (cond ((list? e) (fold lp accum e))
+ ((string? e) (cons e accum))
+ (else (cons (object->string e) accum)))))
;; first optional argument is "headers?"
;; returns the html document as a string, I think.